TypeError: аргумент Fetch имеет недопустимый тип float32, должен быть строкой или Tensor

Я тренирую CNN, очень похожую на ту, что вэтот Например, для сегментации изображения. Изображения имеют размер 1500x1500x1, и этикетки имеют одинаковый размер.

После определения структуры CNN и запуска сеанса, как в этом примере кода: (conv_net_test.py)

with tf.Session() as sess:
sess.run(init)
summ = tf.train.SummaryWriter('/tmp/logdir/', sess.graph_def)
step = 1
print ("import data, read from read_data_sets()...")

#Data defined by me, returns a DataSet object with testing and training images and labels for segmentation problem.
data = import_data_test.read_data_sets('Dataset')

# Keep training until reach max iterations
while step * batch_size < training_iters:
    batch_x, batch_y = data.train.next_batch(batch_size)
    print ("running backprop for step %d" % step)
    batch_x = batch_x.reshape(batch_size, n_input, n_input, n_channels)
    batch_y = batch_y.reshape(batch_size, n_input, n_input, n_channels)
    batch_y = np.int64(batch_y)
    sess.run(optimizer, feed_dict={x: batch_x, y: batch_y, keep_prob: dropout})
    if step % display_step == 0:
        # Calculate batch loss and accuracy
        #pdb.set_trace()
        loss, acc = sess.run([loss, accuracy], feed_dict={x: batch_x, y: batch_y, keep_prob: 1.})
    step += 1
print "Optimization Finished"

Я наткнулся на следующую ошибку TypeError (трассировка стека ниже):

    conv_net_test.py in <module>()
    178             #pdb.set_trace()
--> 179             loss, acc = sess.run([loss, accuracy], feed_dict={x: batch_x, y: batch_y, keep_prob: 1.})
    180         step += 1
    181     print "Optimization Finished!"

tensorflow/python/client/session.pyc in run(self, fetches, feed_dict, options, run_metadata)
    370     try:
    371       result = self._run(None, fetches, feed_dict, options_ptr,
--> 372                          run_metadata_ptr)
    373       if run_metadata:
    374         proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)

tensorflow/python/client/session.pyc in _run(self, handle, fetches, feed_dict, options, run_metadata)
    582 
    583     # Validate and process fetches.
--> 584     processed_fetches = self._process_fetches(fetches)
    585     unique_fetches = processed_fetches[0]
    586     target_list = processed_fetches[1]

tensorflow/python/client/session.pyc in _process_fetches(self, fetches)
    538           raise TypeError('Fetch argument %r of %r has invalid type %r, '
    539                           'must be a string or Tensor. (%s)'
--> 540                           % (subfetch, fetch, type(subfetch), str(e)))

TypeError: Fetch argument 1.4415792e+2 of 1.4415792e+2 has invalid type <type 'numpy.float32'>, must be a string or Tensor. (Can not convert a float32 into a Tensor or Operation.)

Я в тупике на этом этапе. Может быть, это простой случай преобразования типа, но я не уверен, как и где. Кроме того, почему потеря должна быть строкой? (Предполагая, что та же ошибка появится и для точности, как только это будет исправлено).

Любая помощь приветствуется!

Ответы на вопрос(1)

Решение Вопроса

loss = sess.run(loss)переопределяешь в python переменнуюloss.

В первый раз все будет работать нормально. Во второй раз вы попробуете сделать:

sess.run(1.4415792e+2)

Так какloss сейчас поплавок.

Вы должны использовать разные имена, такие как:

loss_val, acc = sess.run([loss, accuracy], feed_dict={x: batch_x, y: batch_y, keep_prob: 1.})

Ваш ответ на вопрос