这个问题部分被问到here和here没有后续行动,所以也许这不是提出这个问题的地方,但我已经找到了更多的信息我希望可以得到这些问题的答案。
我一直试图在我自己的大约1k张照片库上训练object_detection。我一直在使用提供的管道配置文件" ssd_inception_v2_pets.config"。 我相信,我已正确设置了培训数据。该计划似乎开始训练就好了。当它无法读取数据时,它会发出错误警告,我修复了这个问题。
我的train_config设置如下,但我已经更改了一些数字,以便尝试让它以更少的资源运行。
train_config: {
batch_size: 1000 #also tried 1, 10, and 100
optimizer {
rms_prop_optimizer: {
learning_rate: {
exponential_decay_learning_rate {
initial_learning_rate: 0.04 # also tried .004
decay_steps: 800 # also tried 800720. 80072
decay_factor: 0.95
}
}
momentum_optimizer_value: 0.9
decay: 0.9
epsilon: 1.0
}
}
fine_tune_checkpoint: "~/Downloads/ssd_inception_v2_coco_11_06_2017/model.ckpt" #using inception checkpoint
from_detection_checkpoint: true
data_augmentation_options {
random_horizontal_flip {
}
}
data_augmentation_options {
ssd_random_crop {
}
}
}
基本上,我认为正在发生的事情是计算机很快就会缺乏资源,我想知道是否有人进行了优化,需要更多时间来构建,但使用的资源更少?
或者我错了为什么这个过程会被杀死,有没有办法让我从内核那里获得更多相关信息?
这是我在杀死进程后得到的Dmesg信息。
[711708.975215] Out of memory: Kill process 22087 (python) score 517 or sacrifice child
[711708.975221] Killed process 22087 (python) total-vm:9086536kB, anon-rss:6114136kB, file-rss:24kB, shmem-rss:0kB
答案 0 :(得分:2)
我遇到了和你一样的问题。实际上,内存已完全使用是由data_augmentation_options ssd_random_crop
引起的,因此您可以删除此选项并将批量大小设置为8或更小,即2,4。当我将批量大小设置为1时,我也遇到了由于nan丢失导致的一些问题。
另一个问题是参数epsilon应该是一个非常小的数字,例如1e -6 根据"深度学习"书。因为epsilon用于避免零分母,但此处的默认值为1,我认为将其设置为1是正确的。
答案 1 :(得分:1)
好吧,所以在看了之后,尝试了一些事情,问题最终出现在我发布的Dmesg信息中。
培训占用了超过8 GB的内存,因此解决方案最终成为using Swap空间,以增加模型必须从中获取的内存量。
答案 2 :(得分:1)
这是一个问题many people face。有多种建议的解决方案:
我相信第三种解决方案对您来说是最好的,因为您的 CPU 内存(RAM)已用完。它不会减慢培训速度,也不会影响您的模型。
引用该问题,并附上我的意见:
新配置中的部分如下所示:
train_input_reader: { tf_record_input_reader { input_path: "PATH_TO_BE_CONFIGURED/pet_train.record" } label_map_path: "PATH_TO_BE_CONFIGURED/pet_label_map.pbtxt" queue_capacity: 500 # change this number min_after_dequeue: 250 # change this number (strictly less than the above) }
您也可以为eval_input_reader
设置这些内容。对于这个,我正在使用20, 10
而对于train
我使用400, 200
,虽然我认为我可以降低。我的训练需要不到8Gb的RAM。
答案 3 :(得分:0)
一段时间以来,我一直在遭受这个问题的困扰。我同意@Ciprian的一系列步骤。我跟踪了所有这些,结果发现我的情况类似于@Derek的情况。扩展交换空间解决了我的问题。
仅停留在此问题上的人员仅需注意几点,因为很难调试它在对象检测API中的发生,因为该过程可能由于多种原因而被终止。
观看-n 5个免费-m
nvidia-smi
答案 4 :(得分:0)
将配置文件中的批处理大小从32更改为8甚至2。这肯定有助于培训,并且不会终止该过程。