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

时间:2017-07-14 18:34:51

标签: python tensorflow neural-network keras reshape

试图在Keras建立一个神经网络,但遇到了一个问题,即我的一个密集层和激活层之间存在形状不匹配。我错过了一些明显的东西吗使用Tensorflow后端。

print(x_train.shape)
print(y_train.shape)
(1509, 476, 4)
(1509,)

然后我的模型如下:

###Setup Keras to create a bidirectional convolutional recurrent NN based on DanQ NN
###See https://github.com/uci-cbcl/DanQ
model = Sequential()

model.add(Conv1D(filters=320,
                 kernel_size=26,
                 padding="valid",
                 activation="relu",
                 strides=1, 
                 input_shape=(476, 4)
                ))

model.add(MaxPooling1D(pool_size=13, strides=13))

model.add(Dropout(0.2))

model.add(keras.layers.wrappers.Bidirectional(LSTM(320, return_sequences=True, input_shape=(None, 320))))

model.add(Flatten())

model.add(Dense(input_dim=34*640, units=925))
model.add(Activation('relu'))

model.add(Dense(input_dim=925, units=919))
model.add(Activation('sigmoid'))

print('compiling model')
model.compile(loss='binary_crossentropy', optimizer='rmsprop', class_mode="binary")

print('running at most 60 epochs')

model.fit(x_train, y_train.T, batch_size=100, epochs=60, shuffle=True, verbose=2, validation_split=0.1)

tresults = model.evaluate(x_test, y_test, verbose=2)

print(tresults)

print(model.output_shape)

但是我收到以下错误:

ValueError: Error when checking target: expected activation_48 to have shape (None, 919) but got array with shape (1509, 1)

错误似乎源于使用S形激活对第二激活层的输入。 e.g:

model.add(Dense(input_dim=925, units=919))
model.add(Activation('sigmoid'))

为什么会出现不匹配?

2 个答案:

答案 0 :(得分:1)

如@ djk47463评论中所述,您的输出现在每个样本有919个值,因为这是网络最后一层中的单位数。要更正此问题,请将最后一个图层的单位设置为1,或者添加一个输出维度为1的新最终图层。

答案 1 :(得分:0)

在您的代码中,

model.add(Conv1D(filters=320,
             kernel_size=26,
             padding="valid",
             activation="relu",
             strides=1, 
             input_shape=(476, 4)
            ))

尝试在input_dim = 4的地方添加input_shape = (476,4)。 可能会有用。