我当前正在尝试使用TensorFlow API(https://github.com/tensorflow/models)训练分类网络。为我的数据集创建tfrecords(存储在研究/纤细/数据中)之后,我使用以下命令训练网络:
python research/slim/train_image_classifier.py
--train_dir=research/slim/training/current_model
--dataset_name=my_dataset
--dataset_split_name=train
--dataset_dir=research/slim/data
--model_name=vgg_16
--checkpoint_path=research/slim/training/vgg_16_2016_08_28/vgg_16.ckpt
--checkpoint_exclude_scopes=vgg_16/fc7,vgg_16/fc8
--trainable_scopes=vgg_16/fc7,vgg_16/fc8
--batch_size=5
--log_every_n_steps=10
--max_number_of_steps=1000
这对于多个分类网络(Inception,Resnet,Mobilenet)非常有效,但对VGG-NET不利。我微调vgg-net 16的模型:http://download.tensorflow.org/models/vgg_16_2016_08_28.tar.gz
通常,它可以训练该模型,但是当我训练网络时,损失会增加而不是减少。也许是由于我选择的" checkpoint_exclude_scopes"。
是正确的,将最后一个完全连接的图层用作checkpoint_exclude_scopes?
通过冻结图形,对于参数" output_node_names"而发生同样的问题。对于inceptionv3,例如,它可以与'output_node_names = inceptionv3/prectiveions/reshape_1'一起使用。但是如何为VGG-NET设置此参数。我尝试了以下内容:
python research/slim/freeze_graph.py
--input_graph=research/slim/training/current_model/graph.pb
--input_checkpoint=research/slim/training/current_model/model.ckpt
--input_binary=true
--output_graph=research/slim/training/current_model/frozen_inference_graph.pb
--output_node_names=vgg_16/fc8
我在VGG-NET模型中没有找到任何包含"预测"或" logits"的图层,所以我不确定。
感谢您的帮助!
我尝试运行train_image_classifier.py,如您的脚本中所述的一些更改,如下所述:
- 将Train_dir,Dataset_dir和Checkpoint_path更改为我的本地路径
- 由于我在CPU上运行,因此将
--clone_on_cpu=True
参数添加到命令 - 删除了参数
dataset_name=my_dataset
,因为它为我扔了错误
它运行正常。损失始于高达448,然后慢慢减少,到第1000步的结束时,它降低到3.5。它确实波动了很大,但损失的趋势是下降的。不知道为什么在尝试运行时看不到相同的东西。
关于您在训练和oppute_node_names时在checkpoint_exclude_scopes上的问题时,我认为您选择的层绝对可以。但是,我宁愿仅训练最后一个完全连接的层(FC8)以更快地收敛。