【问题标题】:beta of wrong dimension in batch_normalizationbatch_normalization 中尺寸错误的 beta
【发布时间】:2019-12-10 12:29:09
【问题描述】:

我正在尝试在 Tensorflow 的神经网络中实现 batch_normalization。 使用 variable_scope 完成初始化。当我运行我的程序时,我得到一个错误:

*** ValueError: Trying to share variable scope1/beta, but specified shape (100,) and found shape (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

【问题讨论】:

    标签: python tensorflow scope neural-network


    【解决方案1】:

    解决方案是只给出一个数字作为形状:

        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)                
    

    希望,这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-13
      • 2019-05-25
      • 2018-06-12
      相关资源
      最近更新 更多