神经网络维度不匹配

我在Keras中为MNIST数字数据集设置了一个神经网络,结构如下:

input_size = features_train.shape[1]hidden_size = 200output_size = 9lambda_reg = 0.2learning_rate = 0.01num_epochs = 50batch_size = 30model = 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']

我在试图找出维度可能出错的地方,但没有发现问题。有人能看出问题所在吗?


回答:

我训练两类分类模型已经很久了,我习惯于处理只有单一值的标签。对于这个问题(分类多于一个结果),我只需要将标签改为向量本身即可。

这解决了我的问题:

from keras.utils.np_utils import to_categoricallabels_train = to_categorical(labels_train)

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注