python - ValueError : Dimensions must be equal, 但对于 'Conv2D' 是 1 和 3 (op : 'Conv2D' ) with input shapes: [1, 400,400,1], [1,3,3,1]

标签 python machine-learning tensorflow convolution

我正在尝试为 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, 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].

我的输入是 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]

输入的最后一个维度和过滤器的第三个维度表示输入 channel 的数量。在您的情况下,它们不相等。

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

关于python - ValueError : Dimensions must be equal, 但对于 'Conv2D' 是 1 和 3 (op : 'Conv2D' ) with input shapes: [1, 400,400,1], [1,3,3,1],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41800643/

相关文章:

python - 在神经网络中 : accuracy improvement after each epoch is GREATER than accuracy improvement after each batch. 为什么?

tensorflow - Keras 提前停止和监控

python - 选择特定行的 2D PyTorch 张量

python - Django 子域

machine-learning - 互信息和预测准确性

machine-learning - Caffe 进行数据洗牌的方式

python - Queue.dequeue 卡在 Tensorflow 输入管道中

python - 如何使用 python grep 大文件中两个模式之间的行

javascript - 如何将 html View 数据或(Python)服务器数据传输到 Angular 或 Javascript?

python - 在受限的博茨曼机器中寻找对数似然性