gpt4 book ai didi

python - Tensorflow 中的可变范围问题

转载 作者:行者123 更新时间:2023-11-28 20:38:08 24 4
gpt4 key购买 nike

def biLSTM(data, n_steps):


n_hidden= 24
data = tf.transpose(data, [1, 0, 2])
# Reshape to (n_steps*batch_size, n_input)
data = tf.reshape(data, [-1, 300])
# Split to get a list of 'n_steps' tensors of shape (batch_size, n_input)
data = tf.split(0, n_steps, data)

lstm_fw_cell = tf.nn.rnn_cell.BasicLSTMCell(n_hidden, forget_bias=1.0)
# Backward direction cell
lstm_bw_cell = tf.nn.rnn_cell.BasicLSTMCell(n_hidden, forget_bias=1.0)

outputs, _, _ = tf.nn.bidirectional_rnn(lstm_fw_cell, lstm_bw_cell, data, dtype=tf.float32)


return outputs, n_hidden

在我的代码中,我两次调用此函数以创建 2 个双向 LSTM。然后我遇到了重用变量的问题。

ValueError: Variable lstm/BiRNN_FW/BasicLSTMCell/Linear/Matrix already exists, disallowed. Did you mean to set reuse=True in VarScope?

为了解决这个问题,我在 with tf.variable_scope('lstm', reuse=True) as scope:

函数中添加了 LSTM 定义:

这导致了一个新问题

ValueError: Variable lstm/BiRNN_FW/BasicLSTMCell/Linear/Matrix does not exist, disallowed. Did you mean to set reuse=None in VarScope?

请帮忙解决这个问题。

最佳答案

当您创建 BasicLSTMCell() 时,它会创建所有必需的权重和偏差以在引擎盖下实现 LSTM 单元。所有这些变量都会自动分配名称。如果您在同一范围内多次调用该函数,则会出现错误。由于您的问题似乎表明您想创建两个单独的 LSTM 单元,因此您不想重用这些变量,但您确实想在单独的范围内创建它们。您可以通过两种不同的方式执行此操作(我实际上并没有尝试运行此代码,但它应该可以工作)。您可以从一个独特的范围内调用您的函数

def biLSTM(data, n_steps):    ... blah ...with tf.variable_scope('LSTM1'):    outputs, hidden = biLSTM(data, steps)with tf.variable_scope('LSTM2'):    outputs, hidden = biLSTM(data, steps)

或者您可以将唯一的作用域名称传递给函数并在内部使用该作用域

def biLSTM(data, n_steps, layer_name):    ... blah...    with tf.variable_scope(layer_name) as scope:        lstm_fw_cell = tf.nn.rnn_cell.BasicLSTMCell(n_hidden, forget_bias=1.0)        lstm_bw_cell = tf.nn.rnn_cell.BasicLSTMCell(n_hidden, forget_bias=1.0)        outputs, _, _ = tf.nn.bidirectional_rnn(lstm_fw_cell, lstm_bw_cell, data, dtype=tf.float32)    return outputs, n_hiddenl1 = biLSTM(data, steps, 'layer1')l2 = biLSTM(data, steps, 'layer2')

选择哪种方法取决于您的编码敏感性,它们在功能上几乎相同。

关于python - Tensorflow 中的可变范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41577384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com