【问题标题】:How to use Tensorflow Dataset for CNN Model Training如何使用 TensorFlow 数据集进行 CNN 模型训练
【发布时间】:2019-11-30 03:25:54
【问题描述】:

我想使用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)

  • 到底发生了什么?如何通过 input_shape=(32, 32, 3) 在我的 Conv2D 层中使用 DataSet

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

【问题讨论】:

    标签: python tensorflow keras


    【解决方案1】:

    应将批处理生成器添加到具有任意批处理大小的数据集中。基于Tensorflow的文档herebatch函数:

    将此数据集的连续元素组合成批次。 结果元素的组件将有一个额外的外部 维度,这将是 batch_size(或最后一个是 N % batch_size 元素 if batch_size 不除输入元素个数N 均匀,drop_remainderFalse)。如果您的程序依赖于 具有相同外部尺寸的批次,您应该设置drop_remainder True 的参数,以防止生产较小的批次。

    假设您的批量大小为16。那么:

    my_batch_size =16
    train_dataset = tf.data.Dataset.from_tensor_slices((train_images, train_labels))
    test_dataset = tf.data.Dataset.from_tensor_slices((test_images, test_labels))
    # Shapes of data are (32,32,3) here
    
    train_dataset.batch(my_batch_size)
    test_dataset.batch(my_batch_size)
    # Shapes of data are (None,32,32,3) or (16,32,32,3) here
    

    然后你就可以训练你的模型了。

    【讨论】:

    • 非常感谢。我提到的教程提到了批处理,但没有把它作为要求提到,我完全糊涂了。
    猜你喜欢
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多