前提・実現したいこと
CNNを用いて、CIFAR-10のデータセットを分類したいです。
jupyternotebookを使用しています。
発生している問題・エラーメッセージ
ValueError: Error when checking target: expected activation_40 to have 2 dimensions, but got array with shape (50000, 10, 10)
該当のソースコード
Python
1import matplotlib.pyplot as plt 2import keras 3from keras.datasets import cifar10 4from keras.models import Sequential 5from keras.layers import Dense, Dropout, Activation, Flatten 6from keras.layers import Conv2D, MaxPooling2D 7 8num_classes = 10 9im_rows = 32 10im_cols = 32 11in_shape = (im_rows, im_cols, 3) 12 13(X_train, y_train), (X_test, y_test) = cifar10.load_data() 14 15X_train = X_train.astype('float32') / 255 16X_test = X_test.astype('float32') / 255 17 18y_train = keras.utils.to_categorical(y_train, num_classes) 19y_test = keras.utils.to_categorical(y_train, num_classes) 20 21model = Sequential() 22model.add(Conv2D(32, (3, 3), padding='same', 23 input_shape=in_shape)) 24model.add(Activation('relu')) 25model.add(Conv2D(32, (3, 3))) 26model.add(Activation('relu')) 27model.add(MaxPooling2D(pool_size=(2, 2))) 28model.add(Dropout(0.25)) 29 30model.add(Conv2D(64, (3, 3), padding='same')) 31model.add(Activation('relu')) 32model.add(Conv2D(64, (3, 3))) 33model.add(Activation('relu')) 34model.add(MaxPooling2D(pool_size=(2, 2))) 35model.add(Dropout(0.25)) 36 37model.add(Flatten()) 38model.add(Dense(512)) 39model.add(Activation('relu')) 40model.add(Dropout(0.5)) 41model.add(Dense(num_classes)) 42model.add(Activation('softmax')) 43 44model.compile( 45 loss='categorical_crossentropy', 46 optimizer='adam', 47 metrics=['accuracy']) 48 49hist = model.fit(X_train, y_train, 50 batch_size=32, epochs=50, 51 verbose=1, 52 validation_data=(X_test, y_test)) 53 54score = model.evaluate(X_test, y_test, verbose=1) 55print('正解率=', score[1], 'loss=', score[0]) 56 57plt.plot(hist.history['acc']) 58plt.plot(hist.history['val_acc']) 59plt.title('Accuracy') 60plt.legend(['train', 'test'], loc='upper left') 61plt.show() 62plt.plot(hist.history['loss']) 63plt.plot(hist.history['val_loss']) 64plt.title('Loss') 65plt.legend(['train', 'test'], loc='upper left'), 66plt.show()
試したこと
コードの打ち間違いを確認しましたが、なさそうでした。
補足情報(FW/ツールのバージョンなど)
本を使用して勉強しています。今回は本に記載されているコードをそのまま打ちました。
Python初心者ですので基本的な部分でつまづいている可能性がありますが、わかる方いらっしゃいますでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/19 07:54