本来想根据机器学习书上的推导的梯度下降公式手写一个梯度下降,但是效果不好,后面用了tf自带的梯度下降后成功。
发现方差作为代价函数不能在MNIST数据集上取得良好效果,训练正确率始终在0.1上下徘徊。
MNIST上的优化函数得使用交叉熵,隐含节点个数有几个经验公式,大概取了一个附近的值,下面先给出MNIST上的代码。
import numpy
import input_data
import tensorflow as tf
mnist = input_data.read_data_sets("MNIST_data/",one_hot=True)
input_size = 784
out_size = 10
hide_note = 60
x = tf.placeholder("float", [None, input_size])
y = tf.placeholder("float", [None, out_size])
v = tf.Variable(tf.random_normal([input_size, hide_note], stddev=0.1))
b = tf.Variable(tf.zeros([hide_note])+0.1)
w = tf.Variable(tf.random_normal([hide_note, out_size], stddev=0.1))
sita = tf.Variable(tf.zeros([out_size])+0.1)
a = tf.matmul(x,v)+b
a = tf.nn.relu(a)
y_ = tf.matmul(a, w)+sita
y_ = tf.nn.relu(y_)
loss = tf.reduce_mean (tf.nn.softmax_cros