我一直在努力学习如何在张量流中编码RNN和LSTM . 我在这篇博客文章中找到了一个在线示例
下面是我无法理解LSTM网络最终用于生成代码的片段
x = tf.placeholder(tf.int32, [batch_size, num_steps], name='input_placeholder')
y = tf.placeholder(tf.int32, [batch_size, num_steps], name='labels_placeholder')
embeddings = tf.get_variable('embedding_matrix', [num_classes, state_size])
rnn_inputs = [tf.squeeze(i) for i in tf.split(1,
num_steps, tf.nn.embedding_lookup(embeddings, x))]
代码的不同部分现在定义权重
with tf.variable_scope('softmax'):
W = tf.get_variable('W', [state_size, num_classes])
b = tf.get_variable('b', [num_classes], initializer=tf.constant_initializer(0.0))
logits = [tf.matmul(rnn_output, W) + b for rnn_output in rnn_outputs]
y_as_list = [tf.squeeze(i, squeeze_dims=[1]) for i in tf.split(1, num_steps, y)]
x是要馈送的数据,y是标签集 . 在lstm方程中,我们有一系列门,x(t)乘以一系列,prev_hidden_state乘以一组权重,加上偏差并应用非线性 .
以下是我的疑虑
在这种情况下,只定义了一个权重矩阵,这意味着它同样适用于x(t)和prev_hidden_state .
对于嵌入矩阵,我知道它必须乘以权重矩阵但为什么是第一个维度num_classes
对于rnn_inputs,我们使用squeeze删除1的维度,但为什么我要在一个热编码中执行此操作 .
同样从分裂中我理解我们将维度x(batch_size X num_steps)展开为离散(batch_size X 1)向量,然后通过网络传递这些值是正确的