Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Tensorflow reshape on convolution output gives TypeError

When I try to reshape the output of a convolution using tf.reshape(), I get a TypeError

TypeError: Expected binary or unicode string, got -1

The model I have written is:

with tf.name_scope('conv1'):
    filter = tf.Variable(tf.truncated_normal([5, 5, 1, self.num_hidden / 2], mean=0.0,
                                             stddev=0.02, dtype=tf.float32),
                         name='filter')
    b = tf.Variable(tf.zeros([self.num_hidden / 2], dtype=tf.float32),
                    name='b')
    h1 = tf.nn.relu(tf.nn.bias_add(tf.nn.conv2d(inp, filter,
                                   [1, 2, 2, 1], padding='SAME'), b))
with tf.name_scope('conv2'):
    filter = tf.Variable(tf.truncated_normal([5, 5, self.num_hidden / 2, self.num_hidden], mean=0.0,
                                             stddev=0.02, dtype=tf.float32),
                         name='filter')
    b = tf.Variable(tf.zeros([self.num_hidden], dtype=tf.float32),
                    name='b')
    h2 = tf.nn.relu(tf.nn.bias_add(tf.nn.conv2d(h1, filter,
                                   [1, 2, 2, 1], padding='SAME'), b))
    # h2 -> [-1, 7, 7, 32]
    # num_units -> [-1, 1568]
    shape = h2.get_shape()
    num_units = shape[1]*shape[2]*shape[3]
with tf.name_scope('reshape'):
    h2_flattened = tf.reshape(h2, [-1, num_units])
    h2_flattened = tf.nn.dropout(h2_flattened, keep_prob=0.9)
with tf.name_scope('prediction'):
    W = tf.Variable(tf.truncated_normal([num_units, 1], mean=0.0, stddev=0.01,
                                        dtype=tf.float32), name='W')
    b = tf.Variable(tf.zeros([1], dtype=tf.float32), name='b')
    self.pred = tf.matmul(h2_flattened, W) + b

And the exact error I am getting is:

Traceback (most recent call last):
  File "single_model_conv.py", line 108, in <module>
    gan = GAN(num_latent, 28, 'single')
  File "single_model_conv.py", line 23, in __init__
    self.adversary(self.gen_image)
  File "single_model_conv.py", line 93, in adversary
    h2_flattened = tf.reshape(h2, [-1, num_units])
  File "/nfs/nemo/u3/idurugkar/tensorflow/local/lib/python2.7/site-packages/tensorflow/python/ops/gen_array_ops.py", line 1977, in reshape
    name=name)
  File "/nfs/nemo/u3/idurugkar/tensorflow/local/lib/python2.7/site-packages/tensorflow/python/framework/op_def_library.py", line 490, in apply_op
    preferred_dtype=default_dtype)
  File "/nfs/nemo/u3/idurugkar/tensorflow/local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 657, in convert_to_tensor
    ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref)
  File "/nfs/nemo/u3/idurugkar/tensorflow/local/lib/python2.7/site-packages/tensorflow/python/framework/constant_op.py", line 180, in _constant_tensor_conversion_function
    return constant(v, dtype=dtype, name=name)
  File "/nfs/nemo/u3/idurugkar/tensorflow/local/lib/python2.7/site-packages/tensorflow/python/framework/constant_op.py", line 163, in constant
    tensor_util.make_tensor_proto(value, dtype=dtype, shape=shape))
  File "/nfs/nemo/u3/idurugkar/tensorflow/local/lib/python2.7/site-packages/tensorflow/python/framework/tensor_util.py", line 422, in make_tensor_proto
    tensor_proto.string_val.extend([compat.as_bytes(x) for x in proto_values])
  File "/nfs/nemo/u3/idurugkar/tensorflow/local/lib/python2.7/site-packages/tensorflow/python/util/compat.py", line 64, in as_bytes
    (bytes_or_text,))
TypeError: Expected binary or unicode string, got -1

I don't understand why this is happening. It seems as if there is some error in converting the shape array into a tensor, but when I try and convert an arbitrary array to tensor it works. I also tried converting all the dimensions to actual values (batch_size instead of -1), and that doesn't work either.

My tensorflow version is 0.11 and I am running it on a Linux machine with GPU support.

like image 861
IshanD Avatar asked Oct 09 '16 15:10

IshanD


People also ask

What is TensorFlow reshape and how does it work?

TensorFlow Reshape functionality allows Data Scientists to play around with dimensions of the Tensors, in the way their application warrants and control the data flow to achieve the results. This manipulation of Tensor elements does not alter the original form and the consistency is maintained.

What is tensor in TensorFlow?

TensorFlow is a module that allows engineers to create and build models by representing sets of data as tensors. A tensor is a generalization of vectors and matrices to potentially higher dimensions. Tensorflow represents tensors as n-dimensional arrays of specified data types.

Why is my TensorFlow upsample not working with tensorrt?

was to replace the Tensorflow upsample command which isn’t supported by the TensorRT. By implementing a TensorRT plugin which implemets the original Tensorflow upsample logic and replacing all above Tensorflow operations (using graphsurgeon tool) with it, I bypassed this error.

How to change the shape of a tensor in TF?

As you might guess, the tf.reshape () operation is used to change the shape of a tensor. The general definition of the operation is as follows: What this does is; given a tensor of initial shape, tf.reshape () returns a tensor with the same elements, in the same order, with the same datatype, but with a different arrangement (i.e. shape).


1 Answers

I had to do this before. Change this

shape = h2.get_shape()

to this:

shape = h2.get_shape().as_list()
like image 69
Steven Avatar answered Sep 29 '22 14:09

Steven