前提・実現したいこと
画像判別機を作っています。今回は、5円玉と、50円玉の2種類を分類しようと思っています。
そこで、Pythonでコードを見ながら書いてみることにしました。
しかし、エラーが出たので、わかる方がいらっしゃったら、解決策を教えてくださるとありがたいです。
発生している問題・エラーメッセージ
WARNING:tensorflow:From C:\Anaconda\lib\site-packages\tensorflow_core\python\ops\resource_variable_ops.py:1630: calling BaseResourceVariable.__init__ (from tensorflow.python.ops.resource_variable_ops) with constraint is deprecated and will be removed in a future version. Instructions for updating: If using Keras pass *_constraint arguments to layers. Traceback (most recent call last): File "C:/Users/kamimura/syncFolder/DeepLearning/fruit.py", line 58, in <module> model.fit(image_list, Y, epochs=1500, batch_size=100, validation_split=0.1) File "C:\Anaconda\lib\site-packages\keras\engine\training.py", line 1154, in fit batch_size=batch_size) File "C:\Anaconda\lib\site-packages\keras\engine\training.py", line 579, in _standardize_user_data exception_prefix='input') File "C:\Anaconda\lib\site-packages\keras\engine\training_utils.py", line 145, in standardize_input_data str(data_shape)) ValueError: Error when checking input: expected dense_1_input to have shape (1875,) but got array with shape (12288,)
エラーメッセージがこちらです。
該当のソースコード
python
1 2from keras.models import Sequential 3from keras.layers import Activation, Dense, Dropout 4from keras.utils.np_utils import to_categorical 5from keras.optimizers import Adadelta 6from keras.optimizers import Adam 7import numpy as np 8from PIL import Image 9import os 10from keras.utils import np_utils 11 12 13#学習用のデータセットを作る 14image_list = [] 15label_list = [] 16 17#./data/trainに以下の5yen 50yenディレクトリ以下の画像を読み込む 18for dir in os.listdir("data\train"): 19 dir1 = "data\train\" + dir 20 label = 0 21 22 if dir == "5yen": 23 label = 0 24 elif dir == "50yen": 25 label = 1 26 27 for file in os.listdir(dir1): 28 #配列label_listに正解ラベルを追加 29 label_list.append(label) 30 filepath = dir1 + "\" + file 31 #画像を64×64にし、RGBの値を読み込む 32 image = np.array(Image.open(filepath)) 33 print(filepath) 34 35 image = image.transpose(2, 0, 1) 36 image = image.reshape(1, image.shape[0] * image.shape[1] * image.shape[2]).astype("float32")[0] 37 image_list.append(image / 255.) 38 39#kerasに渡すためにnumpy配列に変更 40image_list = np.array(image_list) 41Y = np_utils.to_categorical(label_list) 42 43 44#モデルを生成して、ニュートラルネットワークを生成 45model = Sequential() 46model.add(Dense(200, input_dim=1875)) 47model.add(Activation("relu")) 48model.add(Dropout(0.2)) 49 50model.add(Dense(200)) 51model.add(Activation("relu")) 52model.add(Dropout(0.2)) 53 54model.add(Dense(2)) 55model.add(Activation("softmax")) 56 57opt = Adam(lr=0.001) 58model.compile(loss="categorical_crossentropy", optimizer=opt, metrics=["accuracy"]) 59model.fit(image_list, Y, epochs=1500, batch_size=100, validation_split=0.1) 60 61#テスト用ディレクトリで正解率をチェックする 62total = 0. 63ok_count = 0. 64 65for dir in os.listdir("data\train"): 66 dir1 = "data\test\" + dir 67 label = 0 68 69 if dir == "5yen": 70 label = 0 71 72 elif dir == "50yen": 73 label = 1 74 75 for file in os.listdir(dir1): 76 label_list.append(label) 77 filepath = dir1 + "\" + file 78 image = np.array(Image.open(filepath)) 79 print(filepath) 80 image = image.transpose(2, 0, 1) 81 image = image.reshape(1, image.shape[0] * image.shape[1] * image.shape[2]).astype("float32")[0] 82 result = model.predict_classes(np.array([image / 255.])) 83 print("label:", label, "result", result[0]) 84 85 total += 1. 86 if label == result[0]: 87 ok_count += 1. 88 89 90print("seikai:", ok_count / total * 100, "%")
また、このコードは、Kerasによる、ものすごくシンプルな画像分類(りんごとオレンジ)というサイトを参考にさせてもらいました。
このサイトでは、25×25のサイズの画像を指定してますが、私のほうでは、64×64ですでに前処理が完了しています。
試したこと
ValueError: Error when checking input: expected dense_1_input to have shape (1875,) but got array with shape (12288,)
というエラーをググってみたところ、
kerasによる最終層の出力の設定というサイトの通りに
from keras.utils import np_utils
を追加し、
Y = to_categorical(label_list)
から、
Y = np_utils.to_categorical(label_list)
に変更しましたが、エラーは変わらないままでした。
どなたかご教授いただけるとありがたいです。
また、ディープラーニング初心者であるため、詳しく教えていただけるとありがたいです。
よろしくお願いします。
補足情報(FW/ツールのバージョンなど)
Windows10
python 3.6.6
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/02/14 04:06