我是CNN的新手,我对CNN有疑问。对于CNN的输入形状(特别是Keras),我有些困惑。 我的数据是在不同时隙中的2D数据(例如10X10)。因此,我有3D数据。 我将把这些数据提供给我的模型以预测即将到来的时隙。因此,我将有一定数量的时隙用于预测(假设有10个时隙,到目前为止,我可能有10X10X10数据)。 现在,我的问题是我必须将此数据处理为具有10个通道的2D图像(例如CNN,RGB图像中的普通数据)或3D数据。 (在Keras中为conv2D或conv3D)。
预先感谢您的帮助。
答案 0 :(得分:2)
对于您而言,Conv2D
会很有用。请参考以下说明,以了解使用Conv2D
的卷积神经网络(CNN)的输入形状。
让我们看看输入形状如何。 CNN的输入数据如下图所示。我们假设我们的数据是图像的集合。
输入形状具有(batch_size, height, width, channels)
。如果RGB
图像的通道为3
,而greyscale
图像的通道为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
=================================================================
在这里,我已将input_shape
参数替换为batch_input_shape
。顾名思义,此参数将预先询问您的批次大小,并且在拟合数据时您无法提供任何其他批次大小。