我们的口号是什么?
源码!源码!源码!
#增大样本量,减少特征数量以解决过拟合问题(泛化性不好)
#SGD:随机梯度下降
#ReLU函数
#定义算法公式->定义损失函数和选择优化器优化loss->训练步骤->准确率测评
#载入MNIST数据集,创建默认Session
from tensorflow.examples.tutorials.mnist import input_data
import tensorflow as tf
mnist=input_data.read_data_sets("MNIST_data/",one_hot=True)
sess=tf.InteractiveSession()
#隐含层权重W1需要加入噪声,因此标准差设置为0.1
#隐含层设置参数并初始化Variable,
in_units=784#隐含层输入节点数
h1_units=300#隐含层输出节点数
W1=tf.Variable(tf.truncated_normal([in_units,h1_units],stddev=0.1))
b1=tf.Variable(tf.zeros([h1_units]))
W2=tf.Variable(tf.zeros([h1_units,10]))
b2=tf.Variable(tf.zeros([10]))
#x的输入,Dropout的比率keep_prob(保留节点比率):训练时小于1,预测时等于1
x=tf.placeholder(tf.float32,[None,in_units])
keep_prob=tf.placeholder(tf.float32)#防止过拟合
#定义模型结构,隐含层hidden1
hidden1=tf.nn.relu(tf.matmul(x,W1)+b1)#隐含层
hidden1_drop=tf.nn.dropout(hidden1,keep_prob)#随机将一部分节点置零
y=tf.nn.softmax(tf.matmul(hidden1_drop,W2)+b2)#softmax函数与tensorflow1文件中的一样
#损失函数使用交叉信息熵,优化器选择自适应的优化器Adagrad
#学习速率为0.3,还有其它优化器,但是学习速率要调整
y_=tf.placeholder(tf.float32,[None,10])
cross_entropy=tf.reduce_mean(-tf.reduce_sum(y_*tf.log(y),reduction_indices=[1]))
train_step=tf.train.AdagradOptimizer(0.3).minimize(cross_entropy)
#reduce_sum是求和函数,reduce_mean对每个数据结果求均值
#训练步骤,加入keep_prob作为计算图的输入,
#一般复杂度越大的神经网络,dropout效果越明显
#由于加了隐含层,要更多的训练迭代来优化模型参数
#3000个batch,每个batch包含100个样本
#相当于进行5轮epoch
tf.global_variables_initializer().run()
for i in range(3000):
batch_xs,batch_ys=mnist.train.next_batch(100)
train_step.run({x:batch_xs,y_:batch_ys,keep_prob:0.75})
#tf.global_var....全局参数初始化器
#对模型进行准确率测评
correct_prediction=tf.equal(tf.argmax(y,1),tf.argmax(y_,1))
accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
print(accuracy.eval({x:mnist.test.images,y_:mnist.test.labels,keep_prob:1.0}))#测试一致性
#tf.equal可以判断是否一致
#argmax(y,1):各个预测数字中概率最大的那个
#argmax(y_,1)样本的真实数字类别
#tf.cast将bool转换为folat32值
#tf.equal();tf.reduce_mean();tf.global_var....;tf.cast();tf.reduce_sum()
#如何测试一致性,参数存在哪儿?
#第一步的算法公式没有用上?
#y,y_不理解
骚年们,欢迎指正哦。
啊呜!