Tensorflow入门1-2

TF-slim不算比较高层的tensorflow的封装。

slim.arg_scope函数实现参数共享

定义参数的作用域来对多个卷积层的共同参数进行定义

arg_scope(list_ops_or_scope,**kwargs)

  • list_ops_or_scope:操作列表或作用域列表
  • kwargs:参数,以keyword=value方式显示

示例:

net = slim.conv2d(inputs,64,[11,11],4,

        padding='SAME',

        weights_initialier=

        tf.truncated_normal_initializer(stddev=0.01),

        weights_regularizer=

        slim.12_regulariazer(0.0005),scope='conv1')

上述代码的padding、weights_initializer可以在定义多个卷积层是使用相同的参数,因此我们可以使用函数arg_scope()如下

with slim.arg_scope([slim.conv2d],padding='SAME',

                                weights_initializer=

                                tf.truncated_normal_initializer(stddev=0.01)

                                weights_regularizer=

                                slim.12_regularizer(0.0005)):

        net = slim.conv2d(inputs,64,[11,11],scope='conv1')

        net = slim.conv2d(net,128,[11,11],padding='VALID',scope='conv2')

        net = slim.conv2d(net.256,[11,11],scope='conv3')

 BatchNorm层使用技巧

slim.batch_norm()函数:

  • normalizer_fn = slim.batch_norm ;表示改成会进行批量归一;如果参数=None,则表示该层并不适用BatchNorm
  • normalizer_params=batch_norm_params:
    • batch_norm_params参数:
      • 'is_training':True,(在测试时该参数设置为False)
      • 'zero_debias_moving_mean':True
      • 'decay':batch_norm_epsilon,
      • 'epsilon':batch_norm_scale,
      • 'scale':batch_norm_scale,
      • 'updates_collections':tf.GraphKeys.UPDATE_OPS,(该层的一个标识,便于查找)
with slim.arg_scope(
    [slim.conv2d],
    weights_regularizer=slim.12_regularizer(weight_decay),
    weights_initializer=slim.variance_scaling_initializer(),
    activation_fn=tf.nn.relu,
    normalizer_fn=slim.batch_norm,
    normalizer_params=batch_norm_params):
        with slim.arg_scope([slim.batch_norm], **batch_norm_params):
            with slim.arg_scope([slim.max_pool2d],padding='SAME') as arh_sc:
                return arg_sc

在定义了batchNorm层之后不能直接使用,还需要更新一下:

两种更新的方法:

  1. update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
    with tf.control_dependencies(update_ops):
        train_step = tf.train
        GradientDescentOptimizer(0.01)
        minimize(total_loss)
  2.  
    batchnorm_updates = tf.get_collection(UPDATE_OPS_COLLECTION)
    batchnorm_updates_op = tf.group(*batchnorm_updates)

 slim 学习率

常用的学习率的函数,一般对学习率的要求是开始的时候大,有利于网络的收敛,到结尾的时候小,有利于稳定

  • tf.train.piecewise_constant        分段常数衰减
  • tf.train.inverse_time_decay         反时限衰减
  • tf.train.polynomial_decay            多项式衰减
  • tf.train.exponential_decay        指数衰减

slim learn之优化器

  • tf.train.Optimizer
  • tf.train.GradientDescentOptimizer
  • tf.train.MomentumOptimizer
  • tf.train.AdamOptimizer
  • tf.train.RMSPropOptimizer
  • 等等

slim metrics

  • TF-Slim提供了一系列度量操作,是评估模型变得简单
    • value_op是一个幂等操作,返回度量的当前值
    • update_op是执行上述聚合步骤以及返回度量值的操作
mae_value_op,mae_update_op = 
    slim.metrics.streaming_mean_absolute_error(
        predictions,labels
        )

slim evaluation

  • TF-Slim提供了一个评估模块(evaluation.py),其中包含用于使用metric_ops.py模块中的指标编写模型评估脚本的帮助函数:
    • evaluation_loop
    • evaluation_once
slim.evaluation.evaluation_loop(
    'local',
    checkpoint_dir,
    log_dir,
    num_evals=num_batches,
    eval_op=names_to_updates.values(),
    summary_op=tf.summary.merge(summary_ops),
    eval_interval_secs=eval_interval_secs)

 TensorFlow常见数据增强方法

  • tf.image库进行数据增强
    • 颜色扰动(亮度、对比度、HSV、RGB等)
    • 裁剪/Pad
    • 噪声/模糊
    • 翻转/旋转(空间几何变换/放射变换)
    • Draw Boxes
    • 标准化
  • 其他数据增强的方法
    • Mixup
    • Oversampling
    • 锐化/浮雕/灰度
    • 边界检测
    • 超像素
    • 255-V
#img_data = tf.image.rgb_to_grayscale(img_data)
'''图像亮度[-1,1]'''
# img_data = tf.image.adjust_brightness(img_data,delta=-.7)
"""随机图像亮度"""
#img_data = tf.image.random_bringtness(img_data,max_delta=0.6)
'''随机对比度'''
# img_data = tf.image.random_contrast(img_data,lower=0,upper=4)
'''随机色调'''
# img_data = tf.image.random_hue(img_data,0.5)
'''随机饱和度'''
# img_data = tf.image.random_saturation(img_data,lower=0,upper=2)

'''图片标准化  (x-mean)/max(stddev,1.0/sqrt(image.NumElements())) '''
# img_data = tf.image.per_image_standardization(img_data)

 Tensorboard使用介绍

  • Tensorflow可以进行网络可视化/训练中间结果可视化
    • pip3 install tensorboard
    • tensorboard --logdir logs
      • Scalars/Graph/Image/Histogram/Distributions
  • Tensorflow与summary配合使用
writer = tf.summary.FileWriter("logs/",sess.graph)
tf.summary.histogram('bias',bias)
tf.summary.scaler('loss',loss)
tf.summary.image('image',image)
    merged = tf.summary.merge_all()
    rs = sess.run(merged)
    writer.add_summary(rs,step)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杰杰批

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值