Почему ошибка:
Поскольку вы запускали один и тот же фрагмент несколько раз на нечистом графике (т. Е. На вашем графике несколько копий сети).Причина, по которой я могу сказать, это _5
в конце имени узла в сообщении об ошибке.TF назначает имя по умолчанию всем тензорам в графе, используя инкрементные индексы, если имя уже занято.Placeholder_5
означает, что в том же графике есть как минимум 5 Placeholder
экземпляров без назначенного имени по умолчанию, что, учитывая ваш код, должно быть невозможным, если вы не вызывали функцию несколько раз без очисткиграфик.
Как это исправить:
Запустить на чистом графике: поставьте tf.reset_default_graph()
перед finalVal = customOps(n)
.
Примечание: Ваш кодимеет больше проблем, чем это (например, у вас есть x
в основной ветке, но x
является локальной переменной customOps
), но причина вашей ошибки - та, которая указана выше.Ниже вы найдете проверенную и работающую версию своего кода, которая решает обе проблемы.
import tensorflow as tf
import numpy as np
def customOps(n):
x = tf.placeholder(tf.float32)
v1 = tf.reduce_sum(x,1)
v2 = tf.reduce_sum(x,0)
v = tf.nn.softmax(tf.concat([v1, v2], 0))
index = np.argmax(v)
if index > n/3:
finalval = tf.norm(v1-v2, ord='euclidean')
else:
finalval = tf.norm(v1+v2, ord='euclidean')
return x, finalval
if __name__ == '__main__':
mat = np.asarray([[0, 1], [1, 0]], dtype = np.float32)
n = mat.shape[0]
tf.reset_default_graph()
x, finalVal = customOps(n)
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
outVal = sess.run(finalVal, feed_dict={x:mat})
print(outVal)
sess.close()