#下面做一个修改
#在一次全连接后再添加一层全连接
W = tf.Variable(tf.zeros([784,300]))
b = tf.Variable(tf.zeros([300]))
t = tf.nn.sigmod(tf.matmul(x,W)+b)
#添加的参数W1和b1
W1 = tf.Variable(tf.ones([300,10]))
b1 = tf.Variable(tf.ones([10]))
#激活层
y = tf.nn.softmax(tf.matmul(t,W1)+b1)
结果输出1135.0,这和猜数字也差不多的正确率,这是什么样的问题导致的?
首先我们观察一下权重是否改变:
print(sess.run([W,b,W1,b1]))
结果:
[[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
...,
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.]]
...
0.99992758, 0.99997383],
[ 0.99996018, 1.00039601, 1.00000095, ..., 1.00013947,
0.99992758, 0.99997383],
...,
[ 0.99996018, 1.00039601, 1.00000095, ..., 1.00013947,
0.99992758, 0.99997383],
[ 0.99996018, 1.00039601, 1.00000095, ..., 1.00013947,
0.99992758, 0.99997383],
[ 0.99996018, 1.00039601, 1.00000095, ..., 1.00013947,
0.99992758, 0.99997383]], dtype=float32), array([ 0.98817813, 1.11309755, 0.9995591 , 1.02963579, 0.97294426,
0.90098643, 0.98529106, 1.04031229, 0.97770184, 0.99229145], dtype=float32)]
结果发现权重文件几乎都是一样的,并没有产生差异性,所以应该试一下用别的方式初始化变量。
这里使用正太分布,均值为0,标准差为0.01
W = tf.Variable(tf.random_normal([784, 300], stddev=0.1))
b = tf.Variable(tf.ones([300]))
t = tf.nn.softmax(tf.matmul(x,W)+b)
W1 = tf.Variable(tf.random_normal([300,10],stddev=0.1))
b1 = tf.Variable(tf.ones([10]))
最终的运行结果
0.83896 #trainset 上的准确率
0.7559 #testset 上的准确率
调整学习率为0.3,最终准确率:
0.90995
0.977
一个比较有意思的现象,在训练的过程中train准确率始终比test的准确率低。
这时因为我们测试的数据集是全部的训练集(60000)和全部的测试集(10000),而且在batch=5000的情况下,所以出现这种现象也不奇怪。