tensorflow

Session

Session 是 Tensorflow 为了控制,和输出文件的执行的语句. 运行 session.run() 可以获得你要得知的运算结果, 或者是你所要运算的部分.

import tensorflow as tf
 
# create two matrixes
 
matrix1 = tf.constant([[3,3]])
matrix2 = tf.constant([[2],
                       [2]])
product = tf.matmul(matrix1,matrix2)

因为 product 不是直接计算的步骤, 所以我们会要使用 Session 来激活 product 并得到计算结果. 有两种形式使用会话控制 Session 。

  • 方法一
sess = tf.Session()
result = sess.run(product)
print(result)
sess.close()
  • 方法二
with tf.Session() as sess: 
result2 = sess.run(product) 
print(result2)

参考:
快速理解tf.Session()

tf.global_variables_initializer()

必须要使用global_variables_initializer的场合:含有tf.Variable的环境下,因为tf中建立的变量是没有初始化的,也就是在debug时还不是一个tensor量,而是一个Variable变量类型

size_out = 10
tensor = tf.Variable(tf.random_normal(shape=[size_out]))
init = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)  # initialization variables
    print(sess.run(tensor))

可以不适用初始化的场合:不含有tf.Variable、tf.get_Variable的环境下,比如只有tf.random_normal或tf.constant等
参考:
tf.global_variables_initializer()什么时候用?

tf.local_variables_initializer()

返回一个初始化所有局部变量的操作(Op)。初始化局部变量(GraphKeys.LOCAL_VARIABLE)。GraphKeys.LOCAL_VARIABLE中的变量指的是被添加入图中,但是未被储存的变量。


sess.run(tf.local_variables_initializer(),
feed_dict={
   
         learning_rate_dis: learning_rate_val_dis,
         adam_beta1_d_tf: adam_beta1_d,
         learning_rate_proj: learning_rate_val_proj,
         lambda_ratio_tf: lambda_ratio,
         lambda_l2_tf: lambda_l2,
         lambda_latent_tf: lambda_latent,
         lambda_img_tf: lambda_img,
         lambda_de_tf: lambda_de,
         adam_beta1_g_tf: adam_beta1_g,
         })
# learning_rate_dis为设置的变量,learning_rate_val_dis为我设置的具体的值。后续同理
————————————————
版权声明:本文为CSDN博主「Wanderer001」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_36670529/article/details/103930639

tf.layers.batch_normalization

Batch Normalization的作用

  1. 效果
    该方法出自Sergey Ioffe和Christian Szegedy的《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》一文,BN方法到底能否减少Internal Covariate Shift可能还无法下最终结论 (参见《How Does Batch Normalization Help Optimization?》),但的确可以加速训练平稳收敛! 所以,BatchNorm成为了居家旅行、训练模型之必备layer。
  2. 计算

    用大白话描述就是,计算出当前batch的每个channel的均值mean,计算出当前batch的每个channel的方差variance,令输入减去均值再除以标准差delta,得到normalized输出x-hat,最后乘以scale参数gamma,加上shift参数beta,得到最终变换后的输出y。
  3. BN层在train与inference时的差别
    在训练时,我们可以计算出batch的均值和方差,迭代训练过程中,均值和方差一直在发生变化。但是在推理时,均值和方差是固定的,它们在训练过程中就被确定下来。《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》中给出的确定方式和TensorFlow中存在不同,这里我们介绍TensorFlow中的方式, 即采用滑动平均MovingAverage的方法,公式为: moving_average_value * momentum + value * (1 - momentum), 其中value为当前batch的平均值或方差,moving_average_value为滑动均值或滑动方差。
    最终,模型训练完毕后,在推理时使用滑动平均值moving_mean和滑动方差moving_variance对feature maps进行变换。
  4. 在模型中的哪些位置插入BN层
    推荐在Conv层或FC层之后,非线性变换激活层之前插入BN层。
tf.layers.batch_normalization(
    inputs,
    axis=-1,
    momentum=0.99,
    epsilon=0.001,
    center=True,
    scale=True,
    beta_initializer=tf.zeros_initializer(),
    gamma_initializer=tf.ones_initializer(),
    moving_mean_initializer=tf.zeros_initializer(),
    moving_variance_initializer=tf.ones_initializer(),
    beta_regularizer=None,
    gamma_regularizer=None,
    beta_constraint=None,
    gamma_constraint=</
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值