Neuronales Tensorflow-Netzwerk TypeError: Das Fetch-Argument hat einen ungültigen Typ

11

Ich erstelle ein einfaches neuronales Netzwerk mit Tensorflow. Die Daten, die ich selbst gesammelt habe, funktionieren jedoch nicht zusammen. PI ist auf einen Fehler gestoßen, den ich nicht beheben oder beheben kann, und ich würde mich über Ihre Hilfe freuen.

Die Fehlermeldung:

TypeError: Das Abrufargument 2861.6152 von 2861.6152 hat einen ungültigen Typ und muss eine Zeichenfolge oder ein Tensor sein. (Kann einen float32 nicht in einen Tensor oder eine Operation umwandeln.)

Der Fehler bezieht sich auf die folgende Zeile in meinem Code:

_, cost = tf_session.run([optimizer, cost], feed_dict = {champion_data: batch_input, item_data: batch_output})

Ich habe bereits herausgefunden, dass der Fehler nicht auftritt, wenn ich die folgenden Zeilen in meinem Code auskommentiere:

prediction = neural_network_model(champion_data)
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(prediction, item_data))
optimizer = tf.train.AdamOptimizer().minimize(cost)
_, cost = tf_session.run([optimizer, cost], feed_dict = {champion_data: batch_input, item_data: batch_output})

Irgendwo bekommt eine dieser Zeilen etwas, das nicht genau so aussieht, wie es erwartet. Ich habe bereits das Offensichtliche versucht (Entfernen von np.array () aus batch_input und batch_output oder Ersetzen durch list ()), aber das löst das Problem nicht. Meine aktuelle Hypothese ist, dass die Ausgabe von neural_network_model (champ_data) irgendwie die falsche Form oder den falschen Typ hat. Ich bin mir jedoch nicht sicher, wie ich das testen oder lösen soll, wenn sich herausstellt, dass dies der Fall ist.

Den vollständigen Code finden Sie hier: https://gist.github.com/HasseIona/4bcaf9f95ae828e056d5210a2ea07f88

Bearbeiten: Ich habe überprüft, dass die Championdaten, die in das neural_network_model eingegeben werden, die Vorhersage und die Kosten alle Tensoren sind. Ich habe versucht, das Problem mit der Hypothese zu lösen, dass das Problem irgendwie im Teil feed_dict = {} des Codes liegt, aber bisher nicht weitergekommen ist

Hasse Iona
quelle

Antworten:

17

Das Problem bestand darin, den Namen "Kosten" zweimal zu verwenden. Das Problem wurde gelöst, indem Folgendes geändert wurde:

_, cost = tf_session.run([optimizer, cost], feed_dict = {champion_data: batch_input, item_data: batch_output})

dazu:

_, c = tf_session.run([optimizer, cost], feed_dict = {champion_data: batch_input, item_data: batch_output})

Auf diese Weise kollidiert der Name der Variablen 'c' nicht mehr mit dem Teil [Optimierer, Kosten] des Codes.

Hasse Iona
quelle
erstaunlich nützliche Antwort
Lenhhoxung