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

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

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

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python

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

Q&A

1回答

787閲覧

Kerasで大容量データを扱う際のエラー

Python-V

総合スコア0

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python

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

0グッド

0クリップ

投稿2021/09/20 08:10

編集2021/09/20 08:41

前提・実現したいこと

機械学習初心者です。
Kerasでモデルを作成しています。
どの食べ物かを判定するAIで,フィッティングを行っています。
しかし画像ファイルが数千枚あり,少量の画像ならしっかりフィッティングできるのですが大量の画像だとエラーが出てしまいます。詳しい方ご教授お願いします。

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

Epoch 1/10 Traceback (most recent call last): File "C:\Users\ユーザ\Documents\work\train2.py", line 51, in <module> main() File "C:\Users\ユーザ\Documents\work\train2.py", line 41, in main model.fit_generator( File "C:\anaconda3\lib\site-packages\keras\engine\training.py", line 1975, in fit_generator return self.fit( File "C:\anaconda3\lib\site-packages\keras\engine\training.py", line 1184, in fit tmp_logs = self.train_function(iterator) File "C:\anaconda3\lib\site-packages\tensorflow\python\eager\def_function.py", line 885, in __call__ result = self._call(*args, **kwds) File "C:\anaconda3\lib\site-packages\tensorflow\python\eager\def_function.py", line 950, in _call return self._stateless_fn(*args, **kwds) File "C:\anaconda3\lib\site-packages\tensorflow\python\eager\function.py", line 3039, in __call__ return graph_function._call_flat( File "C:\anaconda3\lib\site-packages\tensorflow\python\eager\function.py", line 1963, in _call_flat return self._build_call_outputs(self._inference_function.call( File "C:\anaconda3\lib\site-packages\tensorflow\python\eager\function.py", line 591, in call outputs = execute.execute( File "C:\anaconda3\lib\site-packages\tensorflow\python\eager\execute.py", line 59, in quick_execute tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name, tensorflow.python.framework.errors_impl.InvalidArgumentError: Input to reshape is a tensor with 11520 values, but the requested shape requires a multiple of 12544 [[node sequential/flatten/Reshape (defined at Users\ユーザ\Documents\work\train2.py:41) ]] [Op:__inference_train_function_759] Function call stack: train_function

該当のソースコード

Python

1from keras.models import Sequential 2from keras.layers import Activation, Dense 3from keras.layers import Conv2D, MaxPooling2D, Flatten 4from keras.preprocessing.image import ImageDataGenerator 5 6def main(): 7 model = Sequential() 8 model.add(Conv2D(64,(3,3), input_shape = (64,64,3))) 9 model.add(Activation("relu")) 10 model.add(MaxPooling2D(pool_size = (2,2))) 11 12 model.add(Conv2D(64,(3,3))) 13 model.add(Activation("relu")) 14 model.add(MaxPooling2D(pool_size = (2,2))) 15 16 model.add(Flatten()) 17 model.add(Dense(256)) 18 model.add(Activation("relu")) 19 model.add(Dense(2)) 20 model.add(Activation("softmax")) 21 # model.summary() 22 23 model.compile( 24 optimizer = "adam", 25 loss = "categorical_crossentropy", 26 metrics = ["accuracy"]) 27 28 train_datagen = ImageDataGenerator(rescale = 1./255) 29 test_datagen = ImageDataGenerator(rescale = 1./255) 30 31 train_generator = train_datagen.flow_from_directory( 32 "data/images",#ここに数千枚の画像 33 target_size = (64,64), 34 batch_size = 10) 35 36 validation_generator = test_datagen.flow_from_directory( 37 "data/test",#ここに数百枚の画像 38 target_size = (64,64), 39 batch_size = 10) 40 41 model.fit_generator( 42 train_generator, 43 epochs = 5, 44 steps_per_epoch = 10, 45 validation_data = validation_generator, 46 validation_steps = 10) 47 48 model.save("model.h5") 49 50if __name__ == "__main__": 51 main()

試したこと

エポック数を高くしてみた

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

anaconda3

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/09/20 08:31

至急とか書くと閲覧者・回答者はイラっとくるので止めた方が良いです。至急はあなたの都合にすぎず、自分のことしか考えてないと思うから。
Python-V

2021/09/20 08:36

わかりました。
guest

回答1

0

tensorflow.python.framework.errors_impl.InvalidArgumentError: Input to reshape is a tensor with 11520 values, but the requested shape requires a multiple of 12544

入力データのreshapeでコケています。
12544というだけはピンときませんが、128x98くらいの画像を使っていませんか?
これに対して128x90=11520 くらいの画像が混ざっているはずです。

■対策
ネットワークに読み込む前に画像群を一度走査して、shapeが正しいか確認してください。
globでファイル群をさらってリストに格納、以下略な感じで行けそうです。

Python3

1filelist = glob.glob(...) 2for file in filelist: 3 img = cv2.imread(file) 4 if img.shape != (狙いのshape): 5 print(file) 6 sys.exit()

投稿2021/09/20 08:31

編集2021/09/20 08:32
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Python-V

2021/09/25 11:33

すみません。 上記のコードを拝借してやってみたのですが、 AttributeError: 'NoneType' object has no attribute 'shape' といったエラーが発生します。 どうすればよいでしょうか?
退会済みユーザー

退会済みユーザー

2021/09/25 13:19 編集

img = cv2.imread(file)のあとにAttributeError: 'NoneType'が出ていたとしたら、 imgがNoneだった=ファイルを読み込めていなかった です。 よくある例でいえば、glob.globでは根こそぎファイルを拾ってくるので、画像ではないファイル(例えばテキストファイルなど)を拾ってしまい、そのままOpenCV経由でファイルを読み込もうとするとファイルを読み込めずにNoneになります。パスを手打ちしていたら「パスが違ってた」「カレントディレクトリがあってなかった」がよくありますが、globなのでまず間違いなくファイル自体はあって、それが"画像ファイルではない"と思います。「読み込めないファイル(None)のShapeなんかねーよ」と激おこぷんぷん丸なわけです。 もしこれがビンゴであれば、globのリストの結果に対して、png,bmp,jpgはOKとする、ほかはリストから省く(か、そこでfor文の処理をすっ飛ばして次のforの中身に移る)、みたいな処理が必要になります。list_ext = [".png",".bmp",".jpg"]みたいな感じで拡張子を定義して、for file in filelist:の直下にif list_extに該当する拡張子がすべて小文字にした文字列fileの中にあればファイルを読み込む みたいにすればOKです。 大事なのはすべて大文字か小文字に揃えることです。Pythonだと大文字小文字を別物として扱うので.BMPと.bmpを文字列比較すると「違う」となってしまうんですね。なので文字列は必ず大文字か小文字にプログラム側でそろえてやってください。 あー、 if img is None: ____# 読み込み不良はすっとばす ____print("[",file,"]は画像ファイルじゃないよ") elif img.shape != (狙いのshape): ____print("[",file,"]はshape"[, str(img.shape),"]がおかしいよ") else: ____print("うまくいった場合の処理") の方が早いです。読み込めなければ無視する、は簡単でやりやすいはずです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.45%

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

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

質問する

関連した質問