質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

5158閲覧

cannot unpack non-iterable Sequential objectを解決したい

K2ohei

総合スコア2

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/01/07 02:20

前提・実現したいこと

Pythonにて鋳物の画像を用いた画像判別機を作ろうとしています。
model.fitの場面に以下のエラーメッセージが発生しました。
解決方法を探っています。
お判りになる方いらっしゃいましたら、
メッセージ頂けると幸いです。

発生している問題・エラーメッセージ

TypeError Traceback (most recent call last) <ipython-input-16-27f12ae95326> in <module> 22 return predictions, history 23 ---> 24 predictions, history = OKDEF() TypeError: cannot unpack non-iterable Sequential object

該当のソースコード

Python

1import os, cv2, random 2import numpy as np 3import pandas as pd 4 5import matplotlib.pyplot as plt 6from matplotlib import ticker 7import seaborn as sns 8%matplotlib inline 9 10import tensorflow 11from tensorflow.keras.models import Sequential 12from tensorflow.keras.layers import Input, Dropout, Flatten, Convolution2D, MaxPooling2D, Dense, Activation 13from tensorflow.keras.optimizers import RMSprop 14from tensorflow.keras.callbacks import ModelCheckpoint, Callback, EarlyStopping 15import np_utils 16 17TRAIN_DIR = './archive/casting_data/casting_data/train/' 18TEST_DIR = './archive/casting_data/casting_data/test/' 19 20 21ROWS = 64 22COLS = 64 23CHANNELS = 3 24 25train_images = [TRAIN_DIR+i for i in os.listdir(TRAIN_DIR)] # use this for full dataset 26train_ok = [TRAIN_DIR+i for i in os.listdir(TRAIN_DIR) if 'cast_ok' in i] 27train_def = [TRAIN_DIR+i for i in os.listdir(TRAIN_DIR) if 'cast_def' in i] 28 29test_images = [TEST_DIR+i for i in os.listdir(TEST_DIR)] 30 31# slice datasets for memory efficiency on Kaggle Kernels, delete if using full dataset 32train_images = train_ok + train_def 33random.shuffle(train_images) 34test_images = test_images 35 36def read_image(file_path): 37 img = cv2.imread(file_path, cv2.IMREAD_COLOR) #cv2.IMREAD_GRAYSCALE 38 return cv2.resize(img, (ROWS, COLS), interpolation=cv2.INTER_CUBIC) 39 40 41def prep_data(images): 42 count = len(images) 43 data = np.ndarray((count, CHANNELS, ROWS, COLS), dtype=np.uint8) 44 45 for i, image_file in enumerate(images): 46 image = read_image(image_file) 47 data[i] = image.T #transpose mxn > nxm 48 if i%250 == 0: print('Processed {} of {}'.format(i, count)) 49 50 return data 51 52train = prep_data(train_images) 53test = prep_data(test_images) 54 55print("Train shape: {}".format(train.shape)) 56print("Test shape: {}".format(test.shape)) 57 58labels = [] 59for i in train_images: 60 if 'cast_ok_' in i: 61 labels.append(1) 62 else: 63 labels.append(0) 64 65sns.countplot(labels) 66plt.title('OK and def') 67 68labels = np.array(labels) 69 70DEF_avg = np.array([DEF[0].T for i, DEF in enumerate(train) if labels[i]==1]).mean(axis=0) 71plt.imshow(DEF_avg) 72plt.title('Average DEF') 73 74OK_avg = np.array([OK[0].T for i, OK in enumerate(train) if labels[i]==0]).mean(axis=0) 75plt.imshow(OK_avg) 76plt.title('Average OK') 77 78optimizer = RMSprop(lr=1e-4) 79objective = 'binary_crossentropy' 80 81 82def OKDEF(): 83 84 model = Sequential() 85 86 model.add(Convolution2D(32, (3, 3), input_shape=(3, ROWS, COLS), activation='relu', padding="same")) 87 model.add(Convolution2D(32, (3, 3), activation='relu', padding="same")) 88 model.add(MaxPooling2D(data_format="channels_first", pool_size=(2, 2))) 89 90 model.add(Convolution2D(64, (3, 3), activation='relu', padding="same")) 91 model.add(Convolution2D(64, (3, 3), activation='relu', padding="same")) 92 model.add(MaxPooling2D(data_format="channels_first", pool_size=(2, 2))) 93 94 model.add(Convolution2D(128, (3, 3), activation='relu', padding="same")) 95 model.add(Convolution2D(128, (3, 3), activation='relu', padding="same")) 96 model.add(MaxPooling2D(data_format="channels_first", pool_size=(2, 2))) 97 98 model.add(Convolution2D(256, (3, 3), activation='relu', padding="same")) 99 model.add(Convolution2D(256, (3, 3), activation='relu', padding="same")) 100 model.add(MaxPooling2D(data_format="channels_first", pool_size=(2, 2))) 101 102 model.add(Flatten()) 103 model.add(Dense(256, activation='relu')) 104 model.add(Dropout(0.5)) 105 106 model.add(Dense(256, activation='relu')) 107 model.add(Dropout(0.5)) 108 109 model.add(Dense(1)) 110 model.add(Activation('sigmoid')) 111 112 model.compile(loss=objective, optimizer=optimizer, metrics=['accuracy']) 113 return model 114 115 116model = OKDEF() 117 118train = tensorflow.transpose(train, [0, 2, 3, 1]) 119test = tensorflow.transpose(test,[0, 2, 3, 1]) 120 121epochs = 10 122batch_size = 16 123 124class LossHistory(Callback): 125 def on_train_begin(self, logs={}): 126 self.losses = [] 127 self.val_losses = [] 128 129 def on_epoch_end(self, batch, logs={}): 130 self.losses.append(logs.get('loss')) 131 self.val_losses.append(logs.get('val_loss')) 132 133early_stopping = EarlyStopping(monitor='val_loss', patience=3, verbose=1, mode='auto') 134 135def run_OKDEF(): 136 137 history = LossHistory() 138 model.fit(train, labels, batch_size=batch_size, epochs=epochs, 139 validation_split=0.25, verbose=0, shuffle=True, callbacks=[history, early_stopping]) 140 141 predictions = model.predict(test, verbose=0) 142 return predictions, history 143 144predictions, history = OKDEF()

試したこと

NHWCへの変換
errorでの検索

補足情報(FW/ツールのバージョンなど)

Python 3.8.8
TensorFlow 2.3.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

提示ソース内容はほぼ理解していませんが
predictions, history = OKDEF()の部分はpredictions, history = run_OKDEF()が正しいと思います。

投稿2022/01/07 02:26

can110

総合スコア38341

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

K2ohei

2022/01/07 03:32

run_OKDEF()に直して実行を行いました。 すると Input 0 of layer sequential is incompatible with the layer: expected axis -1 of input shape to have value 64 but received input with shape [None, 64, 64, 3] というエラーがさらに出てきました。 調べはしましたが、良い解決策が見つかっていません。
guest

0

---> 24 predictions, history = OKDEF()

TypeError: cannot unpack non-iterable Sequential object

返り値を2つの変数で受けているのに、(たぶん)1つしか返ってきていないというエラーです。

ちらっとしか見ていませんが、ここは、

python

1predictions, history = run_OKDEF()

の間違えではないかと思います。

投稿2022/01/07 02:26

TakaiY

総合スコア13790

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

K2ohei

2022/01/07 02:36

run_OKDEF()に直して実行を行いました。 すると Input 0 of layer sequential is incompatible with the layer: expected axis -1 of input shape to have value 64 but received input with shape [None, 64, 64, 3] というエラーがさらに出てきました。 shapeがNoneになっているのも不思議なところです。
guest

0

In retro games, there are various options for randomly choosing records from a database table, each having pros and cons. One method may be better suited than the others depending on the particular requirements of the application.

投稿2023/05/19 04:54

clamb10

総合スコア40

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問