神经网络维度不匹配
Neural network dimension mis-match
我在 Keras 中为 MNIST 数字数据集设置了一个神经网络,如下所示:
input_size = features_train.shape[1]
hidden_size = 200
output_size = 9
lambda_reg = 0.2
learning_rate = 0.01
num_epochs = 50
batch_size = 30
model = Sequential()
model.add(Dense(input_size, hidden_size, W_regularizer=l2(lambda_reg), init='normal'))
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Dense(hidden_size, output_size, W_regularizer=l2(lambda_reg), init='normal'))
model.add(Activation('softmax'))
sgd = SGD(lr=learning_rate, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='mean_squared_error', optimizer=sgd)
history = History()
model.fit(features_train, labels_train, batch_size=batch_size, nb_epoch=num_epochs, show_accuracy=True, verbose=2, validation_split=0.2, callbacks=[history])
score = model.evaluate(features_train, labels_train, show_accuracy=True, verbose=1)
predictions = model.predict(features_train)
print('Test score:', score[0])
print('Test accuracy:', score[1])
features_train 的形状是 (1000,784),labels_train 的形状是 (1000,1),两者都是 numpy 数组。我想要 784 个输入节点,200 个隐藏节点和 9 个输出节点来对数字进行分类
我不断收到输入维度不匹配错误:
Input dimension mis-match. (input[0].shape[1] = 9, input[1].shape[1] = 1)
Apply node that caused the error: Elemwise{Sub}[(0, 0)](AdvancedSubtensor1.0, AdvancedSubtensor1.0)
Inputs types: [TensorType(float32, matrix), TensorType(float32, matrix)]
Inputs shapes: [(30L, 9L), (30L, 1L)]
Inputs strides: [(36L, 4L), (4L, 4L)]
Inputs values: ['not shown', 'not shown']
我正在尝试确定我的尺寸在哪里可能不正确,但我没有看到。谁能看出问题所在?
我已经训练了 2 class class化模型太久了,以至于我习惯于处理只有单个值的标签。对于这个问题(class验证超过 1 个结果)我只需要将标签更改为向量本身。
这解决了我的问题:
from keras.utils.np_utils import to_categorical
labels_train = to_categorical(labels_train)
我在 Keras 中为 MNIST 数字数据集设置了一个神经网络,如下所示:
input_size = features_train.shape[1]
hidden_size = 200
output_size = 9
lambda_reg = 0.2
learning_rate = 0.01
num_epochs = 50
batch_size = 30
model = Sequential()
model.add(Dense(input_size, hidden_size, W_regularizer=l2(lambda_reg), init='normal'))
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Dense(hidden_size, output_size, W_regularizer=l2(lambda_reg), init='normal'))
model.add(Activation('softmax'))
sgd = SGD(lr=learning_rate, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='mean_squared_error', optimizer=sgd)
history = History()
model.fit(features_train, labels_train, batch_size=batch_size, nb_epoch=num_epochs, show_accuracy=True, verbose=2, validation_split=0.2, callbacks=[history])
score = model.evaluate(features_train, labels_train, show_accuracy=True, verbose=1)
predictions = model.predict(features_train)
print('Test score:', score[0])
print('Test accuracy:', score[1])
features_train 的形状是 (1000,784),labels_train 的形状是 (1000,1),两者都是 numpy 数组。我想要 784 个输入节点,200 个隐藏节点和 9 个输出节点来对数字进行分类
我不断收到输入维度不匹配错误:
Input dimension mis-match. (input[0].shape[1] = 9, input[1].shape[1] = 1)
Apply node that caused the error: Elemwise{Sub}[(0, 0)](AdvancedSubtensor1.0, AdvancedSubtensor1.0)
Inputs types: [TensorType(float32, matrix), TensorType(float32, matrix)]
Inputs shapes: [(30L, 9L), (30L, 1L)]
Inputs strides: [(36L, 4L), (4L, 4L)]
Inputs values: ['not shown', 'not shown']
我正在尝试确定我的尺寸在哪里可能不正确,但我没有看到。谁能看出问题所在?
我已经训练了 2 class class化模型太久了,以至于我习惯于处理只有单个值的标签。对于这个问题(class验证超过 1 个结果)我只需要将标签更改为向量本身。
这解决了我的问题:
from keras.utils.np_utils import to_categorical
labels_train = to_categorical(labels_train)