【问题标题】:Tensorflow first layer neuron's weights don't changeTensorflow 第一层神经元的权重不变
【发布时间】:2016-05-28 05:27:45
【问题描述】:

如果我的第一层神经元的权重不改变可以吗?

我在 Tensorflow 上的 MNIST 网络上,我尝试在“推理”功能中获得神经元的权重:

def inference(images, hidden1_units, hidden2_units):

    weights = []

    # Hidden 1
    with tf.name_scope('hidden1'):
        weights.append(tf.Variable( tf.truncated_normal([IMAGE_PIXELS, hidden1_units], stddev=1.0 / math.sqrt(float(IMAGE_PIXELS)))))
        biases = tf.Variable(tf.zeros([hidden1_units]))
        hidden1 = tf.nn.relu(tf.matmul(images, weights[0]) + biases)

    # Hidden 2
    with tf.name_scope('hidden2'):
        weights.append(tf.Variable(tf.truncated_normal([hidden1_units, hidden2_units],stddev=1.0 / math.sqrt(float(hidden1_units)))))
        biases = tf.Variable(tf.zeros([hidden2_units]))
        hidden2 = tf.nn.relu(tf.matmul(hidden1, weights[1]) + biases)

    # Linear
    with tf.name_scope('softmax_linear'):
        weights.append(tf.Variable(tf.truncated_normal([hidden2_units, NUM_CLASSES],stddev=1.0 / math.sqrt(float(hidden2_units)))))
        biases = tf.Variable(tf.zeros([NUM_CLASSES]))
        logits = tf.matmul(hidden2, weights[2]) + biases
    return weights, logits

我创建了一个数组,我在其中放置了权重数组。

我这样打印我的数组:

print_weights(sess.run(poids))

print_weights 在哪里

def print_weights(poids):
    for i in range(len(poids)):
        print('--  + str(i) + ' --')
        print(poids[i])

到这里为止,一切都很好。 但是我在开始和结束时显示了权重,并且第一层神经元的权重没有改变。

BEGINNING

-- 0 --

[[ 0.03137168  0.03483023]
 [ 0.01353009  0.00035462]
 [ 0.02957422 -0.01347954]
 ..., 
 [-0.04083598  0.02377481]
 [-0.05120984  0.00143244]
 [-0.01799158 -0.02219945]]

-- 1 --

[[ 0.68714064]
 [ 0.30847442]]

-- 2 --

[[ 0.87441564  0.09957008 -0.58042473  1.34084558 -0.46372819 -0.19947429
  -1.46314788 -0.59285629  0.72775543 -0.69785988]]


END

-- 0 --

[[ 0.03137168  0.03483023]
 [ 0.01353009  0.00035462]
 [ 0.02957422 -0.01347954]
 ..., 
 [-0.04083598  0.02377481]
 [-0.05120984  0.00143244]
 [-0.01799158 -0.02219945]]

-- 1 --

[[-1.16852498]
 [-0.27643263]]

-- 2 --

[[ 0.98213464  0.12448452 -0.36638314  0.47689819 -0.42525211 -0.13292283
  -1.29118276 -0.49366322  0.74673325 -0.57575113]]

如您所见,秒数和三分之一权重的数组发生了变化,但不是第一个,我不知道为什么... 有人可以帮助我吗? 谢谢!

【问题讨论】:

    标签: python tensorflow


    【解决方案1】:

    我将您的代码封装在一个训练工具中并顺利运行。

    我认为这里的问题不是你的代码,而是结果的解释。 Numpy 通过显示前一对和最后一对元素以您所展示的方式汇总大型数组。 (poids 列表的元素是 np.array 的。)

    您所看到的是前一对和最后一对权重元素没有变化,但您的结论是整个矩阵没有变化——但确实如此!

    尝试将其用作汇总方法(打印平均值和标准差,而不是仅打印几个元素):

    def print_weights(poids):
      for i in range(len(poids)):
        print('-- ' + str(i) + ' --')
        print(np.mean(poids[i]),np.std(poids[i]))
    

    【讨论】:

    • 确实,你是对的,我也展示了整个数组,但由于数组中有 784 个权重,我只查看了第一个和最后一个,并认为它们没有改变...谢谢!
    猜你喜欢
    • 2018-11-27
    • 2018-11-05
    • 2017-10-15
    • 2016-01-12
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    相关资源
    最近更新 更多