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