[英]beta of wrong dimension in batch_normalization
I am trying to implement batch_normalization in a neural Network in Tensorflow.我正在尝试在 Tensorflow 的神经网络中实现 batch_normalization。 Initialization is done with variable_scope.初始化是用 variable_scope 完成的。 When I run my program, I get an error:当我运行我的程序时,我收到一个错误:
*** ValueError: Trying to share variable scope1/beta, but specified shape (100,) and found shape (100, 1). *** ValueError: 尝试共享变量 scope1/beta,但指定形状 (100,) 并找到形状 (100, 1)。
As I understand it, I must initialize the beta (and the other stored parameters) with a correct dimension.据我了解,我必须用正确的维度初始化 beta(和其他存储的参数)。 I believe that my dimension should be (100,1) as there are 100 hidden units in my first hidden layer.我相信我的维度应该是 (100,1),因为我的第一个隐藏层中有 100 个隐藏单元。 How can I specify the shape as to fit the expectations of my batch_normalization?如何指定形状以符合我的 batch_normalization 的期望?
Here is my code:这是我的代码:
Layers = [203,100,100,100,2]
def initialize_parameters(Layers,m):
params = {}
for i in range(len(Layers)):
if i > 0:
with tf.variable_scope("scope"+str(i), reuse=None) as sp:
beta = tf.get_variable("beta", [Layers[i],1], initializer=tf.constant_initializer(0.0))
gamma = tf.get_variable("gamma",[Layers[i],1], initializer=tf.constant_initializer(1.0))
moving_avg = tf.get_variable("moving_mean", [Layers[i],1], initializer=tf.constant_initializer(0.0),trainable=False)
moving_var = tf.get_variable("moving_variance", [Layers[i],1], initializer=tf.constant_initializer(1.0),trainable=False)
lastUnits = Layers[i]
sp.reuse_variables()
return params
def forward_propagation(X, Layers, parameters, keep_prob):
for i in range(len(Layers)):
...
Z_BN = tf.contrib.layers.batch_norm(Z,is_training=True,updates_collections=ops.GraphKeys.UPDATE_OPS,scope="scope"+str(i), reuse=True)
...
return Z_BN
The solution was to just give one number as shape:解决方案是只给出一个数字作为形状:
beta = tf.get_variable("beta", shape=Layers[i], initializer=tf.constant_initializer(0.0))
gamma = tf.get_variable("gamma", shape=Layers[i], initializer=tf.constant_initializer(1.0))
moving_avg = tf.get_variable("moving_mean", shape=Layers[i], initializer=tf.constant_initializer(0.0),trainable=False)
moving_var = tf.get_variable("moving_variance", shape=Layers[i], initializer=tf.constant_initializer(1.0),trainable=False)
Hope, this helps.希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.