2016-10-09 5 views
7

देता है जब मैं tf.reshape() का उपयोग कर एक घुमाव के उत्पादन में नयी आकृति प्रदान करने की कोशिश, मैं एक लेखन त्रुटि मिलTensorflow घुमाव के उत्पादन पर नयी आकृति प्रदान लेखन त्रुटि

TypeError: Expected binary or unicode string, got -1 

मॉडल मैं लिखा है है:

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 

और मुझे प्राप्त होने वाली सटीक त्रुटि है:

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 

मुझे समझ में नहीं आ रहा है कि यह क्यों हो रहा है। ऐसा लगता है कि आकृति सरणी को एक टेंसर में परिवर्तित करने में कुछ त्रुटि है, लेकिन जब मैं एक मनमानी सरणी को टेंसर करने की कोशिश करता हूं और परिवर्तित करता हूं तो यह काम करता है। मैंने सभी आयामों को वास्तविक मानों में बदलने की कोशिश की (-1 के बजाय बैच_साइज), और यह भी काम नहीं करता है।

मेरा टेन्सफोर्लो संस्करण 0.11 है और मैं इसे जीपीयू समर्थन के साथ एक लिनक्स मशीन पर चला रहा हूं।

उत्तर

8

मुझे पहले ऐसा करना था। इस

shape = h2.get_shape() 
इस के लिए

बदलें:

shape = h2.get_shape().as_list() 
+0

यह रूप में अच्छी तरह से मेरे (समान) समस्या हल हो जाती है, धन्यवाद! कुछ पता है कि ऐसा क्यों हो रहा है? – agrinh

+0

मुझे विश्वास है कि .get_shape() टाइप टेंसर का रिटर्न देता है जबकि आप वास्तव में जो चाहते हैं वह या तो एक numpy सरणी या सादे पायथन सूची के साथ काम करने के लिए है। दस्तावेज़ीकरण और कार्यक्षमता बहुत अच्छी उम्मीद नहीं है कि यह बेहतर हो जाएगा या इसके का कांटा यह और अधिक स्पष्ट करेगा कि क्या हो रहा है। – Steven

संबंधित मुद्दे