Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.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

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单元格由相同的函数创建,它们是否共享权重?_Python_Tensorflow_Lstm - Fatal编程技术网

Python 如果LSTM单元格由相同的函数创建,它们是否共享权重?

Python 如果LSTM单元格由相同的函数创建,它们是否共享权重?,python,tensorflow,lstm,Python,Tensorflow,Lstm,我正在使用下面的代码创建一个堆叠的LSTM模型。我有两个问题。首先,在下面的代码中,两个单元格的权重是否相同?第二,一般来说,当人们谈论堆叠的LSTM时,所有的单元格通常都有权重吗 def lstm_cell(size, output_keep_prob): cell = tf.nn.rnn_cell.LSTMCell(size) return tf.nn.rnn_cell.DropoutWrapper(cell, output_keep_prob=output_keep_pro

我正在使用下面的代码创建一个堆叠的LSTM模型。我有两个问题。首先,在下面的代码中,两个单元格的权重是否相同?第二,一般来说,当人们谈论堆叠的LSTM时,所有的单元格通常都有权重吗

def lstm_cell(size, output_keep_prob):
    cell = tf.nn.rnn_cell.LSTMCell(size)
    return tf.nn.rnn_cell.DropoutWrapper(cell, output_keep_prob=output_keep_prob)

with tf.variable_scope("tech_lstm"):
    tech_lstm_okp = tf.placeholder(tf.float64)
    tech_lstm_cells = [lstm_cell(100, tech_lstm_okp) for _ in range(2)]
    stkd_tech_lstm_cell = tf.contrib.rnn.MultiRNNCell(tech_lstm_cells)
    stkd_tech_lstm_init = stkd_tech_lstm_cell.zero_state(batch_size, tf.float64)
    stkd_tech_lstm_outputs, _ = tf.nn.dynamic_rnn(
                                              stkd_tech_lstm_cell,
                                              tech_data_windows,
                                              initial_state=stkd_tech_lstm_init)

我想你误解了共享权重。每个不同的单元都有自己的内核和偏差值。共享权重的观点来源于将RNN看作是一个跨时间展开的前馈网络。如果权重在每个时刻都不同,这将只是一个前馈网络。共享权重意味着一个单元对所有给定序列应用相同的内核和偏差。因此,单元格不共享权重,但如果您想问“是”,这些单元格是否按顺序运行?第一个lstmcell给出一个输出,第二个lstmcell处理第一个lstm单元格输出

单元格仅在使用
tf.get_variable
时共享权重。一般来说,让堆叠的单元格共享权重是没有意义的,因此TensorFlow(特别是
tf.nn.rnn\u cell.MultiRNNCell
)将为您调用的每个
tf.nn.rnn\u cell.LSTMCell
创建不同的
tf.variable\u作用域。因此,如果我正确理解你的问题,答案是
(1) 对,;(2) 没有

要查看更多详细信息,请尝试以下代码:

import tensorflow as tf

cells = [tf.nn.rnn_cell.LSTMCell(100) for _ in range(2)]
multi_rnn_cells = tf.nn.rnn_cell.MultiRNNCell(cells)

batch_size, max_time, dim = 1, 10, 2
rnn_inputs = tf.zeros(shape=(batch_size, max_time, dim))
dynamic_rnn = tf.nn.dynamic_rnn(multi_rnn_cells, rnn_inputs, dtype=tf.float32)

for variable in tf.trainable_variables(): print(variable)
您将在2个不同的
tf.variable\u sope
中看到4个变量(每个单元格1个内核和1个偏差)


运行时,堆叠的LSTM在每个时间步中共享权重,即堆叠的RNN在时间上共享权重,但在空间上不共享。

非常感谢William-非常好的解释。不幸的是,我投了更高的票,但没有足够的代表性公开展示。谢谢很高兴我能帮上忙