sentence内容问题

来源:8-19 计算图构建-rnn结构实现、损失函数与训练算子实现

慕桂英雄

2019-06-13

图片描述
这段有些疑惑,首先sentence本身不就是一维的吗?[1* hps.num_embedding_nodes]…
还有sentence_flatten的具体内容是什么?
softmax_loss的shape是1*Vocab_size的吗?为什么可以和mask_flatten 做乘法?
prediction里只有1个位置上的输出是1?sentence_flatten里是在对应的单词id处是1?

写回答

1回答

正十七

2019-07-10

"这段有些疑惑,首先sentence本身不就是一维的吗?[1* hps.num_embedding_nodes]"

语料中虽然sentence是句子,但是在模型输入中sentence是[batch_size, num_timesteps],在转成embedding后是[batch_size, num_timesteps, embedding_nodes]. 在这里,做flatten的原因是因为我们在fc的那一层把lstm的输出给展平了

fc_init = tf.uniform_unit_scaling_initializer(factor=1.0)    
with tf.variable_scope('fc', initializer=fc_init):
        rnn_outputs_2d = tf.reshape(rnn_outputs, [-1, hps.num_lstm_nodes[-1]])
        fc1 = tf.layers.dense(rnn_outputs_2d, hps.num_fc_nodes, name='fc1')
        fc1_dropout = tf.contrib.layers.dropout(fc1, keep_prob)
        fc1_dropout = tf.nn.relu(fc1_dropout)
        logits = tf.layers.dense(fc1_dropout, vocab_size, name='logits')


softmax的输出是长度为batch_size * num_timesteps的向量,这样和mask_flatten对应的上,所以可以做乘法。


prediction是用argmax求出来的,已经是对应预测值的索引的,也就是词语id。

sentence是[batch_size, num_timesteps]的矩阵,里面每个值都是词语id,转成flatten后仍然是word_id。你提到的对应位置的单词id处是1应该是针对logits这个变量,在logits这个变量中,最大值的位置索引即是word_id.

建议把code中的每个变量的值都sess.eval出来看一下shape,就能明白了。

0
1
慕桂英雄
非常感谢!
2019-07-11
共1条回复

深度学习之神经网络(CNN/RNN/GAN)算法原理+实战

深度学习算法工程师必学,深入理解深度学习核心算法CNN RNN GAN

2617 学习 · 935 问题

查看课程