文章目录
-
- Session
- tf.global_variables_initializer()
- tf.local_variables_initializer()
- tf.layers.batch_normalization
- tf.ones_like
- tf.transpose
- tf.concat()
- tf.gather( )
- tf.nn.embedding_lookup
- tf.tile
- tf.reshape
- tf.linalg.LinearOperatorLowerTriangular
- tf.reduce_mean
- tf.summary.scalar()
- tf.equal(A, B)
- tf.cast
- tf.sequence_mask
- tf.where
- tf.nn.sigmoid_cross_entropy_with_logits
- self.opt.apply_gradients
- tf.clip_by_global_norm
- model.global_step.eval()
- Tensorflow中eval()
- tf.assign
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的作用
- 效果
该方法出自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。 - 计算
用大白话描述就是,计算出当前batch的每个channel的均值mean,计算出当前batch的每个channel的方差variance,令输入减去均值再除以标准差delta,得到normalized输出x-hat,最后乘以scale参数gamma,加上shift参数beta,得到最终变换后的输出y。 - 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进行变换。 - 在模型中的哪些位置插入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=</