Python 张量流卷积

Python 张量流卷积,python,image,tensorflow,reshape,convolution,Python,Image,Tensorflow,Reshape,Convolution,我正在尝试对可变尺寸的图像执行卷积(conv2d)。我有一个1-D数组形式的图像,我想对它们进行卷积,但是我在形状上有很多问题。 这是我的conv2d代码: tf.nn.conv2d(x, w, strides=[1, 1, 1, 1], padding='SAME') 其中,x是输入图像。 错误是: ValueError: Shape must be rank 4 but is rank 1 for 'Conv2D' (op: 'Conv2D') with input shapes: [1]

我正在尝试对可变尺寸的图像执行卷积(
conv2d
)。我有一个1-D数组形式的图像,我想对它们进行卷积,但是我在形状上有很多问题。 这是我的
conv2d
代码:

tf.nn.conv2d(x, w, strides=[1, 1, 1, 1], padding='SAME')
其中,
x
是输入图像。 错误是:

ValueError: Shape must be rank 4 but is rank 1 for 'Conv2D' (op: 'Conv2D') with input shapes: [1], [5,5,1,32].
我想我可能会重塑
x
,但我不知道正确的维度。当我尝试此代码时:

x = tf.reshape(self.x, shape=[-1, 5, 5, 1]) # example
我明白了:

ValueError: Dimension size must be evenly divisible by 25 but is 1 for 'Reshape' (op: 'Reshape') with input shapes: [1], [4] and with input tensors computed as partial shapes: input[1] = [?,5,5,1].
不能与秩1的张量一起使用。以下是文档中的描述:

计算给定4-D输入和过滤张量的二维卷积

这四个维度是
[批次、高度、宽度、通道]
(正如Engineero所写)

如果您事先不知道图像的尺寸,tensorflow允许提供动态形状:

在本例中,创建了一个4-D张量
x
,但静态上只知道通道的数量(3),其他一切都是在运行时确定的。因此,您可以将此
x
传递到
conv2d
,即使大小是动态的

但是还有另一个问题。你没有说你的任务,但如果你正在构建一个卷积神经网络,恐怕你需要知道输入的大小,以确定所有池操作后FC层的大小-这个大小必须是静态的。如果是这样的话,我认为最好的解决方案实际上是在将输入传递到卷积网络之前将其缩放到一个普通的大小

UPD:

由于还不清楚,下面介绍如何将任何图像重塑为4-D阵列

a = np.zeros([50, 178, 3])
shape = a.shape
print shape    # prints (50, 178, 3)
a = a.reshape([1] + list(shape))
print a.shape  # prints (1, 50, 178, 3)

conv2d
需要
shape=[batch,height,width,channels]
的数据,因此您最好直接使用图像,而不是将图像展平成一维数组(如果可以的话)。谢谢。问题是这些图像没有标准的高度或宽度,所以我无法提前说出形状。我按照你说的做了,但我得到了这个错误:
value错误:无法为张量“占位符:0”输入形状(50178)的值,它有形状“(?,?,?,3)”
。我猜
(150178)
是你的图像大小。有多少频道?如果只有一个,您需要将其重新塑造为
(1,-1,-1,1)
-这将是一批。我的坏消息。我将图像转换为rgb,现在我得到以下结果:
value错误:无法为张量“占位符:0”提供形状(50178,3)的值,该张量具有形状“(?,?,?,?,3)”
您忘记了批次的尺寸:
重塑([1,-1,-1,-1])
将使其排名为4。您的意思是我需要这样重塑吗?:
self x:tf重塑(self.\u training\u set[index],[1,-1,-1,-1])
。因为我无法将张量馈送到dict。
a = np.zeros([50, 178, 3])
shape = a.shape
print shape    # prints (50, 178, 3)
a = a.reshape([1] + list(shape))
print a.shape  # prints (1, 50, 178, 3)