将数据集的维度从 (32,32,3,10000) 更改为 (10000,32,32,3) 以训练 CNN

Change the dimension of data set from (32,32,3,10000) to (10000,32,32,3) for training the CNN

我有一个维度为 (32, 32, 3, 10000) 的训练数据集和维度为 (32, 32, 3, 1000) 的测试数据集。我正在尝试建立一个 cnn 模型来预测图像。我尝试了以下架构。

  model = keras.Sequential(layers = [
  keras.layers.Conv2D(32, kernel_size = (3,3), input_shape=(32,32,3)),
  keras.layers.Conv2D(32, kernel_size = (3,3), padding='same',activation='relu'),
  keras.layers.MaxPool2D(pool_size=(2,2), strides=2, padding='valid'),
  keras.layers.Flatten(),
  keras.layers.Dense(units = 32, activation='relu'),
  keras.layers.Dense(units = 32, activation='softmax')
])


model.compile(optimizer='adam', loss = 'sparse_categorical_crossentropy', metrics=['acc'])

history = model.fit(train_images, train_label, batch_size=10, epochs=3, verbose=1, validation_data=(test_images, test_label))

然后它给我一个错误

 ValueError: Data cardinality is ambiguous:
  x sizes: 32
  y sizes: 10000
Please provide data which shares the same first dimension.

然后我尝试通过如下更改拟合线来重塑训练和测试数据

history = model.fit(train_images.reshape(10000,32,32,3), train_label, batch_size=10, epochs=5, verbose=1, validation_data=(test_images.reshape(1000,32,32,3), test_label))

然后程序运行,但我很困惑,当我尝试从数据集中绘制图像时,它显示如下。

重塑数据集有什么问题? 如何使用此数据集制作 cnn 模型?

您需要转置,而不是重塑:

train_images.transpose([3, 0, 1, 2])

Reshape 批量获取所有数据并开始更改每个维度的元素数量。转置更改维度的层次结构但将数据保存到位。详细解释:https://lihan.me/2018/01/numpy-reshape-and-transpose/#:~:text=numpy.,format%20array%20into%20that%20shape.&text=Transpose%2C%20on%20the%20other%20hand,in%20a%20higher%20dimensional%20setting.