以下行的回溯是“语法错误”。为什么? 我做了什么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')
当我说“非常好”时,我的意思是这些线也在一个会话中运行以产生 层的数值。这两种形式的陈述有什么区别?
答案 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})