ValueError:变量mlp-fc / weights不存在,或者未使用tf.get_variable()创建

时间:2018-03-20 04:57:22

标签: python tensorflow neural-network

我使用TensorFlow实现了具有一个隐藏层的多层感知器(MLP),并在调用该函数时出现以下错误。任何帮助将不胜感激。

def MLP(x, option, dropout=1, prefix ='', num_outputs=1, reuse=None):
      weights = tf.random_uniform_initializer(-0.001, 0.001)
      biases = tf.constant_initializer(0.001, dtype=tf.float32)

      fc1 = tf.contrib.layers.fully_connected(tf.nn.dropout(x, keep_prob=dropout),
                       num_outputs=option.num_outputs, 
                       biases_initializer=biases,
                       weights_initializer = weights, 
                       activation_fn=tf.nn.relu, 
                       scope=prefix + 'fc', 
                       reuse=reuse)
      logits = tf.contrib.layers.linear(tf.nn.dropout(fc1, keep_prob=dropout),
                       num_outputs=num_outputs,
                       biases_initializer=biases,
                       weights_initializer = weights,
                       scope=prefix + 'l',
                       reuse=reuse)

return logits

logits = MLP(x, option, dropout=dp, prefix='mlp-', reuse=True)

ValueError:变量mlp-fc / weights不存在,或者未使用tf.get_variable()创建。你的意思是在VarScope中设置reuse = tf.AUTO_REUSE吗?

我尝试初始化权重并设置weights_initializer,但仍然遇到相同的错误。

1 个答案:

答案 0 :(得分:2)

错误是因为您正在尝试重复名为'mlp-fc / weights'的权重,这些权重不存在。

同样的错误也可能适用于 tf.contrib.layers.linear

重复使用,首先必须定义它们。

但是,如果您不想重复使用任何变量权重,只需从两种方法中删除 reuse = True tf.contrib.layers .fully_connected tf.contrib.layers.linear

修改

您可以使用类似于以下代码的内容。

with tf.variable_scope("mlp-fc"):
    #add a new variable to the graph
    var=tf.get_variable("weights",shape)

您可以按照本文的要求https://jasdeep06.github.io/posts/variable-sharing-in-tensorflow/了解有关重复使用的更多信息。

希望这有帮助。