Python keras神经网络(Theano)包返回关于数据维度的错误

Python keras神经网络(Theano)包返回关于数据维度的错误,python,numpy,canopy,theano,keras,Python,Numpy,Canopy,Theano,Keras,我有以下代码: import numpy as np from keras.models import Sequential from keras.layers.core import Dense, Dropout, Activation from keras.optimizers import SGD from sklearn import datasets import theano iris = datasets.load_iris() X = iris.data[:,0:3] # w

我有以下代码:

import numpy as np
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation
from keras.optimizers import SGD
from sklearn import datasets
import theano

iris = datasets.load_iris()
X = iris.data[:,0:3]  # we only take the first two features.
Y = iris.target

X = X.astype(theano.config.floatX)
Y = Y.astype(theano.config.floatX)


model = Sequential()
model.add(Dense(150, 1, init='uniform'))
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Dense(150, 1, init='uniform'))
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Dense(150, 1, init='uniform'))
model.add(Activation('softmax'))

sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='mean_squared_error', optimizer=sgd)

model.fit(X, Y, nb_epoch=20, batch_size=150)


score = model.evaluate(X_train, y_train, batch_size=16)
返回此错误:

ValueError: Shape mismatch: x has 3 cols (and 150 rows) but y has 150 rows (and 1 cols)
Apply node that caused the error: Dot22(<TensorType(float64, matrix)>, <TensorType(float64, matrix)>)
Inputs types: [TensorType(float64, matrix), TensorType(float64, matrix)]
Inputs shapes: [(150L, 3L), (150L, 1L)]
Inputs strides: [(24L, 8L), (8L, 8L)]
Inputs values: ['not shown', 'not shown']
ValueError:形状不匹配:x有3列(和150行),但y有150行(和1列)
导致错误的应用节点:Dot22(,)
输入类型:[TensorType(浮点64,矩阵),TensorType(浮点64,矩阵)]
输入形状:[(150L,3L),(150L,1L)]
输入跨步:[(24L,8L),(8L,8L)]
输入值:[“未显示”、“未显示”]

问题是什么?

您为内部层指定了错误的输出尺寸。例如,参见Keras文档中的此示例:

model = Sequential()
model.add(Dense(20, 64, init='uniform'))
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Dense(64, 64, init='uniform'))
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Dense(64, 2, init='uniform'))
model.add(Activation('softmax'))
请注意一层的输出大小如何与下一层的输入大小匹配:

20x64 -> 64x64 -> 64x2
第一个数字总是输入大小(上一层的神经元数量),第二个数字是输出大小(下一层的神经元数量)。因此,在本例中,您有四个层:

  • 有20个神经元的输入层
  • 有64个神经元的隐藏层
  • 有64个神经元的隐藏层
  • 具有2个神经元的输出层
唯一的硬限制是,第一(输入)层需要有与功能相同数量的神经元,最后(输出)层需要有与任务相同数量的神经元


对于您的示例,由于您有三个功能,您需要将输入层大小更改为3,并且您可以保留此示例中的两个输出神经元以进行二元分类(或者使用一个,就像您所做的那样,具有逻辑损失)。

在程序的哪一行出现错误?
-->29 model.fit(X,Y,nb_epoch=20,batch_size=150)
谢谢您的回答。我的输入有150个样本(行)和3个特征(列)。输出有一列(+150个样本)。上述数据的正确格式是什么?我应该在哪里设置每层神经元的数量?+什么是批大小?@user2991243:我已经扩展了答案。一个简单的问题。该软件包没有像我们在
MATLAB
中那样分配训练、测试和验证?所有数据将用于培训?有神经网络的训练、测试和验证数据集吗?@user2991243:这与最初的问题无关。当然,你可以也应该使用统计/机器学习的所有标准方法,比如坚持和交叉验证。