2

我是深度学习的新手,我正在尝试训练我的 SSD-300(单次检测器)模型,这需要太长时间。例如,即使我跑了 50 个 epoch,它也在训练 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 相关的具体数字

4

2 回答 2

1

看起来您正在使用的模块支持“max_number_of_steps”标志,可以像--max_number_of_steps=10000作为命令行语句的一部分一样使用。该模块依赖于tensorflow 标志从命令行获取输入。您可以在此处查看所有受支持的标志以及一些说明。

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

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

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

于 2021-10-19T01:49:19.633 回答
0

由于它没有设置您想要的值的参数,您必须进入源代码并找到为训练集设置批量大小和测试步骤的位置。用于训练批量大小和训练步骤的值(如果由您的模型类型和训练数据的大小决定)。例如,如果您要对图像进行分类并且图像形状为 (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
于 2021-10-17T17:56:07.883 回答