tensorflow-slim

slim库是tensorflow轻量级的库,用起来很方便

slim=tf.contrib.slim

slim.arg_scope()

为tensorflow常用的的layer函数提供默认值.

1、函数可以为多个,可以用list来同时定义多个函数的默认参数(前提是这些函数都有这些参数)

2、它可以嵌套使用

但使用的函数要满足以下条件:

被装饰器@add_arg_scope装饰,

e.g.slim.conv2d( ),slim.fully_connected( ),slim.max_pool2d( )

参考博客:https://blog.csdn.net/weixin_35653315/article/details/78160886;博客里还通过源码分析了工作原理,with语句可以嵌套,所以scope的值用栈这种数据来实现。

with slim.arg_scope(
        [layers.conv2d], 
        padding='SAME',         
        initializer= xavier_initializer(),
        regularizer= l2_regularizer(0.05)):  
    net = slim.conv2d(net, 256, [5, 5])
 

slim.utils.convert_collection_to_dict()

集合转换为字典,{节点名:输出张量值}

  with tf.variable_scope(scope, 'convolutional_alexnet', [inputs], reuse=reuse) as sc:
    end_points_collection = sc.name + '_end_points'
    with slim.arg_scope([slim.conv2d, slim.max_pool2d],
                        outputs_collections=end_points_collection):
     .....#网络结构
      #Convert end_points_collection into a dictionary of end_points.
      end_points = slim.utils.convert_collection_to_dict(end_points_collection)
      return net, end_points

除了网络最后的输出外,还返回了{节点名:输出张量值}的一个字典

slim.utils.collect_named_outputs(outputs_collections,sc.name,net)

在查看源码的时候,我发现layers的几个函数最终不是直接返回output,而是return 这个函数。

该函数定义:

if collections:
    append_tensor_alias(outputs,alias)
    ops.add_to_collections(collections,outputs)
return outputs

把这个tensor的输出值收集到collections中去,然后再返回输出值

tensorboard

可视化是由tensorboard和tf.summary共同实现的

summary_writer = tf.summary.FileWriter(train_dir, g)#可视化图

tf.summary.scalar("loss", loss)#可视化参数

summary_op = tf.summary.merge_all()#汇总所有的tf.summary,整理所有的日志生成操作

if step % 100 == 0:        #每100次更新一下tf.summary里的值
summary_str = sess.run(summary_op)
summary_writer.add_summary(summary_str, step)

注意:还可以添加:tf.summary.histogram,tf.summary.image

运行代码后,另起一个命令行运行:tensorboard --logdir train_dir

TensorBoard 1.9.0 at http://DESKTOP-VHRP9S3:6006(用浏览器打开)

小结:

TensorBoard的使用流程链接:https://www.jianshu.com/p/2f1bc36c08e0

  1. 添加记录节点:tf.summary.scalar/image/histogram()
  2. 汇总记录节点:merged = tf.summary.merge_all()
  3. 运行汇总节点:summary = sess.run(merged),得到汇总结果
  4. 日志书写器实例化:summary_writer = tf.summary.FileWriter(logdir, graph=sess.graph),实例化的同时传入 graph 将当前计算图写入日志
  5. 调用日志书写器实例对象summary_writeradd_summary(summary, global_step=i)方法将所有汇总日志写入文件
  6. 调用日志书写器实例对象summary_writerclose()方法写入内存,否则它每隔120s写入一次
  7. 如果显示不出来,可以尝试下file_writer.flush()7、如果显示不出来,可以尝试下file_writer.flush()

 

从头开始训练,或者接着上一次的结果继续训

    model_path = tf.train.latest_checkpoint(train_config['train_dir'])

    if not model_path:
      sess.run(tf.global_variables_initializer())
      sess.run(tf.local_variables_initializer())
      start_step = 0

      if model_config['embed_config']['embedding_checkpoint_file']:
        model.init_fn(sess)
    else:
      logging.info('Restore from last checkpoint: {}'.format(model_path))
      sess.run(tf.local_variables_initializer())
      saver.restore(sess, model_path)
      start_step = tf.train.global_step(sess, model.global_step.name) + 1

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值