【发布时间】:2018-03-20 05:54:08
【问题描述】:
伙计们。
如果要在Tensorflow中实现Batch normalization,应该是下面的程序。
def batchnorm_forward(X, gamma, beta):
mu = np.mean(X, axis=0)
var = np.var(X, axis=0)
X_norm = (X - mu) / np.sqrt(var + 1e-8)
out = gamma * X_norm + beta
cache = (X, X_norm, mu, var, gamma, beta)
return out, cache, mu, var
此时,
为了只在推理阶段进行推理,它应该如下保存变量(均值、方差)。
# BatchNorm training forward propagation
h2, bn2_cache, mu, var = batchnorm_forward(h2, gamma2, beta2)
bn_params['bn2_mean'] = .9 * bn_params['bn2_mean'] + .1 * mu
bn_params['bn2_var'] = .9 * bn_params['bn2_var'] + .1 * var
仅在此推理阶段,它使用以下程序。
# BatchNorm inference forward propagation
h2 = (h2 - bn_params['bn2_mean']) / np.sqrt(bn_params['bn2_var'] + 1e-8)
h2 = gamma2 * h2 + beta2
在Tensorflow中,如何获取“bn_params['bn2_mean']”和“bn_params['bn2_var']”的变量(原始值)?
with tf.name_scope('fc1'):
w1 = weight_variable([7 * 7 * 16, 32])
h1 = tf.matmul(pool_flat2, w1)
fc1_bn = tf.contrib.layers.batch_norm(inputs = h1, is_training = phase_train)
fc1_bn_relu = tf.nn.relu(fc1_bn)
...
...
...
...
# ????? how to get variables ?????
# Image in my head
mean, var = fc1_bn.eval()
帮帮我:
【问题讨论】:
标签: tensorflow batch-normalization