python - LSTM InvalidArgumentError Tensorflow 2.0/Keras 转换为估计器时出现

标签 python tensorflow lstm tensorflow-estimator

我正在尝试构建一个 LSTM 网络,该网络接收单词序列并将其转换为嵌入向量。我已经将每个单词序列转换为词汇向量。

我使用的批量大小为 32,每个词汇向量的大小为 50。这是我迄今为止用于创建模型并将其转换为估计器的 Keras 功能 API 代码

input_layer = keras.layers.Input(shape=(50,), name='search')
embedding_layer = keras.layers.Embedding(input_dim=32, output_dim=256, input_length=50)(input_layer)
lstm_layer = keras.layers.LSTM(units=256)(embedding_layer)
model = keras.models.Model(inputs=input_layer, outputs=lstm_layer)
model.compile(loss='mean_squared_error', optimizer='adam')
estimator = keras.estimator.model_to_estimator(keras_model=model)

但是这段代码给出了错误

tensorflow.python.framework.errors_impl.InvalidArgumentError: Node 'Adam/gradients/lstm/StatefulPartitionedCall_grad/StatefulPartitionedCall': Connecting to invalid output 5 of source node lstm/StatefulPartitionedCall which has 5 outputs

当我运行model.summary()时,这是输出

Layer (type)                 Output Shape              Param #   
=================================================================
search (InputLayer)          [(None, 50)]              0         
_________________________________________________________________
embedding (Embedding)        (None, 50, 256)           8192      
_________________________________________________________________
lstm (LSTM)                  (None, 256)               525312    
=================================================================
Total params: 533,504
Trainable params: 533,504
Non-trainable params: 0
_________________________________________________________________

我认为这是我所期望的。我尝试用相同形状的 Dense 和 Flatten 层替换 LSTM 层,代码运行良好

最佳答案

我自己来回答这个问题...截至 7/24 似乎 tf.keras.layers.LSTM 存在问题,如 here 所示。 。我将模型更改为以下内容

input_layer = keras.layers.Input(shape=(50,), name='search')
embedding_layer = keras.layers.Embedding(input_dim=32, output_dim=256, 
input_length=50)(input_layer)
lstm_layer = keras.layers.RNN(cell=keras.layers.LSTMCell(units=256))(embedding_layer)
model = keras.models.Model(inputs=input_layer, outputs=lstm_layer)
model.compile(loss='mean_squared_error', optimizer='adam')
estimator = keras.estimator.model_to_estimator(keras_model=model)

关于python - LSTM InvalidArgumentError Tensorflow 2.0/Keras 转换为估计器时出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57172352/

相关文章:

tensorflow - 如何在 tensorflow 中将输入图像与掩码相乘?

python-3.x - TensorFlow 训练模型预测始终为零

python - 如何从 tensorflow 中的 RNN 模型中提取细胞状态和隐藏状态?

python - 使用 py.test 和 coverage.py 覆盖 Cython 模块

python - divmod() 是否比使用 % 和//运算符更快?

Python:对 True/False 向量的运算

python-3.x - LSTM 的预期隐藏状态维度没有考虑批量大小

python - 覆盖 python 日志记录以提高测试效率

tensorflow - 何时停止训练对象检测 tensorflow

keras - Keras 中的 GRU/LSTM 具有不同长度的输入序列