【问题标题】:Replicate Keras tutorial without caching复制没有缓存的 Keras 教程
【发布时间】:2022-03-31 08:48:41
【问题描述】:

我正在尝试在 Keras 官方网站上复制 this tutorial。本教程是关于迁移学习的,它是关于如何在著名的 cats vs. dogs 数据集上使用预训练模型的指导示例。

我的问题与他们缓存和调整缓冲区大小的部分有关,具体执行如下:

batch_size = 32

train_ds = train_ds.cache().batch(batch_size).prefetch(buffer_size=10)
validation_ds = validation_ds.cache().batch(batch_size).prefetch(buffer_size=10)
test_ds = test_ds.cache().batch(batch_size).prefetch(buffer_size=10)

如果我跳过这一部分,我将无法再复制本教程,因为我在拟合模型的位置出现错误。错误内容如下:

ValueError: Input 0 is incompatible with layer model_7: expected shape=(None, 150, 150, 3), found shape=(150, 150, 3)

问题

我需要进行哪些修改才能运行训练而不用担心缓存和相关内容?

【问题讨论】:

  • 跳过是什么意思?即使您没有 cache(),您也需要批量处理您的数据集。
  • 我的意思是我不想执行任何与缓存相关的代码。该 sn-p 改变了我无法完全控制的不同数据集上的某些内容。我希望能够在不应用任何缓存操作的情况下训练模型。这可能吗?
  • 当然,为什么不呢? cache() 操作用于在训练时获得更好的性能。应用 batch()prefetch() 应该足以满足您的情况。
  • 我不确定我是否正确解释了我的观点。我不想申请任何这些。所以没有batch(),也没有prefetch()。这可能吗?如果是这样,我将如何更改代码以使其正常工作?谢谢
  • 几乎所有 Keras 模型/层都需要批量维度。不“想要”这些东西是没有意义的,它完全独立于缓存。如果要传递单个输入,可以使用batch(1) 添加大小为 1 的批量维度。

标签: python tensorflow keras caching


【解决方案1】:

要从此代码中删除缓存和预取(使用缓存机制),只需从输入管道中删除这些方法,如下所示:

batch_size = 32

train_ds = train_ds.batch(batch_size)
validation_ds = validation_ds.batch(batch_size)
test_ds = test_ds.batch(batch_size)

教程中的其余代码将正常工作,只是数据集不会使用缓存。

正如其他人指出的那样,.batch() 方法独立于缓存,但需要将数据集排列成批次,然后按顺序馈送到模型中。当您跳过整个代码块时,您收到的错误与被跳过的 .batch() 方法有关。

.batch() 向数据集添加外部维度,标准 keras 模型和层(如该教程中使用的模型和层)期望作为输入。这就是您收到错误“Expected shape=(None, 150, 150, 3), found shape=(150, 150, 3)”的原因。

您可以阅读有关链接方法here、批处理和.batch() 方法here.cache() 方法here.prefetch() 方法here 的更多信息。

【讨论】:

    猜你喜欢
    • 2019-05-27
    • 2011-01-08
    • 2021-12-31
    • 2013-02-13
    • 2013-01-29
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多