Tensorflow 这句话有什么不对?

Tensorflow 这句话有什么不对?,tensorflow,Tensorflow,以下行的回溯是“语法错误”。为什么? 我该怎么做才能修好它 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.数组),1x32x1 但是,以下几行非常有效: def new_w(shape): return tf.Variable(tf.truncat

以下行的回溯是“语法错误”。为什么? 我该怎么做才能修好它

 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.数组),1x32x1

但是,以下几行非常有效:

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')  
当我说“非常好”的时候,我的意思是这些行也会在一个会话中运行以产生收益 层的数值。这两种形式的陈述有什么不同

来自文档

输入应该是一个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')

在这两种情况下,图层都是tf.张量,所以您不会看到任何数值数据。要提取数字数据,您必须打开一个会话,并执行以下操作

with tf.Session() as sess:
  sess.run(tf.global_variables_initializer())
然后,在第一种情况下(常数)

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


请看我上面的修改,要点是tf.conv2d的输入参数应该是tensorflow.Tensor,而不是numpy.ndarraytf.conv2d在np.array上运行得非常好。当我写的时候,我检查了一下。这两条语句之间的唯一区别在于过滤器的定义。在第一行中,它是在函数外部定义的,在另外两行中,它是在没有函数的情况下定义的。tf.conv2d在np.array上运行良好。当我写的时候,我检查了一下。这两条语句之间的唯一区别在于过滤器w的定义。在第一行中,它是在函数外部定义的,在另外两行中,它是在函数内部定义的。这就是全部的区别。同样,我在numpy数组上运行tf.nn.conv2d非常好。对不起,我不明白你的答案。我想了解为什么如何定义过滤器很重要。问题不在于输入。也许我在这里没有得到什么。第一行w1=tf.Variable(tf.truncated_normal(shape=[3,3,1,20])中有一个输入错误。你错过了一个括号,是吗?
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})