Tensorflow 第一层神经元的权重不会改变
Tensorflow first layer neuron's weights don't change
如果我的第一层神经元的权重不改变可以吗?
我在 Tensorflow 上的 MNIST 网络上,我试图在 "inference" 函数中像这样获取神经元的权重:
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]]
如您所见,秒数和三分之一重量的数组发生了变化,但第一次没有,我不知道为什么...
有人可以帮我吗?
谢谢!
我将您的代码封装在训练工具中,运行 没有问题。
我认为这里的问题不是你的代码而是结果的解释。 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]))
如果我的第一层神经元的权重不改变可以吗?
我在 Tensorflow 上的 MNIST 网络上,我试图在 "inference" 函数中像这样获取神经元的权重:
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]]
如您所见,秒数和三分之一重量的数组发生了变化,但第一次没有,我不知道为什么... 有人可以帮我吗? 谢谢!
我将您的代码封装在训练工具中,运行 没有问题。
我认为这里的问题不是你的代码而是结果的解释。 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]))