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回答
-
"这段有些疑惑,首先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,就能明白了。
012019-07-11
相似问题