怎么样在tensorflow中使用batch normalization( 二 )
■网友
之前也有和题主一样的疑问 找了好几个之后 暂时这个用的还好
def batch_norm_layer(x, train_phase, scope_bn): with tf.variable_scope(scope_bn): beta = tf.Variable(tf.constant(0.0, shape=]), name=\u0026#39;beta\u0026#39;, trainable=True) gamma = tf.Variable(tf.constant(1.0, shape=]), name=\u0026#39;gamma\u0026#39;, trainable=True) axises = np.arange(len(x.shape) - 1) batch_mean, batch_var = tf.nn.moments(x, axises, name=\u0026#39;moments\u0026#39;) ema = tf.train.ExponentialMovingAverage(decay=0.5) def mean_var_with_update(): ema_apply_op = ema.apply() with tf.control_dependencies(): return tf.identity(batch_mean), tf.identity(batch_var) mean, var = tf.cond(train_phase, mean_var_with_update, lambda: (ema.average(batch_mean), ema.average(batch_var))) normed = tf.nn.batch_normalization(x, mean, var, beta, gamma, 1e-3) return normed
■网友
使用slim.batch_norm(input,is_training=True)
还要加下面这几句话。
不知道说的对不对,如果有错误,请大家指正。
■网友
参考了前两位高票的回答, 这是我写的. 同时我用mnist作为数据集,和一个三层的全链接网络进行了对比实现. 发现自己实现的训练和测试的效果都很好,能达到0.98. 但是用tensorflow自带的两个常用的api ``tf.layers.batch_normalization``训练效果不错0.98,测试只有0.5左右. 如果我自己实现的不加 beta 和 gamma, 那么效果和官方 api 一致,测试也只有0.5. 但是看了原 paper,在测试阶段也是要考虑 beta 和 gamma的. 所以tf中的 api 有问题?
batch_norm.py def batch_norm_mine(self, inputs, is_training=True, epsilon=1e-8, decay = 0.9): with tf.variable_scope("batch-normalization"): pop_mean = tf.Variable(tf.zeros(]), trainable=False, name="pop-mean") # pop_var = tf.Variable(tf.ones(]), trainable=False, name="pop-var") def mean_and_var_update(): axes = list(range(len(inputs.get_shape()) - 1)) batch_mean, batch_var = tf.nn.moments(inputs, axes, name="moments") # with tf.control_dependencies(): return tf.identity(batch_mean), tf.identity(batch_var) mean, variance = tf.cond(is_training, mean_and_var_update, lambda:(pop_mean, pop_var)) beta = tf.Variable(initial_value=https://www.zhihu.com/api/v4/questions/53133249/tf.zeros(inputs.get_shape()), name="shift") gamma = tf.Variable(initial_value=https://www.zhihu.com/api/v4/questions/53133249/tf.ones(inputs.get_shape()), name="scale") return tf.nn.batch_normalization(inputs, mean, variance, beta, gamma, epsilon)
■网友
martin-gorner/tensorflow-mnist-tutorial, 这里有使用batch normalization的示例
■网友
slim中有slim.batch_norm函数可以直接调用,绝大部分层定义函数(比如slim.conv2d, slim.maxpool_2d)都有normalizer_fn这个参数,可以用arg_scope快速整理所有的这些层默认使用bn
推荐阅读
- 『先进』长江流域最先进洗舱站在宁投运 油可分离回收,水能循环使用
- 汽车|冬天怎样让车内温度快速升高?座椅加热的最佳使用方式二,外循环的作用总结
- 汽车|迈凯伦Artura不再使用迈凯伦祖传V8引擎了?
- dart这编程语言现在发展怎么样了,语法与Java,c#很相似,甚至更简洁
- 青年|一汽奔腾T77怎么样?车主吐槽:后排座椅太短,和坐小板凳似的
- python的html5lib这个库咋使用啊我在网上也没有找到相关文档
- 电商网站支付流程的流失率是怎么样的从用户点击充值/支付按钮,到支付完成,其中每一步的流失比率都是咋样的
- 作为一个服装供应商,怎么样与淘宝卖家沟通才能卖出自己的产品或者拿到订单
- 在丁丁租房工作的感受是怎么样的
- 城市数据团是怎么样一个团队
