【发布时间】: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