ValueError:尺寸必须相等,但对于输入形状为[1,400,400,1],[1,3,1,1]的‘Conv2D’(op: 'Conv2D')则为1和3。

时间:2021-12-18 21:22:47

i am trying to create a simple one layer convolution for a 2D input the idea is just to have an input image , kernel and an output the code is :

我想为二维输入创建一个简单的一层卷积这个想法就是要有一个输入图像,内核和输出代码是:

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

and i am getting this error:

我得到了这个错误

Traceback (most recent call last):
  File "test4.py", line 35, in <module>
    padding="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].

my input is 400x400x1 and the kernel is 3x3

我的输入是400x400x1内核是3x3

1 个解决方案

#1


12  

Based on conv2d doc:

基于conv2d医生:

shape of input = [batch, in_height, in_width, in_channels]
shape of filter = [filter_height, filter_width, in_channels, out_channels]

Last dimension of input and third dimension of filter represents the number of input channels. In your case they are not equal.

输入的最后一个维度和滤波器的第三个维度表示输入通道的数量。在你的情况下,它们是不相等的。

You can change the shape of filter to [3, 3, 1, 1].

#1


12  

Based on conv2d doc:

基于conv2d医生:

shape of input = [batch, in_height, in_width, in_channels]
shape of filter = [filter_height, filter_width, in_channels, out_channels]

Last dimension of input and third dimension of filter represents the number of input channels. In your case they are not equal.

输入的最后一个维度和滤波器的第三个维度表示输入通道的数量。在你的情况下,它们是不相等的。

You can change the shape of filter to [3, 3, 1, 1].