【发布时间】:2018-07-02 14:31:12
【问题描述】:
我对 Keras 和深度学习有点陌生。我目前正在尝试复制这个paper,但是当我编译第二个模型(使用 LSTM)时,我收到以下错误:
"TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'"
模型的描述是这样的:
- 输入(长度
T是特定于设备的窗口大小) - 带有滤波器
size3、5和7的并行一维卷积 分别为stride=1、number of filters=32、activation type=linear,border mode=same - 连接输出的合并层 并行一维卷积
- 双向 LSTM 由前向 LSTM 组成
和一个后向 LSTM,
output_dim=128 - 双向 LSTM 由前向 LSTM 组成
和一个后向 LSTM,
output_dim=128 - 密集层,
output_dim=128,activation type=ReLU - 密集层,
output_dim= T,activation type=linear
我的代码是这样的:
from keras import layers, Input
from keras.models import Model
def lstm_net(T):
input_layer = Input(shape=(T,1))
branch_a = layers.Conv1D(32, 3, activation='linear', padding='same', strides=1)(input_layer)
branch_b = layers.Conv1D(32, 5, activation='linear', padding='same', strides=1)(input_layer)
branch_c = layers.Conv1D(32, 7, activation='linear', padding='same', strides=1)(input_layer)
merge_layer = layers.Concatenate(axis=-1)([branch_a, branch_b, branch_c])
print(merge_layer.shape)
BLSTM1 = layers.Bidirectional(layers.LSTM(128, input_shape=(8,40,96)))(merge_layer)
print(BLSTM1.shape)
BLSTM2 = layers.Bidirectional(layers.LSTM(128))(BLSTM1)
dense_layer = layers.Dense(128, activation='relu')(BLSTM2)
output_dense = layers.Dense(1, activation='linear')(dense_layer)
model = Model(input_layer, output_dense)
model.name = "lstm_net"
return model
model = lstm_net(40)
之后我收到上述错误。我的目标是提供一批长度为 40 的 8 个序列作为输入,并获得一批长度为 40 的 8 个序列作为输出。我在 Keras Github LSTM layer cannot connect to Dense layer after Flatten #818 上发现了这个问题,@fchollet 建议我应该在第一层指定“input_shape”,但可能不正确。我把两个打印语句放上来看看形状是如何变化的,输出是:
(?, 40, 96)
(?, 256)
错误发生在BLSTM2定义的那一行,完整可见here
【问题讨论】:
-
请在代码的哪一行发布此错误。
-
在我帖子的最后一行 :)
标签: python-3.x keras lstm recurrent-neural-network keras-layer