2017-05-31 69 views
-1

以下行的回溯是“语法错误”。为什么? 我做什么修复它?这个陈述有什么问题?

w1=tf.Variable(tf.truncated_normal(shape=[3,3,1,20]) 
layer=tf.nn.conv2d(input=img,filter=w1,strides=[1,1,1,1],padding='SAME') 

'img'是灰度图像(np.array),1x32x32x1。

但是,下面的行工作得很好:

def new_w(shape): 
return tf.Variable(tf.truncated_normal(shape,stddev=0.05)) 

然后:

w1=new_w(shape=[3,3,1,20]) 
    layer=tf.nn.conv2d(input=img,filter=w1,strides=[1,1,1,1],padding='SAME') 

当我说“非常好”我指的是线也是一个会话中运行,产生 一个该层的数值。这两种表述之间有什么区别?

回答

0

从文档https://www.tensorflow.org/api_docs/python/tf/nn/conv2d

输入应该是一个tensorflow.Tensor,而你说,IMG是灰度图像(我想转换成numpy.ndarray)。

您应该创建一个常量张量,其值为图像或占位符,并将img作为占位符的值提供。

例如:

constant_img = tf.constant(img, shape=img.shape, dtype=tf.float32) 
layer = tf.nn.conv2d(input=constant_img, filter=w1,strides=[1,1,1,1],padding='SAME') 
在这两种情况下

placeholder_img = tf.placeholder(dtype=tf.float32, shape=img.shape) 
layer = tf.nn.conv2d(input=placeholder_img, filter=w1,strides=[1,1,1,1],padding='SAME')  

,层将是一个tf.Tensor,所以就不会看到任何数值数据。要提取数值数据,你将不得不打开一个会话,这样做

with tf.Session() as sess: 
    sess.run(tf.global_variables_initializer()) 

,然后,在第一种情况下(常量)

layer_val = sess.run([layer]) 

,而在第二种情况下(占位符)

layer_val = sess.run([layer], feed_dict={placeholder_img: img}) 
+0

请参阅我修改上面 –

+0

的一点是,tf.conv2d的输入参数应该是一个tensorflow.Tensor,而不是numpy.ndarray –

+0

tf.conv2d运行perfectl嗯,在np.array上。正如我写的,我检查了它。这两个陈述之间的唯一区别在于过滤器的定义。在第一行中,它是在一个函数之外定义的,而在另外两行中则是在没有函数的情况下定义的。 –