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,(该层的一个标识,便于查找)
- batch_norm_params参数:
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层之后不能直接使用,还需要更新一下:
两种更新的方法:
-
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)
-
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)