【问题标题】:Convolutional Neural Network (CNN) input shape卷积神经网络 (CNN) 输入形状
【发布时间】:2020-05-26 04:54:52
【问题描述】:

我是 CNN 的新手,我有一个关于 CNN 的问题。我对 CNN 的输入形状(特别是 Keras)有点困惑。 我的数据是不同时隙的 2D 数据(比如说 10X10)。因此,我有 3D 数据。 我将把这些数据提供给我的模型来预测即将到来的时间段。所以,我会有一定数量的时隙用于预测(假设是 10 个时隙,到目前为止,我可能有 10X10X10 的数据)。 现在,我的问题是我必须将这些数据作为具有 10 个通道的 2D 图像(如 CNN 中的普通数据、RGB 图像)或作为 3D 数据来处理。 (Keras 中的 conv2D 或 conv3D)。

提前感谢您的帮助。

【问题讨论】:

  • 你最好尝试 seq2seq 或 rnn 网络,而不是简单的 cnn。
  • 我认为 seq2seq 或 RNN 不适用于我的情况。我更愿意坚持使用 CNN 或 CNN-LSTM。不过谢谢。
  • 因为您的数据似乎只有一个颜色通道(不是 RGB,而只是 10×10 像素),我认为 Conv2D 就足够了。如果将颜色通道数设置为 1,我认为 Conv2D 操作实际上可能与 Conv3D 层执行的操作相同。

标签: tensorflow keras deep-learning conv-neural-network


【解决方案1】:

在您的情况下,Conv2D 将很有用。请参阅下面的描述以了解使用Conv2D 的卷积神经网络 (CNN) 的输入形状。

让我们看看输入形状的样子。 CNN 的输入数据将如下图所示。我们假设我们的数据是一组图像。

输入形状有(batch_size, height, width, channels)。如果RGB 图像的通道为3greyscale 图像的通道为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,但你必须在拟合数据时传递一个4D 数组,它应该像(batch_size, 10, 10, 3)。由于 input_shape 参数中没有批量大小值,我们可以在拟合数据时使用任何批量大小。

输出形状为(None, 10, 10, 64)。第一个维度表示批量大小,目前为None。因为网络事先并不知道批量大小。

Note: 拟合数据后,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 参数。顾名思义,这个参数会提前问你batch size,在拟合数据的时候你不能提供任何其他batch size。

【讨论】:

  • 非常感谢!它有帮助。
  • @Hamed,如果我已经回答了您的问题,请您接受答案并为答案投票。谢谢
猜你喜欢
  • 2017-07-30
  • 2017-08-31
  • 2020-10-07
  • 1970-01-01
  • 2019-09-09
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
  • 1970-01-01
相关资源
最近更新 更多