本を見ながらKerasよりデータを取得して Deep Learningを試しています。
mnistからのデータを使い、モデルを作成して実際に手書き画像ファイルを読ませて試したのですが、
ValueError: Error when checking input: expected dense_1_input to have 2 dimensions, but got array with shape (28, 28, 3)
と出ます。
えっ、(28, 28)ではないの?最終的に(784,)にしないとモデルに入れられないのに。といったところで、なぜ(28, 28, 3)という三次元になるのか、それを(784,)の一次元でモデルに入れるための方法をご教示願います。
%matplotlib inline from __future__ import division, print_function from keras import backend as K from keras.datasets import mnist from keras.layers import Activation, Dense, Dropout from keras.layers.normalization import BatchNormalization from keras.models import Sequential from keras.utils.np_utils import to_categorical import numpy as np from sklearn.metrics import classification_report, confusion_matrix # Kerasに付属の手書き数字画像データをダウンロード np.random.seed(0) (X_train, labels_train), (X_test, labels_test) = mnist.load_data() # 各画像は行列なのでベクトルに変換→X_trainとX_testを作成 n_samples_train = X_train.shape[0] X_train = X_train.reshape(n_samples_train, -1) n_samples_test = X_test.shape[0] X_test = X_test.reshape(n_samples_test, -1) X_train.shape # ラベルをone-hotベクトル(値がひとつだけ1で他が0のベクトル)に変換→Y_trainとY_testを作成 Y_train = to_categorical(labels_train) Y_test = to_categorical(labels_test) #Deep Learningモデルコード model = Sequential() model.add(Dense(10, input_dim = 784)) model.add(BatchNormalization()) model.add(Activation('relu')) model.add(Dense(10)) model.add(BatchNormalization()) model.add(Activation('relu')) model.add(Dense(10)) model.add(BatchNormalization()) model.add(Activation('softmax')) model.compile(optimizer='adam',loss='categorical_crossentropy', metrics=['accuracy']) # Trainingの実施 model.fit(X_train ,Y_train ,epochs = 10 ,batch_size = 128, validation_data=(X_test, Y_test)) # Test dataを用いてモデルを評価(accuracyを算出) _,acc = model.evaluate(X_test ,Y_test ,verbose = 0) print('accuracy:{:.2f}'.format(acc)) **#以下データ読み込み、予測コード** import numpy as image_np from PIL import Image, ImageOps import os #取得画像answer image_ans = (8,9,5,0) #'number_file'フォルダ内ファイル取得 images = os.listdir('number_file') for i in images: if i == 'Thumbs.db': continue #imagesの中にある全ての画像をopen image = Image.open('number_file/'+i) #画素値を逆転 image = ImageOps.invert(image) #配列変換 image = np.array(image) #データをモデルに入れて予測 image_data_pred = model.predict_classes(image, verbose = 0)
読み込んだデータをimage.shape()でかくにんしたところ、
エラー内容と同様に(28, 28, 3)となっていました。
回答2件
あなたの回答
tips
プレビュー