2017-06-21 108 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值(像素)的圖像。你想用只包含一維數字的ANN進行分類(想象你的ANN的第一層是500行長的神經元,只能理解500行長的數字而不是28x28的矩陣)。

要解決你的錯誤,你必須先重塑你的數據:

(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通過保持你的圖像的空間,以實現更高的精度,而不是扁平化出來到一長串數字比你必須改變你的模型架構到卷積神經網絡(大量的在線示例代碼,尤其是MNIST)。