美文网首页
使用slim从ckpt里导出指定层的参数

使用slim从ckpt里导出指定层的参数

作者: yalesaleng | 来源:发表于2018-07-16 16:54 被阅读395次

利用函数slim.assgin_from_checkpoint

相关文档:https://github.com/tensorflow/tensorflow/blob/129665119ea60640f7ed921f36db9b5c23455224/tensorflow/contrib/slim/python/slim/learning.py

相应的关于如何从一个ckpt文件里导出模型的部分参数用于fine_tuning:

*************************************************
* Fine-Tuning Part of a model from a checkpoint *
*************************************************
Rather than initializing all of the weights of a given model, we sometimes
only want to restore some of the weights from a checkpoint. To do this, one
need only filter those variables to initialize as follows:
  ...
  # Create the train_op
  train_op = slim.learning.create_train_op(total_loss, optimizer)
  checkpoint_path = '/path/to/old_model_checkpoint'
  # Specify the variables to restore via a list of inclusion or exclusion
  # patterns:
  variables_to_restore = slim.get_variables_to_restore(
      include=["conv"], exclude=["fc8", "fc9])
  # or
  variables_to_restore = slim.get_variables_to_restore(exclude=["conv"])
  init_assign_op, init_feed_dict = slim.assign_from_checkpoint(
      checkpoint_path, variables_to_restore)
  # Create an initial assignment function.
  def InitAssignFn(sess):
      sess.run(init_assign_op, init_feed_dict)
  # Run training.
  slim.learning.train(train_op, my_log_dir, init_fn=InitAssignFn)

Update:

使用如下代码:

import tensorflow as tf
import tensorflow.contrib.slim as slim
import tensorflow.contrib.slim.nets as nets

images = tf.placeholder(tf.float32, [None, 224, 224, 3])
predictions = nets.vgg.vgg_16(images)
print [v.name for v in slim.get_variables_to_restore(exclude=['fc8']) ]

得到输出:

[u'vgg_16/conv1/conv1_1/weights:0',
 u'vgg_16/conv1/conv1_1/biases:0',
 …
 u'vgg_16/fc6/weights:0',
 u'vgg_16/fc6/biases:0',
 u'vgg_16/fc7/weights:0',
 u'vgg_16/fc7/biases:0',
 u'vgg_16/fc8/weights:0',
 u'vgg_16/fc8/biases:0']

如果你不想导出某个层的参数,

print [v.name for v in slim.get_variables_to_restore(exclude=['vgg_16/fc8']) ]

得到输出:

[u'vgg_16/conv1/conv1_1/weights:0',
 u'vgg_16/conv1/conv1_1/biases:0',
 …
 u'vgg_16/fc6/weights:0',
 u'vgg_16/fc6/biases:0',
 u'vgg_16/fc7/weights:0',
 u'vgg_16/fc7/biases:0']

update2:

一个完整的只取部分参数的例子:

import tensorflow as tf
import tensorflow.contrib.slim as slim
import tensorflow.contrib.slim.nets as nets

s = tf.Session(config=tf.ConfigProto(gpu_options={'allow_growth':True}))

images = tf.placeholder(tf.float32, [None, 224, 224, 3])
predictions = nets.vgg.vgg_16(images, 200)
variables_to_restore = slim.get_variables_to_restore(exclude=['vgg_16/fc8'])
init_assign_op, init_feed_dict = slim.assign_from_checkpoint('./vgg16.ckpt', variables_to_restore)
s.run(init_assign_op, init_feed_dict)

以上是从官方提供的slim vgg16在imagenet上训练得到的model中导出部分参数code

相关文章

  • 使用slim从ckpt里导出指定层的参数

    利用函数slim.assgin_from_checkpoint 相关文档:https://github.com/t...

  • Oracle数据泵专题

    使用参数文件进行expdp导出 使用参数文件字符无需转义,执行语句较为方便 创建导出目录 注意,这个OS层的路径需...

  • mysql导入导出

    一、导出 1. 导出所有数据库 2. 导出指定数据库 3. 导出指定表 4. 导出部分记录 5. 参数:不带cre...

  • Tensorflow slim库使用小记

    转自Tensorflow slim库使用小记 看fensorflow的书发现使用的是slim库,那就要研究slim...

  • python学习(8)

    关键参数 可以使用关键参数指定函数中的某个函数,例如: 程序: 运行: 可以直接指定参数赋予哪个参数,而不用管参数...

  • argparse的使用记录

    使用 针对必选参数无需指定具体的名称,按照顺序就行,可选参数需要 指定,例如: -o ./build/Ipa

  • Linux shell命令帮助格式

    转载 原生参数 说明文档里的字符即为命令需要使用的字符git reset这种参数在使用时必需指定,且和说明文档里的...

  • (一)Tensorflow的ckpt转pb文件及Netron工具

    目录 1、读取ckpt文件2、获取网络中所有的层的相关信息3、ckpt转换为pb4、pb文件的读取与测试5、Net...

  • 微信小程序生成海报

    //把当前画布指定区域的内容导出生成指定大小的图片。在 draw() 回调里调用该方法才能保证图片导出成功。 ...

  • ffmpeg命令参数解释

    使用-ss参数 作用(time_off set the start time offset),可以从指定时间点开始...

网友评论

      本文标题:使用slim从ckpt里导出指定层的参数

      本文链接:https://www.haomeiwen.com/subject/bsvbpftx.html