【发布时间】:2017-12-31 07:11:01
【问题描述】:
我正在尝试使用 LSTM 单元和 Tensorflow 创建文本生成神经网络。我正在以时间主要格式 [time_steps, batch_size, input_size] 对网络进行句子训练,并且我希望每个时间步都能预测序列中的下一个单词。该序列用空值填充直到时间步长,并且一个单独的占位符包含批处理中每个序列的长度。
有很多关于时间反向传播概念的信息,但是我找不到关于 tensorflow 中可变长度序列成本计算的实际实现的任何信息。由于序列的末尾被填充,我假设我不想计算填充部分的成本。所以我需要一种方法来将输出从第一个输出剪辑到序列的末尾。
这是我目前拥有的代码:
outputs = []
states = []
cost = 0
for i in range(time_steps+1):
output, state = cell(X[i], state)
z1 = tf.matmul(output, dec_W1) + dec_b1
a1 = tf.nn.sigmoid(z1)
z2 = tf.matmul(a1, dec_W2) + dec_b2
a2 = tf.nn.softmax(z2)
outputs.append(a2)
states.append(state)
#== calculate cost
cost = cost + tf.nn.softmax_cross_entropy_with_logits(logits=z2, labels=y[i])
optimizer = tf.train.AdamOptimizer(0.001).minimize(cost)
此代码在没有可变长度序列的情况下工作。但是,如果我在末尾添加了填充值,那么它也会计算填充部分的成本,这没有多大意义。
如何只计算序列长度上限之前的输出成本?
【问题讨论】:
标签: python tensorflow machine-learning neural-network recurrent-neural-network