tf.cond()函数的用法

 

这个函数跟if...else...的功能很像,主要控制tensorflow中计算图的张量的流向。官网中有对函数参数的解释如下:

tf.cond(
    pred,
    true_fn=None,
    false_fn=None,
    strict=False,
    name=None,
    fn1=None,
    fn2=None
)
  • pred: A scalar determining whether to return the result of true_fn or false_fn.
  • true_fn: The callable to be performed if pred is true.
  • false_fn: The callable to be performed if pred is false.
  • strict: A boolean that enables/disables 'strict' mode; see above.
  • name: Optional name prefix for the returned tensors.

看的有点糊涂,用一个例子来解释下吧 !

import tensorflow as tf
x=tf.constant(2)
y=tf.constant(5)
flag=tf.constant(True)
op=tf.cond(flag,lambda :tf.add(x,y),lambda : tf.multiply(x,y))
with tf.Session() as sess:
    result=sess.run(op)
    print(result)

当flag为True时,执行‘加’操作,结果为7,当flag为Flase时,执行“乘”操作,结果为10

 

尽管 `tf.contrib.layers.batch_norm` 曾经是一个广泛使用的批量标准化方法,但在 TensorFlow 2.x 版本中,`contrib` 模块已被移除。因此,在较新的版本中推荐使用其他替代方案来实现批处理规范化。 ### 使用 Keras 层中的 Batch Normalization 在 TensorFlow 2.x 中,Keras 已被完全集成到 TensorFlow 中,并提供了更简洁和功能强大的 API 来构建模型。可以使用 `tensorflow.keras.layers.BatchNormalization` 实现相同的功能: ```python import tensorflow as tf model = tf.keras.Sequential([ tf.keras.layers.Dense(64, activation='relu', input_shape=(input_dim,)), tf.keras.layers.BatchNormalization(), # 添加批量归一化层 tf.keras.layers.Dense(output_dim, activation='softmax') ]) ``` 上述代码展示了如何通过 Keras Sequential 模型添加批量归一化层[^2]。 ### 手动应用 Batch Normalization 如果需要手动控制批量归一化的操作过程,则可以通过以下方式实现: ```python def batch_norm_manual(x, is_training, decay=0.99, epsilon=1e-5): shape = x.get_shape().as_list() n_out = shape[-1] beta = tf.Variable(tf.zeros([n_out])) gamma = tf.Variable(tf.ones([n_out])) moving_mean = tf.Variable(tf.zeros([n_out]), trainable=False) moving_variance = tf.Variable(tf.ones([n_out]), trainable=False) def mean_var_with_update(): axes = list(range(len(shape) - 1)) batch_mean, batch_var = tf.nn.moments(x, axes) update_moving_mean = moving_averages.assign_moving_average(moving_mean, batch_mean, decay) update_moving_variance = moving_averages.assign_moving_average( moving_variance, batch_var, decay) with tf.control_dependencies([update_moving_mean, update_moving_variance]): return tf.identity(batch_mean), tf.identity(batch_var) mean, var = tf.cond(is_training, true_fn=mean_var_with_update, false_fn=lambda: (moving_mean, moving_variance)) normalized_x = tf.nn.batch_normalization(x, mean, var, beta, gamma, epsilon) return normalized_x ``` 此函数实现了类似于原生 `batch_norm` 的行为,允许用户自定义训练阶段的行为以及参数更新逻辑[^3]。 ### 总结 对于现代 TensorFlow 开发者来说,建议优先采用内置的 Keras 层级接口 (`BatchNormalization`) 进行快速开发;而对于高级需求或者定制化场景下,可以选择编写自己的批量归一化实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值