Python:keras 形状不匹配错误

Posted

技术标签:

【中文标题】Python:keras 形状不匹配错误【英文标题】:Python: keras shape mismatch error 【发布时间】:2015-11-06 23:02:54 【问题描述】:

我正在尝试在keras 中构建一个非常简单的多层感知器(MLP):

model = Sequential()
model.add(Dense(16, 8, init='uniform', activation='tanh'))
model.add(Dropout(0.5))
model.add(Dense(8, 2, init='uniform', activation='tanh'))

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

model.fit(X_train, y_train, nb_epoch=1000, batch_size=50)
score = model.evaluate(X_test, y_test, batch_size=50)

我的训练数据形状:X_train.shape 给出(34180, 16)

标签属于具有形状的二进制类:y_train.shape 给出(34180,)

所以我的keras 代码应该产生具有以下连接的网络:16x8 => 8x2

产生形状不匹配错误:

ValueError: Input dimension mis-match. (input[0].shape[1] = 2, input[1].shape[1] = 1)

Apply node that caused the error: Elemwisesub,no_inplace(ElemwiseCompositetanh((i0 + i1))[(0, 0)].0, <TensorType(float64, matrix)>)
Inputs types: [TensorType(float64, matrix), TensorType(float64, matrix)]
Inputs shapes: [(50, 2), (50, 1)]
Inputs strides: [(16, 8), (8, 8)]

Epoch 0model.fit(X_train, y_train, nb_epoch=1000, batch_size=50) 行。我在监督 Keras 中的一些明显的事情吗?

编辑:我已经解决了here 的问题,但没有解决我的问题

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,然后找到了这个帖子;

https://github.com/fchollet/keras/issues/68

您似乎可以声明最终输出层为 2 或对于任意数量的类别,标签需要属于分类类型,其中本质上这是每个观察的二进制向量,例如 3 类输出向量 [0,2 ,1,0,1,0] 变为 [[1,0,0],[0,0,1],[0,1,0],[1,0,0],[0,1,0] ,[1,0,0]]。

np_utils.to_categorical 函数为我解决了这个问题;

from keras.utils import np_utils, generic_utils

y_train, y_test = [np_utils.to_categorical(x) for x in (y_train, y_test)]

【讨论】:

另一个可以帮助您“取消映射”单热向量的选项是使用sklearn.preprocessing.LabelBinarizer。 scikit-learn.org/stable/modules/generated/…

以上是关于Python:keras 形状不匹配错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥我得到 Keras 形状不匹配?

形状不匹配:无法将对象广播到单个形状如何解决python中的此类错误?

Keras 功能 api 输入形状错误,lstm 层收到 2d 而不是 3d 形状

Keras:密集层和激活层之间的形状不匹配

keras 形状而 UpSampling 不匹配

ValueError:尝试计算 ROC 曲线时输入形状错误 (2, 256, 3)