Python 如何将TensorFlow 2D卷积(tf.nn.conv2d)应用于单个(非批处理)2D图像?

Python 如何将TensorFlow 2D卷积(tf.nn.conv2d)应用于单个(非批处理)2D图像?,python,tensorflow,conv-neural-network,convolution,Python,Tensorflow,Conv Neural Network,Convolution,我想在单个图像示例上使用函数tf.nn.conv2d(),但TensorFlow文档似乎只提到将此转换应用于批图像 文档提到输入图像必须是形状[批处理,输入高度,输入宽度,输入通道],内核必须是形状[过滤高度,过滤宽度,输入通道,输出通道]。然而,用输入形状实现二维卷积的最直接的方法是什么 以下是当前方法的示例,img具有形状(高度、宽度、通道): 我正在按如下方式重新调整输入: [in_高度,in_宽度,in_通道]->[1,in_高度,in_宽度,in_通道]->[in_高度,in_宽度,i

我想在单个图像示例上使用函数
tf.nn.conv2d()
,但TensorFlow文档似乎只提到将此转换应用于批图像

文档提到输入图像必须是形状
[批处理,输入高度,输入宽度,输入通道]
,内核必须是形状
[过滤高度,过滤宽度,输入通道,输出通道]
。然而,用输入形状实现二维卷积的最直接的方法是什么

以下是当前方法的示例,
img
具有形状(高度、宽度、通道):

我正在按如下方式重新调整输入:

[in_高度,in_宽度,in_通道]->[1,in_高度,in_宽度,in_通道]->[in_高度,in_宽度,in_通道]

当我只对转换一个示例感兴趣时,这感觉像是一个不必要且成本高昂的操作


有没有一种简单/标准的方法不涉及整形?

AFAIK没有办法。第一个操作似乎创建了一个副本(如果我错了,有人会纠正我)。不过,您可以使用它,因为它冗长,所以在我看来更具可读性

另一方面,从张量中提取
0
元素在这种情况下不应执行复制,并且几乎是免费的

最重要的是,除了语法上的一些不便(例如,
[0]
),这些操作肯定不会花费太多,尤其是在执行卷积的情况下


顺便说一句,其他现成的替代层,如
tf.keras
中的层,也需要批量作为第一维度。

AFAIK没有办法。第一个操作似乎创建了一个副本(如果我错了,有人会纠正我)。不过,您可以使用它,因为它冗长,所以在我看来更具可读性

另一方面,从张量中提取
0
元素在这种情况下不应执行复制,并且几乎是免费的

最重要的是,除了语法上的一些不便(例如,
[0]
),这些操作肯定不会花费太多,尤其是在执行卷积的情况下

顺便说一句,其他现成的替代层,如
tf.keras
中的层,也需要批量作为第一维度

img = tf.random_uniform((10,10,3))  # a single image
img = tf.nn.conv2d([img], kernel)[0] # creating a batch of 1, then indexing the single example