我需要帮忙翻译一下关于编程的内容。有一个seq2seq模型在某些情况下可以正常工作,但在某些情况下,它只返回结束标记作为结果。
例如:
For given vector :
[2, #start token
3,
123,
1548, #end token
1548,
1548,
1548,
1548,
1548,
1548]
The model predict :
[1548,
1548,
1548,
1548,
1548,
1548,
1548,
1548,
1548,
1548]
我尝试使用Keras的SaveModel回调函数监控"loss",但结果仍然相同。因此,我认为也许应该使用自己的损失函数。Keras提供了简单的损失函数:
def mean_absolute_error(y_true, y_pred):
return K.mean(K.abs(y_pred - y_true), axis=-1)
both y_true and y_pred是tensorflow对象(我们只得到指向实际数组的指针),因此...为了创建一些逻辑,我们需要从GPU获取数组或上传自己的数组到GPU。
我想要的损失函数
def mean_absolute_error(y_true, y_pred):
sum = 0
for y , _y in zip(y_true , y_pred):
if (y == _y) and (y == self.startToken or y == self.endToken):
continue
else:
sum += abs(y - _y)
return sum
我试过使用y_true.eval(),它应该将数组作为numpy对象传输到cpu上(Cannot evaluate tensor using
eval()
: No default session is registered)。我没有找到如何将自己的数组上传到TensorFlow。
如果你有解决方案或任何建议,我会非常乐意听取。
谢谢..
(不是很重要,但是...)
基于模型:https://blog.keras.io/a-ten-minute-introduction-to-sequence-to-sequence-learning-in-keras.html,但输出为one-hot(二维[矩阵])。
decode_sequence
函数中:# Exit condition: either hit max length or find stop character.
他们还用开始字符预填了模型的输出数组:# Populate the first character of target sequence with the start character.
我想知道您是否使用类似于他们的decode_sequence
函数? - vasilyrud