我想将迁移学习与 Google 的 Inception 网络一起用于图像识别问题。我正在使用 TensorFlow 示例源中的 retrain.py 来获取灵感,并按照Google 的官方教程进行操作。
然而,它的输入管道是“每一步从训练集中随机选择 10 张图像(其中 10 张是 batch_size),从缓存中找到它们的瓶颈,并将它们输入最后一层以获得预测。”
具体来说,在其代码retrain.py 中,将通过随机选择每个图像来检索 batch_size 图像。对于每个图像,找到其图像索引
image_index = random.randrange(MAX_NUM_IMAGES_PER_CLASS + 1)
其中MAX_NUM_IMAGES_PER_CLASS
= 2^27 + 1,然后image_index
将由标签的可用图像数量取模。
我的问题是:
1)为什么它必须创建这样的批次(随机到大量,然后修改每个类的长度)?为什么我们不随机到每个班级的长度)
2)如果我们为每次喂食选择一组随机的图像,我们是否会丢失大部分数据并接收到重复的喂食示例?为什么输入管道是正常排列的:我们有很多 epoch,每个 epoch 都是完整的数据并分为很多批次,然后我们将每个批次输入到我们的模型中?
非常感谢!!
参考
在 retrain.py 中train_bottlenecks
,train_ground_truth
(这些被输入到模型中)由get_random_distorted_bottlenecks
. 在这个函数中,我们对每个图像进行循环,直到我们有足够的 batch_size 图像:找到一个随机标签,然后找到随机索引:
label_index = random.randrange(class_count)
label_name = list(image_lists.keys())[label_index]
image_index = random.randrange(MAX_NUM_IMAGES_PER_CLASS + 1)