简体   繁体   English

尝试在Tensorflow中初始化神经网络,收到TypeError

[英]Trying to initialize neural network in Tensorflow, receiving TypeError

I am having troubles initializing my neural network properly in Tensorflow. 我在Tensorflow中正确初始化我的神经网络时遇到麻烦。

In my BayesianNN class, I have a build_graph function: 在我的BayesianNN类中,我有一个build_graph函数:

def build_graph():
 self._create_feedforward() 
 self._initializer()
 self._define_layers()
 self._regularization()

As of right now, my _create_feedforward() sets the framework for how I want my weights and biases initialized, as well as their output: 截至目前,我的_create_feedforward()设置了框架,用于我如何初始化权重和偏差以及它们的输出:

def _create_feedforward(self, input, output, scope):
    with tf.variable_scope(scope, reuse=tf.AUTO_REUSE) as scope:
        self.weights = tf.get_variable('weights',
                                       shape=(input.shape[1], output),
                                       initializer=tf.random_normal_initializer(0,0.01),
                                       dtype=tf.float32)
        self.biases = tf.get_variable('biases',
                                      shape=(output),
                                      initializer=tf.constant_initializer(0.0),
                                      dtype=tf.float32)

        activation = tf.matmul(input, self.weights) + self.biases

        return tf.matmul(tf.diag(self.Bern_prob.sample((input.shape[1],))), 
                                  activation) 

While my _define_layers function sets the input parameters for my network: 当我的_define_layers函数设置网络的输入参数时:

def _define_layers(self):
    layer_1_output = _create_feedforward(model_X, self.layer_1_dim, 'layer_1')
    layer_2_output = _create_feedforward(self.layer_1_dim, self.layer_2_dim, 'layer_2')
    layer_3_output = _create_feedforward(self.layer_2_dim, [1], 'layer_3')

Because _create_feedforward is called before _define_layers, I am receiving a typeError for not enough inputs. 因为_create_feedforward在_define_layers之前被调用,所以我收到的typeError的输入不足。 But I cant call _define_layers first because _create_feedforward has not been defined yet. 但是我不能先调用_define_layers,因为尚未定义_create_feedforward。

TypeError: _create_feedforward() missing 3 required positional arguments: 'input', 'output', and 'scope' TypeError:_create_feedforward()缺少3个必需的位置参数:“ input”,“ output”和“ scope”

I know why this error is happening, but how about do I implement this in code neatly and without errors? 我知道为什么会发生此错误,但是如何在代码中整洁且没有错误地实现此错误呢?

The issue here is that in _create_feedforward you have the argument self . 这里的问题是,在_create_feedforward您具有参数self However, when you call it in _define_layers , you don't call the function as part of a class. 但是,在_define_layers调用该函数时,不会将该函数作为类的一部分进行调用。 Try this: 尝试这个:

def _define_layers(self):
    layer_1_output = self._create_feedforward(model_X, self.layer_1_dim, 'layer_1')
    layer_2_output = self._create_feedforward(self.layer_1_dim, self.layer_2_dim,'layer_2')
    layer_3_output = self._create_feedforward(self.layer_2_dim, [1], 'layer_3')

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM