Tensorflow red neuronal TypeError: el argumento Fetch tiene un tipo no válido

11

Estoy haciendo una red neuronal simple usando tensorflow, con los datos que recopilé yo mismo, sin embargo, no está cooperando: PI se ha encontrado con un error que no puedo solucionar o encontrar la solución y me encantaría su ayuda.

El mensaje de error:

TypeError: el argumento Fetch 2861.6152 de 2861.6152 tiene un tipo no válido, debe ser una cadena o un tensor. (No se puede convertir un float32 en un Tensor u Operación).

El error se refiere a la siguiente línea en mi código:

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

Ya he descubierto que el error no ocurre cuando comento las siguientes líneas en mi código:

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

Entonces, en alguna parte, una de estas líneas está obteniendo algo que no se ve exactamente como espera que se vea. Ya he intentado lo obvio (eliminando el np.array () de batch_input y batch_output o reemplazándolo por list ()) pero eso no resuelve el problema. Mi hipótesis actual es que el resultado de neural_network_model (champion_data) es de alguna manera de forma o tipo incorrecto, sin embargo, no estoy seguro de cómo probarlo o cómo resolverlo si ese es el caso.

El código completo se puede encontrar aquí: https://gist.github.com/HasseIona/4bcaf9f95ae828e056d5210a2ea07f88

Editar: He verificado que los datos del campeón que se ingresan en el modelo de red neuronal, la predicción y el costo son todos tensores. He estado tratando de resolver el problema utilizando la hipótesis de que el problema de alguna manera radica en la parte feed_dict = {} del código, pero no llega a ningún lado hasta ahora

Hasse Iona
fuente

Respuestas:

17

El problema radicaba en usar el nombre 'costo' en dos ocasiones, el problema se resolvió cambiando esto:

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

a esto:

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

De esta forma, el nombre de la variable 'c' ya no choca con la parte [optimizador, costo] del código.

Hasse Iona
fuente
increíblemente respuesta útil
lenhhoxung