在您的情况下,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
=================================================================
这里我用batch_input_shape 替换了input_shape 参数。顾名思义,这个参数会提前问你batch size,在拟合数据的时候你不能提供任何其他batch size。