我正在尝试在Tensorflow的神经网络中实现batch_normalization。初始化是用variable_scope完成的。当我运行我的程序时,我会得到一个错误:
* ValueError:尝试共享变量范围1/beta,但指定的形状(100)和找到的形状(100,1)。
据我所知,我必须用正确的维度初始化beta (和其他存储的参数)。我相信我的维度应该是( 100 ,1),因为在我的第一个隐藏层中有100个隐藏单位。我如何指定形状以满足我的batch_normalization的期望?
这是我的代码:
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发布于 2019-12-16 08:10:58
解决办法是只给出一个数字作为形状:
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) 希望这个能帮上忙。
https://stackoverflow.com/questions/59267257
复制相似问题