Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我们可以使用一维卷积进行图像分类吗?_Python_Tensorflow_Keras_Cnn - Fatal编程技术网

Python 我们可以使用一维卷积进行图像分类吗?

Python 我们可以使用一维卷积进行图像分类吗?,python,tensorflow,keras,cnn,Python,Tensorflow,Keras,Cnn,我有形状(100,100,3)的图像,我想使用keras对图像进行分类。 我想知道这是否可行,以及我需要使用的输入的形状 PS:我使用tf.data.Dataset,我的数据集是成批处理的(20、100、100、3)。我假设你指的是跨层卷积图像的1x1卷积。在您的情况下,图层代码为: tf.keras.layers.Conv2D(filters=NUM_FILTERS, kernel_size=1, strides=1) Conv1D确实适用于@MatusDubrava指出的1d数据处理(如声

我有形状(100,100,3)的图像,我想使用keras对图像进行分类。 我想知道这是否可行,以及我需要使用的输入的形状


PS:我使用
tf.data.Dataset
,我的数据集是成批处理的(20、100、100、3)。

我假设你指的是跨层卷积图像的1x1卷积。在您的情况下,图层代码为:

tf.keras.layers.Conv2D(filters=NUM_FILTERS, kernel_size=1, strides=1)
Conv1D确实适用于@MatusDubrava指出的1d数据处理(如声音)。

我们应该使用1d卷积进行图像分类吗? TLDR不是自己写的,但如果是组合的话可能会

图像中像素之间的相关性(由于多个通道,可能是2D或3D)具有空间性质:给定像素的值高度受相邻像素的垂直和水平影响。二维/三维卷积(
Conv2D
Conv3D
)的优势在于,它们能够在垂直和水平两个空间方向上捕获这种影响

相比之下,1D卷积或
Conv1D
仅捕获两种相关性(垂直或水平)中的一种,因此产生的信息更为有限。单个
Conv1D
本身会遗漏大量信息

尽管如此,由于Conv2D可以“分解”为两个
Conv1D
块(这类似于MobileNet体系结构中的点向和深度卷积),串联垂直
Conv1D
和水平
Conv1D
捕获两个轴上的空间相关性。这是一种有效的图像分类方法,可以替代
Conv2D

我们可以使用一维卷积进行图像分类吗?怎么用? 是的,我们可以

您应该而不是重塑数据以减少尺寸:如果这样做,您将把图像的一端(如果垂直应用Conv1D,则为顶部)与另一端(例如底部)粘在一起,这会破坏空间一致性

这是一个可能的示例,说明如何(实现上面解释的连接):

将tensorflow导入为tf
x=tf.random.normal(input_shape=(20100100,3))#您的输入批次
#水平Conv1D
y_h=tf.keras.layers.Conv1D(
filters=32,kernel\u size=3,activation='relu',input\u shape=x.shape[2:](x)
#垂直Conv1D
y_v=tf.transpose(x,perm=[0,2,1,3])#图像行到列
y_v=tf.keras.layers.Conv1D(
filters=32,kernel\u size=3,activation='relu',input\u shape=x.shape[2:](x)
#y_v=tf.transpose(y_v,perm=[0,2,1,3])#撤销转置,可选
#连接结果
y=tf.keras.layers.Concatenate(轴=3)([y_h,y_v])#在要素图上连接
请注意,需要多次操作才能获得结果(垂直轴和水平轴上的卷积),直接应用
Conv2D
可以更容易、更快地获得结果

我们什么时候用这个?
如果图像数据在一个轴上特别缺乏信息,而在另一个空间轴上特别有趣,那么这可能是一个值得探索的想法。否则最好使用标准的
Conv2D
(大多数情况下,包括几乎所有的公共图像数据集)。

你可以,但你有什么好的理由吗?我认为一维卷积滤波器无法在图像的情况下构建非常有趣的模式。无论如何,您需要做的就是将图像重塑为1d conv所期望的格式。-您需要将宽度和高度尺寸展平为一。以下是一个相关阅读: