Tensorflow TypeError on session.run arguments/output
Question: I'm training a CNN quite similar to the one in
[this](http://stackoverflow.com/questions/37901882/tensorflow-reshaping-a-
tensor) example, for image segmentation. The images are 1500x1500x1, and
labels are of the same size.

After defining the CNN structure, and in launching the session as in this code
sample: (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"
    

I hit upon the following TypeError (stacktrace below):

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

I am stumped at this point. Maybe this is a simple case of converting the
type, but I'm not sure how/where. Also, why does the loss have to be a string?
(Assuming the same error will pop up for the accuracy as well, once this is
fixed).

Any help appreciated!


Answer: Where you use `loss = sess.run(loss)`, you redefine in python the variable
`loss`.

The first time it will run fine. The second time, you will try to do:

    
    
    sess.run(1.4415792e+2)
    

Because `loss` is now a float.

* * *

You should use different names like:

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

