如何将损失收敛到较低的值?(tensorflow)
How can I converge loss to a lower value?(tensorflow)
我使用了 tensorflow 对象检测 API。
这是我的环境。
所有图片均来自coco API
Tensorflow version : 1.13.1
Tensorboard version : 1.13.1
Number of test images : 3000
Number of train images : 24000
Pre-trained model : SSD mobilenet v2 quantized 300x300 coco
Number of detecting class : 1(person)
这是我的train_config。
train_config: {
batch_size: 6
optimizer {
adam_optimizer: {
learning_rate {
exponential_decay_learning_rate: {
initial_learning_rate:0.000035
decay_steps: 7
decay_factor: 0.98
}
}
}
}
fine_tune_checkpoint: "D:/TF/models/research/object_detection/ssd_mobilenet_v2_quantized_300x300_coco_2019_01_03/model.ckpt"
fine_tune_checkpoint_type: "detection"
num_steps: 200000
data_augmentation_options {
random_horizontal_flip {
}
}
data_augmentation_options {
ssd_random_crop {
}
}
}
我找不到优化的学习率、适当的衰减步骤和因子。
所以我做了很多训练,但是the result总是相似的。
我该如何解决这个问题??
我已经为这个问题花了一个星期..
另一方面post,有人建议给数据集(图像)添加噪声。
但是不知道是什么意思
我怎样才能做到这一点?
我认为另一个 post 上提到的是通过向训练数据集添加一些嘈杂的图像来进行一些数据扩充。这意味着您对输入应用一些随机转换,以便模型旨在更好地概括。
可以使用的一种噪声是随机高斯噪声 (https://en.wikipedia.org/wiki/Gaussian_noise),它由 object-detection API 中的补丁应用。
虽然看起来你有足够的训练图像,但值得一试。
噪音看起来像:
...
data_augmentation_options {
random_horizontal_flip {
}
}
data_augmentation_options {
ssd_random_crop {
}
}
data_augmentation_options {
randompatchgaussian {
// The patch size will be chosen to be in the range
// [min_patch_size, max_patch_size).
min_patch_size: 300;
max_patch_size: 300; //if you want the whole image to be noisy
}
}
...
您可以查看数据扩充列表:
https://github.com/tensorflow/models/blob/master/research/object_detection/protos/preprocessor.proto
关于学习率,一种常见的策略是尝试较大的学习率(例如 0.02)和一个非常小的学习率,因为您已经尝试过了。我会建议你尝试使用 0.02,保持一段时间或使用指数衰减学习率,看看结果是否更好。
更改 batch_size 也有一些好处,尝试 batch_size = 2 而不是 6。
我还建议您离开训练进行更多步骤,直到您看不到训练有任何改进,也许离开它直到您的配置中定义的 200000 步。
一些更深层次的策略可以帮助模型更好地执行,他们在这个答案中已经说过:
话虽如此,如果您的数据集制作正确,您应该会在测试集上获得良好的结果。
我使用了 tensorflow 对象检测 API。
这是我的环境。
所有图片均来自coco API
Tensorflow version : 1.13.1
Tensorboard version : 1.13.1
Number of test images : 3000
Number of train images : 24000
Pre-trained model : SSD mobilenet v2 quantized 300x300 coco
Number of detecting class : 1(person)
这是我的train_config。
train_config: {
batch_size: 6
optimizer {
adam_optimizer: {
learning_rate {
exponential_decay_learning_rate: {
initial_learning_rate:0.000035
decay_steps: 7
decay_factor: 0.98
}
}
}
}
fine_tune_checkpoint: "D:/TF/models/research/object_detection/ssd_mobilenet_v2_quantized_300x300_coco_2019_01_03/model.ckpt"
fine_tune_checkpoint_type: "detection"
num_steps: 200000
data_augmentation_options {
random_horizontal_flip {
}
}
data_augmentation_options {
ssd_random_crop {
}
}
}
我找不到优化的学习率、适当的衰减步骤和因子。
所以我做了很多训练,但是the result总是相似的。
我该如何解决这个问题??
我已经为这个问题花了一个星期..
另一方面post,有人建议给数据集(图像)添加噪声。
但是不知道是什么意思
我怎样才能做到这一点?
我认为另一个 post 上提到的是通过向训练数据集添加一些嘈杂的图像来进行一些数据扩充。这意味着您对输入应用一些随机转换,以便模型旨在更好地概括。 可以使用的一种噪声是随机高斯噪声 (https://en.wikipedia.org/wiki/Gaussian_noise),它由 object-detection API 中的补丁应用。 虽然看起来你有足够的训练图像,但值得一试。 噪音看起来像:
...
data_augmentation_options {
random_horizontal_flip {
}
}
data_augmentation_options {
ssd_random_crop {
}
}
data_augmentation_options {
randompatchgaussian {
// The patch size will be chosen to be in the range
// [min_patch_size, max_patch_size).
min_patch_size: 300;
max_patch_size: 300; //if you want the whole image to be noisy
}
}
...
您可以查看数据扩充列表: https://github.com/tensorflow/models/blob/master/research/object_detection/protos/preprocessor.proto
关于学习率,一种常见的策略是尝试较大的学习率(例如 0.02)和一个非常小的学习率,因为您已经尝试过了。我会建议你尝试使用 0.02,保持一段时间或使用指数衰减学习率,看看结果是否更好。
更改 batch_size 也有一些好处,尝试 batch_size = 2 而不是 6。
我还建议您离开训练进行更多步骤,直到您看不到训练有任何改进,也许离开它直到您的配置中定义的 200000 步。
一些更深层次的策略可以帮助模型更好地执行,他们在这个答案中已经说过:
话虽如此,如果您的数据集制作正确,您应该会在测试集上获得良好的结果。