【问题标题】:Reduce Training steps for SSD-300减少 SSD-300 的训练步骤
【发布时间】:2021-10-17 16:53:10
【问题描述】:

我是深度学习的新手,我正在尝试训练我的 SSD-300(单次检测器)模型,这需要很长时间。例如,即使我跑了 50 个 epoch,它也在训练 108370+ 全局步骤。我正在使用来自官方 github repo 的默认 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 相关的具体数字

【问题讨论】:

    标签: python tensorflow object-detection single-shot-detector


    【解决方案1】:

    看起来the module you are using 支持“max_number_of_steps”标志,可以像--max_number_of_steps=10000 一样用作命令行语句的一部分。该模块依赖tensorflow flags 从命令行获取输入。您可以看到所有受支持的标志here 以及一些说明。

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

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

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

    【讨论】:

    • 另外,时代呢?该文件本身没有一个名为“epoch”的参数,模型直接以“训练步骤”开始训练,并在每一步提供损失。对于 YOLOv5 等其他模型,它基于 epochs 工作。所以我写参数 epoch=50 真的有效吗?因为我宁愿得到训练步骤
    • 我怀疑在命令行中包含 epoch=5 并没有做任何事情,因为没有支持它的标志。看起来一个 epoch 被定义为一次遍历所有训练数据,所以如果你有 100 张图像并且在训练期间迭代这些图像,那么在 100 步之后,它将被视为 1 个 epoch。如果您想指定 epochs,那么您可以将您想要的 epochs 数和训练记录数转换为 max_step 计数。
    【解决方案2】:

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

    【讨论】:

    • 嘿!因此,如果您检查 github 存储库中提到的培训,则没有 model.fit。这段代码设置为“无”,但我在其中添加了步骤,不确定是否正确: tf.app.flags.DEFINE_integer('train_image_size', None, 'Train image size') tf.app.flags .DEFINE_integer('max_number_of_steps', 30000, '最大训练步数')
    猜你喜欢
    • 1970-01-01
    • 2020-03-26
    • 2018-04-16
    • 2020-03-18
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    相关资源
    最近更新 更多