2017-04-07 2 views
0

Ich versuche einen Rezeptgenerator bei kaggle mit Tensorflow und lstm zu erstellen. Aber ich stehe total in etwas, das mit Dimensionen zusammenhängt. Kann mir jemand in die richtige Richtung zeigen?logits und labels müssen die gleiche erste Dimension haben

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

Thanks so much!

+0

Könnten Sie bitte in Betracht ziehen, die relevanten Teile Ihres Codes direkt in der Post zu veröffentlichen (Links werden im Laufe der Zeit gebrochen/aktualisiert, was für zukünftige Leser nicht nützlich ist) und fügen Sie hinzu, was Sie versucht haben, das Problem zu lösen? – kaufmanu

Antwort

1

Ich denke, das Problem ist, dass

training_batches[0][1] 

eine Liste ist und kein numpy.array, sollten Sie create_datasets entsprechend ändern ...

1

Hier ist ein Auszug aus der Umsetzung von seq2seq.sequence_loss(logits, targets, weights), die Sie Verwendung im Code:

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) 

ich glaube, der Fehler, den Sie sehen in diesem Code aus der letzten Zeile ergeben. Die Fehlermeldung ist selbsterklärend:

InvalidArgumentError: logits and labels must have the same first dimension, got logits shape [8,6714] and labels shape [2]

I.e. die Größe der ersten Dimension von logits_flat und targets muss gleich sein. Dies führt direkt zu Ihrer Eingabe in seq2seq.sequence_loss: Die ersten beiden Dimensionen Ihrer targets und logits Variable müssen gleich sein. Also, entweder verwenden Sie nicht die gleiche Anzahl von Stapeln für die zwei Variablen oder irgendwie Ihre Sequenzlänge geändert (was aber seltsam wäre).

Verwandte Themen