【问题标题】:Change the dimension of data set from (32,32,3,10000) to (10000,32,32,3) for training the CNN将数据集的维度从 (32,32,3,10000) 更改为 (10000,32,32,3) 以训练 CNN
【发布时间】:2021-03-17 21:52:39
【问题描述】:

我有一个维度为 (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 模型?

【问题讨论】:

    标签: python numpy tensorflow google-colaboratory reshape


    【解决方案1】:

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

    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.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-17
      • 2021-08-11
      • 2021-10-30
      • 2017-12-12
      • 1970-01-01
      • 2018-04-06
      • 2020-04-27
      • 2021-05-24
      相关资源
      最近更新 更多