2017-04-07 225 views
0

我正尝试使用tensorflow和lstm在kaggle中创建配方生成器。但是我完全陷入了与尺寸有关的事情。有人能指出我朝着正确的方向吗?逻辑和标签必须具有相同的第一维

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

非常感谢!

+0

您是否能直接在帖子发布您的代码的相关部分(链接破碎/更新随着时间的推移这是不是有用的未来的读者),并添加你想解决什么问题? – kaufmanu

回答

1

我认为这个问题是

training_batches[0][1] 

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

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 and labels must have the same first dimension, got logits shape [8,6714] and labels shape [2]

即第一维logits_flattargets的大小必须相同。这直接转换为您对seq2seq.sequence_loss的输入:您的targetslogits变量的前两个维度必须相等。因此,要么你没有对两个变量使用相同数量的批次,或者你的序列长度发生了变化(尽管这很奇怪)。

相关问题