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 求特定指数张量的最大值。(Bi LSTM最大实现)_Python_Tensorflow_Neural Network_Lstm_Rnn - Fatal编程技术网

Python 求特定指数张量的最大值。(Bi LSTM最大实现)

Python 求特定指数张量的最大值。(Bi LSTM最大实现),python,tensorflow,neural-network,lstm,rnn,Python,Tensorflow,Neural Network,Lstm,Rnn,我正在尝试实现BiLSTM Max,如以下文章所述: 我正在使用Tensorflow进行实现。我从一个原始的LSTM代码开始,但已经成功地进行了修改,使它可以使用动态长度输入和双向(即动态Bi LSTM)运行 接下来将其修改为Bi LSTM Max,我替换了使用最后一个输出,并按如下所示在n_步骤中查找最大值: # Bi-LSTM, returns output of shape [n_step, batch_size, n_input] outputs = tf.contrib.rnn.st

我正在尝试实现BiLSTM Max,如以下文章所述:

我正在使用Tensorflow进行实现。我从一个原始的LSTM代码开始,但已经成功地进行了修改,使它可以使用动态长度输入和双向(即动态Bi LSTM)运行

接下来将其修改为Bi LSTM Max,我替换了使用最后一个输出,并按如下所示在n_步骤中查找最大值:

# Bi-LSTM, returns output of shape [n_step, batch_size, n_input]
outputs = tf.contrib.rnn.static_bidirectional_rnn(lstm_fw_cell, lstm_bw_cell, x,dtype=tf.float32)
# Change output back to [batch_size, n_step, n_input]
outputs = tf.transpose(tf.stack(outputs), [1, 0, 2])
# Retrieve the max output across n_steps
outputs = tf.reduce_max(outputs, reduction_indices=[1])
当我在n_步数维度上取最大值时,我假设那些索引>seqlen是0,因此我可以在整个维度上取最大值,而不是从0到seqlen取最大值。仔细检查后,我意识到,由于随机初始化,未分配索引的值可能不是零,也可能只是内存中最后分配的值


这个操作在python数组中很简单,但是,对于张量操作,我找不到一个简单的方法。有人对此有想法吗

最简单的方法可能是手动将无效输出设置为零或零-∞ 在找到最大值之前。您可以非常轻松地使用和:


可能最简单的方法是手动将无效输出设置为零或零-∞ 在找到最大值之前。您可以非常轻松地使用和:


好主意!它现在似乎起作用了。但是我不得不添加一些小的修改来将它从2D扩展到3D<代码>序列掩码=tf.tile(序列掩码,[1,n\u输入])序列掩码=tf.reformate(序列掩码,[-1,n\u输入,序列最大长度])序列掩码=tf.transpose(序列掩码,[0,2,1])非常感谢!好主意!它现在似乎起作用了。但是我不得不添加一些小的修改来将它从2D扩展到3D<代码>序列掩码=tf.tile(序列掩码,[1,n\u输入])序列掩码=tf.reformate(序列掩码,[-1,n\u输入,序列最大长度])序列掩码=tf.transpose(序列掩码,[0,2,1])非常感谢!
# Bi-LSTM, returns output of shape [n_step, batch_size, n_input]
outputs = tf.contrib.rnn.static_bidirectional_rnn(lstm_fw_cell, lstm_bw_cell, x,dtype=tf.float32)
# Change output back to [batch_size, n_step, n_input]
outputs = tf.transpose(tf.stack(outputs), [1, 0, 2])
# Retrieve the max output across n_steps
outputs = tf.reduce_max(outputs, reduction_indices=[1])
seq_mask = tf.sequence_mask(seqlen, seq_max_len)
# You can also use e.g. -np.inf * tf.ones_like(outputs)
outputs_masked = tf.where(seq_mask, outputs, tf.zeros_like(outputs))
outputs = tf.reduce_max(outputs, axis=1)  # axis is preferred to reduction_indices