这个陈述有什么问题?

时间:2017-05-31 08:45:20

标签: tensorflow

以下行的回溯是“语法错误”。为什么? 我做了什么shoyuld修复它?

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

当我说“非常好”时,我的意思是这些线也在一个会话中运行以产生 层的数值。这两种形式的陈述有什么区别?

1 个答案:

答案 0 :(得分: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})