logits和label必须具有相同的第一维

时间:2017-04-07 12:06:31

标签: tensorflow lstm kaggle

我正在尝试使用tensorflow和lstm在kaggle创建一个配方生成器。但我完全陷入了与角钱相关的问题。有人能指出我正确的方向吗?

https://www.kaggle.com/pablocastilla/d/kaggle/recipe-ingredients-dataset/ingredients-recomender-using-lstm-with-tensorflow/run/1066831

非常感谢!

2 个答案:

答案 0 :(得分:1)

我认为问题在于

training_batches[0][1] 

是一个列表而不是numpy.array,你应该相应地修改create_datasets ......

答案 1 :(得分:1)

以下是您在代码中使用的seq2seq.sequence_loss(logits, targets, weights)实施的摘录:

with ops.name_scope(name, "sequence_loss", [logits, targets, weights]):
    num_classes = array_ops.shape(logits)[2]
    logits_flat = array_ops.reshape(logits, [-1, num_classes])
    targets = array_ops.reshape(targets, [-1])
    if softmax_loss_function is None:
      crossent = nn_ops.sparse_softmax_cross_entropy_with_logits(
labels=targets, logits=logits_flat)

我相信您看到的错误源于该代码中的最后一行。错误消息不言自明:

  

InvalidArgumentError:logits和label必须首先相同   维度,得到logits形状[8,6714]和标签形状[2]

即。 logits_flattargets的第一维尺寸必须相同。这会直接转换为您对seq2seq.sequence_loss的输入:targetslogits变量的前两个维度必须相等。所以,要么你没有为这两个变量使用相同数量的批次,要么以某种方式改变你的序列长度(虽然这会很奇怪)。