我无法理解我的第一个卷积神经网络期望输入的形状。
我的训练集是500张50x50像素的灰度图像。
网络始于Conv2D
层。参数input_shape
的文档说:
Input shape:
4D tensor with shape:
`(samples, channels, rows, cols)` if data_format='channels_first'
or 4D tensor with shape:
`(samples, rows, cols, channels)` if data_format='channels_last'.
所以我希望我需要将图像(到目前为止存储在pandas.DataFrame
列中)以形状为numpy.array
的{{1}}形式提供,因为我只有图像中的一个“彩色”通道。我将其重塑如下:
(500, 1, 50, 50)
X = np.array([img for img in imgs["img_res"]])
X = X.reshape(-1, 1, img_size, img_size)
现在是:(500、1、50、50)。我将其提供给X.shape
。
Conv2D
这将产生以下错误。您能指出这里有什么问题吗?
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(filters=64,
kernel_size=(3,3),
input_shape=X.shape[1:],
activation="relu"),
])
答案 0 :(得分:2)
通过将data_format='channels_first'
传递给Conv2D来指定您未使用默认数据格式。
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(filters=64,
kernel_size=(3,3),
input_shape=X.shape[1:],
activation="relu",
data_format='channels_first'),
])
答案 1 :(得分:2)
您正在使用TensorFlow,默认情况下使用“最后一个通道”输入格式,这意味着通道尺寸应在末尾:
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(filters=64,
kernel_size=(3,3),
input_shape=(50, 50, 1),
activation="relu"),
])
发生错误是因为输入形状中的1被解释为空间维度之一,在执行卷积后产生了负维度。