如何使用Tensorflow数据集进行CNN模型训练

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Tensorflow数据集进行CNN模型训练相关的知识,希望对你有一定的参考价值。

我想使用tf.data.Dataset类来填充数据


from tensorflow_core.python.keras.datasets import cifar10
(train_images, train_labels), (test_images, test_labels) = cifar10.load_data()

train_dataset = tf.data.Dataset.from_tensor_slices((train_images, train_labels))
test_dataset = tf.data.Dataset.from_tensor_slices((test_images, test_labels))

  • 我这样做是为了在管道中使用Dataset

  • 进一步使用Dataset的其他功能。

我正在这样定义我的模型

    model = models.Sequential()
    model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))
    model.add(layers.MaxPool2D((2, 2)))
    # more layers

但是当我打电话训练模型时

model.fit(train_dataset, epochs=10, validation_data=test_dataset, callbacks=[ cp_callback])

我收到错误

ValueError:检查输入时出错:预期conv2d_input具有4维,但数组的形状为(32,32,3)

  • 真正发生了什么?如何在Conv2D图层中使用input_shape =(32,32,3)的DataSet

Tensorflow教程(https://www.tensorflow.org/tutorials/load_data/numpy)没有涵盖这种情况,我无法找到可以帮助我解决问题的解释。

答案

将此数据集的连续元素合并为批。结果元素的组件将具有一个额外的外部尺寸,将是batch_size(或最后一个N % batch_size如果batch_size不除以输入元素N的数量且drop_remainderFalse。如果您的程序取决于具有相同外部尺寸的批次,应设置drop_remainderTrue的参数以防止生成较小的批次。

以上是关于如何使用Tensorflow数据集进行CNN模型训练的主要内容,如果未能解决你的问题,请参考以下文章

如何拆分自己的数据集以在 Tensorflow CNN 中进行训练和验证

TensorFlow 简单实例

使用DOTA数据集训练Faster R-CNN模型

使用DOTA数据集训练Faster R-CNN模型

使用DOTA数据集训练Faster R-CNN模型

使用 Mesh-TensorFlow 进行超高分辨率图像分析