tensorflow 之常见模块conv,bn...实现

       使用tensorflow时,会发现tf.nn,tf.layers, tf.contrib模块有不少功能是重复的,尤为是卷积操做,在使用的时候,咱们能够根据须要如今不一样的模块。但有些时候能够一块儿混用。python

        下面是对三个模块的简述:api

        (1)tf.nn :提供神经网络相关操做的支持,包括卷积操做(conv)、池化操做(pooling)、归一化、loss、分类操做、embedding、RNN、Evaluation。网络

        (2)tf.layers:主要提供的高层的神经网络,主要和卷积相关的,我的感受是对tf.nn的进一步封装,tf.nn会更底层一些。session

        (3)tf.contrib:tf.contrib.layers提供够将计算图中的  网络层、正则化、摘要操做、是构建计算图的高级操做,可是tf.contrib包含不稳定和实验代码,有可能之后API会改变。函数

Batch normalization(BN):

tensorflow中提供了三种BN方法:https://blog.csdn.net/Leo_Xu06/article/details/79054326测试

  • tf.nn.batch_normalization
  • tf.layers.batch_normalization
  • tf.contrib.layers.batch_norm

 以tf.layers.batch_normalization为例介绍里面所包含的主要参数:google

tf.layers.batch_normalization(inputs, decay=0.999, center=True, scale=True, is_training=True, epsilon=0.001)lua

通常使用只要定义如下的参数便可:spa

  • inputs: 输入张量[N, H, W, C].net

  • decay: 滑动平均的衰减系数,通常取接近1的值,这样能在验证和测试集上得到较好结果

  • center: 中心偏移量,上述的ββ ,为True,则自动添加,不然忽略

  • scale: 缩放系数,上述的γγ,为True,则自动添加,不然忽略

  • epsilon: 为防止除0而加的一个很小的数

  • is_training: 是不是训练过程,为True则表明是训练过程,那么将根据decay用指数滑动平均求得moments,并累加保存到moving_meanmoving_variance中。不然是测试过程,函数直接取这两个参数来用。

若是是True,则需在训练的session中添加将BN参数更新操做加入训练的代码:

# execute update_ops to update batch_norm weights

update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
with tf.control_dependencies(update_ops):
     optimizer = tf.train.AdamOptimizer(decayed_learning_rate)
     train_op = optimizer.minimize(loss, global_step = global_step)

附官网连接:

https://www.tensorflow.org/api_docs/python/tf/nn/batch_normalization

tf.contrib.layers.batch_norm | TensorFlow

tf.layers.batch_normalization | TensorFlow

相关文章
相关标签/搜索