Нейронная сеть Tensorflow TypeError: Аргумент Fetch имеет недопустимый тип

11

Я делаю простую нейронную сеть, используя тензор потока, с данными, которые я собрал сам, однако, это не сотрудничает: PI столкнулся с ошибкой, которую я не могу исправить или исправить, и я буду рад вашей помощи.

Сообщение об ошибке:

TypeError: Аргумент Fetch 2861.6152 из 2861.6152 имеет недопустимый тип, должен быть строкой или Tensor. (Не может преобразовать float32 в Тензор или Операцию.)

Ошибка относится к следующей строке в моем коде:

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

Я уже понял, что ошибка не возникает, когда я закомментирую следующие строки в моем коде:

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})

Так что где-то одна из этих строк получает что-то, что выглядит не совсем так, как она ожидает. Я уже пробовал очевидное (удаление np.array () из batch_input и batch_output или замена его на list ()), но это не решает проблему. Моя текущая гипотеза заключается в том, что вывод neural_network_model (champion_data) имеет неправильную форму или тип, однако я не уверен, как это проверить или как решить, если это окажется так.

Полный код можно найти здесь: https://gist.github.com/HasseIona/4bcaf9f95ae828e056d5210a2ea07f88

Изменить: я убедился, что данные чемпиона, которые вводятся в neural_network_model, прогноз и стоимость являются тензорными. Я пытался решить проблему, используя гипотезу, что проблема каким-то образом заключается в части кода feed_dict = {}, но пока никуда не деться

Хассе Иона
источник

Ответы:

17

Проблема заключалась в том, чтобы использовать имя «стоимость» в двух случаях, проблема была решена путем изменения этого:

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

к этому:

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

Таким образом, имя переменной 'c' больше не конфликтует с частью кода [optimizer, cost].

Хассе Иона
источник
удивительно полезный ответ
lenhhoxung