我有一个可变长度的多对一RNN的实现(一个句子分类问题)
由于我有500课,并且想加快培训速度,所以我试图对softmax损失进行采样。
以下是我的输入参数形状
WLast.shape
TensorShape([Dimension(500), Dimension(500)])
bLast.shape
TensorShape([Dimension(500)])
labels.shape
TensorShape([Dimension(None), Dimension(500)])
pred_out.shape
TensorShape([Dimension(None), Dimension(500)])
Pred_out是RNN的最后一个预测
问题是我运行时:
cost = tf.nn.sampled_softmax_loss(WLast,bLast,labels,pred_out,10,500)
它给了我这个错误:
InvalidArgumentError: Dimension must be 1 but is 500 for 'sampled_softmax_loss/ComputeAccidentalHits' (op: 'ComputeAccidentalHits') with input shapes: [?,500], [10].
我不明白,形状与函数的参数匹配,有人知道我在做什么错吗?
谢谢!
答案 0 :(得分:0)
我发现此实现:https://github.com/olirice/sampled_softmax_loss 并通过重塑标签解决了问题
labels = tf.reshape(tf.argmax(labels, 1), [-1,1])