从RNN的输出结果到loss的计算

来源:互联网 发布:手机网络无法登陆钉钉 编辑:程序博客网 时间:2024/05/24 04:29

首先在得到embeddingout的结构后,声明一个RNN单元,大小为10

cell = tf.nn.rnn_cell.BasticRNNCell(num_utis = 10)

计算output和state

output,state = tf.nn.dynamic_rnn(cell,embedding_output,dtype = tf.float32)

然后可以添加droupout

output = tf.nn.droupout(output,0.01)


如果你的需要lstm最后一个节点的结果,也就是最后一个time跑完的结果,那么

你需要转置,然后每一个的最后输出拼成矩阵,然后拿出来

output = tf.transpose(output,[1,0,2])

last = tf.gather(output,int(output.get_shape()[0]-1)


为了完成预测,需要在此之上连接一个全连接层,来将rnn_size的数据输出为你的类别大小

weight = tf.Variable(tf.truncated_normal(tf.truncated_normal(rnn_size,2),stddev=0.1))

bias = tf.Variable(tf.constant(0.1,shape=[2]))

logits_out = tf.nn.Softmax(tf.matmul(last,weight)+bias)


此时输出的维度和你的目标维度相同,就可以计算loss了

losses = tf.nn.sparse_softmax_cross_entropy_with_logits(logits_out,y_output)

loss = reduce_mean(losses)

接下来就是创建优化器,最后就是迭代了。

原创粉丝点击