减少 SSD-300 的训练步骤

Reduce Training steps for SSD-300

我是深度学习的新手,我正在尝试训练我的 SSD-300(单次检测器)模型,但它花费的时间太长了。例如,即使我 运行 50 个时期,它正在训练 108370+ 个全局步骤。我正在使用官方 github 存储库中的默认 train_ssd_network.py 文件:https://github.com/balancap/SSD-Tensorflow

我运行训练的命令:

!python train_ssd_network.py --dataset_name=pascalvoc_2007 epochs= 50 --dataset_split_name=train --model_name=ssd_300_vgg --save_summaries_secs=60 --save_interval_secs=600 --weight_decay=0.0005 --optimizer=adam --learning_rate=0.001 --batch_size=6 --gpu_memory_fraction=0.9 --checkpoint_exclude_scopes =ssd_300_vgg/conv6,ssd_300_vgg/conv7,ssd_300_vgg/block8,ssd_300_vgg/block9,ssd_300_vgg/block10,ssd_300_vgg/block11,ssd_300_vgg/block4_box,ssd_300_vgg/block7_box,ssd_300_vgg/block8_box,ssd_300_vgg/block9_box,ssd_300_vgg/block10_box,ssd_300_vgg/block11_box

如何更改训练步骤以及理想的训练步骤是什么?

train_ssd_network.py没有提供具体的号码相关global_steps

由于它没有参数来设置您想要的值,因此您必须进入源代码并找到为训练集设置批量大小和测试步骤的位置。如果由模型类型和训练数据的大小决定,则用于训练批量大小和训练步骤的值。例如,如果您说要对图像进行分类并且图像形状是 (64,64,3),您可以设置相当大的批处理大小而不会出现资源耗尽错误。说 batch_size=100。 如果您的图像形状是 (500, 500, 3),那么您需要更小的批量大小,例如 batch_size=20。通常在 model.fit 中你不需要指定 steps 的值。保留为 None,model.fit 将在内部计算步数。 model.predict 也是如此。如果您确实需要计算测试集的步骤,那么您希望只通过测试集一次。为此,batch_size X steps= 测试集中的样本数。下面的代码将为您计算。值 bmax 是您根据上述讨论设置为最大允许 batch_size 的值。例如下面假设测试集中有 10,000 个样本。

length=10000 # number of samples in the test set
bmax=50 # maximum batch size limit to avoid resource exhaust error
test_batch_size=sorted([int(length/n) for n in range(1,length+1) if length % n ==0 and length/n<=bmax],reverse=True)[0]  
test_steps=int(length/test_batch_size)
print ( 'test batch size: ' ,test_batch_size, '  test steps: ', test_steps)

结果会是

test batch size:  50   test steps:  200

看起来像 the module you are using supports a "max_number_of_steps" flag, which could be used like like --max_number_of_steps=10000 as part of your command line statement. The module relies on tensorflow flags to take input from the command line. You can see all the supported flags here 有一些描述。

我在另一个答案中看到您找到了相关标志并将第二个参数 None 更改为另一个值。第二个参数是 the default value。更改它应该有效,但不是必需的,因为您也可以通过命令行传递该值。

tf.app.flags.DEFINE_integer('max_number_of_steps', None,
                                'The maximum number of training steps.')

理想的训练步数取决于你的数据和应用。判断是否需要训练更长时间的常用方法是测量模型在训练期间随时间的损失,并在损失不再大幅减少时停止训练。