TensorFlow API Slim:如何设置vgg-net 16的checkpoint_exclude_scopes



我当前正在尝试使用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,如您的脚本中所述的一些更改,如下所述:

  1. 将Train_dir,Dataset_dir和Checkpoint_path更改为我的本地路径
  2. 由于我在CPU上运行,因此将--clone_on_cpu=True参数添加到命令
  3. 删除了参数 dataset_name=my_dataset,因为它为我扔了错误

它运行正常。损失始于高达448,然后慢慢减少,到第1000步的结束时,它降低到3.5。它确实波动了很大,但损失的趋势是下降的。不知道为什么在尝试运行时看不到相同的东西。

关于您在训练和oppute_node_names时在checkpoint_exclude_scopes上的问题时,我认为您选择的层绝对可以。但是,我宁愿仅训练最后一个完全连接的层(FC8)以更快地收敛。

最新更新