2017-04-07 2 views
0

テンソルフローとlstmを使用してkaggleでレシピジェネレータを作成しようとしています。しかし、私は完全にdimesionsに関連する何かにこだわっています。誰かが私を正しい方向に向けることができますか?ロジットとラベルの最初の次元が同じでなければなりません

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

本当にありがとうございました!

+0

コードの関連する部分を直接ポストに投稿することを検討してください(将来の読者には役に立たないリンクが壊れたり更新されたりします)。 – kaufmanu

答えて

1

私はここでseq2seq.sequence_loss(logits, targets, weights)の実装からの抜粋は、あなたが、これだ

1

...問題は

training_batches[0][1] 

がリストではなくnumpy.arrayあり、それに応じcreate_datasetsを修正しなければならないことだと思いますあなたのコードで使用してください:

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]

Ie. logits_flattargetsの最初の次元のサイズは同じでなければなりません。これは直接seq2seq.sequence_lossへの入力に変換されます:targetslogits変数の最初の2つの次元は等しくなければなりません。したがって、2つの変数に同じ数のバッチを使用していないか、何らかの形でシーケンスの長さが変わっています(これは変です)。

関連する問題