如何手动初始化权重值?

时间:2016-04-14 11:29:37

标签: python-2.7 neural-network tensorflow

我想在他的讲义中试验Karpathy推荐的权重初始化,

  

推荐的启发式方法是初始化每个神经元的权重向量   as:w = np.random.randn(n)/ sqrt(n),其中n是其数量   输入

来源:http://cs231n.github.io/neural-networks-2/#init

我是python的初学者,我不知道如何实现这个:/

weights = tf.Variable(??)

请帮帮忙? ...

3 个答案:

答案 0 :(得分:2)

对于单个值,请使用:

weights = tf.Variable(10)

对于具有随机值的矢量:

shape = [784, 625]
weights = tf.Variable(tf.random_normal(shape, stddev=0.01)/tf.sqrt(n))

请注意,您需要sess.run来评估变量。

另外,请查看其他随机张量:https://www.tensorflow.org/versions/r0.8/api_docs/python/constant_op.html#random-tensors

答案 1 :(得分:0)

n = 10
init_x = np.random.randn(n)
x = tf.Variable(init_x)
sess = tf.InteractiveSession()
sess.run(tf.initialize_all_variables())
print(sess.run(x))

答案 2 :(得分:0)

我是按照以下方式做的:

    self.w_full, self.b_full = [], []

    n_fc_layers = len(structure)
    structure.insert(0, self.n_inputs)

    with vs.variable_scope(self.scope):
        for lr_idx in range(n_fc_layers):
            n_in, n_out = structure[lr_idx], structure[lr_idx+1]
            self.w_full.append(
                vs.get_variable(
                   "FullWeights{}".format(lr_idx),
                    [n_in, n_out],
                    dtype=tf.float32,
                    initializer=tf.random_uniform_initializer(
                        minval=-tf.sqrt(tf.constant(6.0)/(n_in + n_out)),
                        maxval=tf.sqrt(tf.constant(6.0)/(n_in + n_out))
                    )
                )
            )

            self.b_full.append(
                vs.get_variable(
                    "FullBiases{}".format(lr_idx),
                    [n_out],
                    dtype=tf.float32,
                    initializer=tf.constant_initializer(0.0)
                )
            )

structure.insert(0, self.n_inputs)

你将[n_inputs,第1个FC层大小,第2个FC层大小...输出层大小]