我试图为2D输入创建一个简单的单层卷积,这个想法只是有一个输入图像,内核和输出代码是:
import tensorflow as tf import numpy as np from PIL import Image import matplotlib.pyplot as plt filename_queue = tf.train.string_input_producer(['/home/ubuntu/test.png']) reader = tf.WholeFileReader() key, value = reader.read(filename_queue) my_img = tf.image.decode_png(value) init_op = tf.initialize_all_variables() sess = tf.InteractiveSession() with sess.as_default(): sess.run(init_op) coord = tf.train.Coordinator() threads = tf.train.start_queue_runners(coord=coord) for i in range(1): image = my_img.eval() image = tf.cast(image, tf.float64) image = tf.expand_dims(image, 0) K=np.array([[0,1,0],[1,1,1],[0,1,0]]).astype(float) K = tf.expand_dims(K, 2) K = tf.expand_dims(K, 0) conv = tf.nn.conv2d( image, K, strides=[3, 3, 3, 3], padding="SAME")
我收到此错误:
Traceback (most recent call last): File "test4.py", line 35, inpadding="SAME") File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_nn_ops.py", line 396, in conv2d data_format=data_format, name=name) File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/op_def_library.py", line 759, in apply_op op_def=op_def) File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 2242, in create_op set_shapes_for_outputs(ret) File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 1617, in set_shapes_for_outputs shapes = shape_func(op) File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 1568, in call_with_requiring return call_cpp_shape_fn(op, require_shape_fn=True) File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/common_shapes.py", line 610, in call_cpp_shape_fn debug_python_shape_fn, require_shape_fn) File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/common_shapes.py", line 675, in _call_cpp_shape_fn_impl raise ValueError(err.message) ValueError: Dimensions must be equal, but are 1 and 3 for 'Conv2D' (op: 'Conv2D') with input shapes: [1,400,400,1], [1,3,3,1].
我的输入是400x400x1,内核是3x3
基于conv2d doc:
shape of input = [batch, in_height, in_width, in_channels] shape of filter = [filter_height, filter_width, in_channels, out_channels]
输入的最后维度和过滤器的第三维表示输入通道的数量.在你的情况下,他们是不平等的.
You can change the shape of filter to [3, 3, 1, 1].