【发布时间】:2023-12-15 06:56:01
【问题描述】:
我正在尝试将由双向LSTM 层组成的编码器中的初始状态设置为 0。但是,如果我输入一个 0 的矩阵,我会收到一条错误消息,指出必须使用张量列表初始化双向层(这是有道理的)。当我尝试将这个 0 的矩阵复制到包含其中两个的列表中时(初始化两个 RNNs),我收到输入形状错误的错误。我在这里错过了什么?
class Encoder(tf.keras.Model):
def __init__(self, vocab_size, embedding_dim, enc_units, batch_sz):
super(Encoder, self).__init__()
self.batch_sz = batch_sz
self.enc_units = enc_units
self.embedding = keras.layers.Embedding(vocab_size, embedding_dim)
self.lstmb = keras.layers.Bidirectional(lstm(self.enc_units, dropout=0.1))
def call(self, x, hidden):
x = self.embedding(x)
output, forward_h, forward_c, backward_h, backward_c = self.lstmb(x, initial_state=[hidden, hidden])
return output, forward_h, forward_c, backward_h, backward_c
def initialize_hidden_state(batch_sz, enc_units):
return tf.zeros((batch_sz, enc_units))
我得到的错误是:
ValueError: An `initial_state` was passed that is not compatible with `cell.state_size`. Received `state_spec`=[InputSpec(shape=(128, 512), ndim=2)]; however `cell.state_size` is [512, 512]
注意:函数initialize_hidden_state 的输出被馈送到调用函数的参数hidden。
【问题讨论】:
标签: python tensorflow machine-learning keras lstm