2017-06-21 23 views
0

にターゲットを確認するとき、次のように私のコードは次のとおりです。MNISTとValueError Keras

from keras.datasets import mnist 
from keras.utils import np_utils 
from keras.models import Sequential 
from keras.layers import Dense, Activation 

(x_train, y_train), (x_test, y_test) = mnist.load_data() 
y_train = np_utils.to_categorical(y_train, 10) 
y_test = np_utils.to_categorical(y_test, 10) 

model = Sequential() 

model.add(Dense(output_dim=500, input_shape=(28, 28))) 
model.add(Activation("tanh")) 
model.add(Dense(10)) 
model.add(Activation("softmax")) 

model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy']) 
model.fit(x_train, y_train, nb_epoch=50, batch_size=20) 

これは、次のエラーを取得:

ValueError: Error when checking target: expected activation_2 to have 3 dimensions, but got array with shape (60000, 10) 

を私は形状(60000、10)がy_trainの形だと思いますこれは2次元を持ち、3次元はどこかに予想されます。

どこで編集すればよいですか?

答えて

0

MNISTサンプルは、28 x 28値(ピクセル)の画像です。あなたは1次元の数列しか取らないANNで分類したいと考えています(あなたのANNの最初の層を、500行の長い行を理解するだけの500行のニューロンとして想像してください)。

(X_train, y_train), (X_test, y_test) = mnist.load_data() 

X_train = X_train.reshape(60000, 784) 
X_test = X_test.reshape(10000, 784) 
X_train = X_train.astype('float32') 
X_test = X_test.astype('float32') 

Y_train = np_utils.to_categorical(y_train, 10) 
Y_test = np_utils.to_categorical(y_test, 10) 

... 

model = Sequential() 
model.add(Dense(512, input_shape=(784,))) 

をあなたがあなたのイメージの空間的順序を保存することによって、より精度を達成ではなく、それらを平らに2dにあなたのデータに供給するようにしたい場合:

あなたが事前にデータを再構築する必要があなたのエラーを修正するにはモデルアーキテクチャをConvolutional Neural Networkに変更する必要があるよりも長い番号のリスト(オンラインでは、特にMNISTのための多くのサンプルコードがオンラインになります)。

関連する問題