Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用双向而非标准LSTM层时,塑造Erorr_Python_Tensorflow_Keras - Fatal编程技术网

Python 使用双向而非标准LSTM层时,塑造Erorr

Python 使用双向而非标准LSTM层时,塑造Erorr,python,tensorflow,keras,Python,Tensorflow,Keras,当切换到双向层时,我的代码给出了一个错误。使用标准LSTM图层时,该模型有效。我得到的错误是: File "<ipython-input-22-1e9000cb0bf6>", line 12, in <module> model.build(input_shape) ValueError: Input 0 is incompatible with layer bidirectional_11: expected ndim=3, found ndim=2 为什么在使用双向

当切换到双向层时,我的代码给出了一个错误。使用标准LSTM图层时,该模型有效。我得到的错误是:

File "<ipython-input-22-1e9000cb0bf6>", line 12, in <module>
model.build(input_shape)
ValueError: Input 0 is incompatible with layer bidirectional_11: expected ndim=3, found ndim=2
为什么在使用双向而不是标准LSTM时它会返回形状错误?

我无法测试您的代码(因为我正在移动),但是如果您在
CuDNN
外部定义
输入形状,但在
双向
内部定义,那么它应该可以工作。像这样的

双向(CuDNNLSTM(128,返回序列=True),输入形状=input形状)

事情是双向的,它的行为是liek LSTM,所以它需要像前面提到的LSTM这样的参数。对于双向示例,您可以遵循

input_shape = (lengtharray,1)
model = Sequential()
model.add(Bidirectional(CuDNNLSTM(128, input_shape=input_shape, return_sequences=True)))
model.add(Dropout(0.5))
model.add(Dense(64))
model.add(Bidirectional(CuDNNLSTM(128)))
model.add(Dropout(0.5))
model.add(Dense(64))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))
model.build(input_shape)

opt = keras.optimizers.Adam(lr=0.01, decay=0.0001)
model.compile(loss='binary_crossentropy',
              optimizer=opt,
              metrics=['accuracy'])
callbacks = [EarlyStopping(monitor='val_loss'),
             ModelCheckpoint(filepath='best_model.h5', monitor='val_loss', save_best_only=True)]
model.summary()