卷积神经网络(CNN)输入形状

7
我对CNN比较陌生,有一个关于CNN的问题不太清楚,特别是在使用Keras时。我的数据是2D数据(比如说10X10),但是不同时刻下有多个这样的数据,因此我有3D数据。我想用这些数据来预测未来的时间点。所以我会有一定数量的时间点作为预测结果(比如说10个时间点,这样我就会有一个10X10X10的数据)。我的问题是:我应该把这个数据看作一个有10个通道的2D图像(像CNN中普通的RGB图像那样)还是3D数据(在Keras中应该是conv2D或conv3D)?
非常感谢您提前的帮助。

你最好尝试使用seq2seq或rnn网络,而不是简单的cnn。 - Mehraban
我认为seq2seq或RNN在我的情况下不起作用。我更喜欢坚持使用CNN或CNN-LSTM。谢谢你的建议。 - Hamed
因为您的数据似乎只有一个颜色通道(不是RGB,而只是10x10像素),所以我认为Conv2D足够了。如果您将颜色通道的数量设置为1,则我认为Conv2D操作实际上可能与Conv3D层执行的操作相同。 - Jake Tae
1个回答

11

对于您的情况,Conv2D将非常有用。请参考下面的描述,了解使用Conv2D的卷积神经网络(CNN)的输入形状。

让我们看看输入形状是什么样子的。CNN的输入数据将看起来像以下图片。我们假设我们的数据是图像集合。

enter image description here

输入形状为 (批量大小, 高度, 宽度, 通道数)。对于RGB图像,通道数为3,对于灰度图像,通道数为1

让我们看一下下面的代码

import tensorflow as tf
from tensorflow.keras.layers import Conv2D

model=tf.keras.models.Sequential()
model.add(Conv2D(filters=64, kernel_size=1, input_shape=(10,10,3)))
model.summary()

输出:

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, 10, 10, 64)        256       
=================================================================

虽然输入形状看起来像是3D,但在拟合数据时,您需要传递一个尺寸为(batch_size, 10, 10, 3)4D数组。由于输入形状参数中没有批量大小值,因此我们可以在拟合数据时选用任何批次大小。

输出形状为(None, 10, 10, 64)。第一个维度表示批量大小,当前为None,因为网络无法提前知道批量大小。

注意:一旦您拟合数据,None将被您提供的批量大小所替代。

让我们看另一个带有批处理大小的代码示例。

    import tensorflow as tf
    from tensorflow.keras.layers import Conv2D

    model=tf.keras.models.Sequential()
    model.add(Conv2D(filters=64, kernel_size=1, batch_input_shape=(16,10,10,3)))
    model.summary()

输出:

Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_1 (Conv2D)            (16, 10, 10, 64)          256       
=================================================================

在这里,我已经用batch_input_shape替换了input_shape参数。正如名称所示,这个参数会事先询问你批大小,并且在拟合数据时不能提供其他批大小。


非常感谢!它帮了我很多。 - Hamed
@Hamed,如果我回答了你的问题,你能否接受答案并点赞答案。谢谢。 - bsquare

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接