模型:单层多神经元的结构
1.查看一下版本号
import tensorflow as tf
print(tf.__version__)
版本号:
2.调入官方数据集
from tensorflow.examples.tutorials.mnist import input_data
#onehot=True 使用展开的onehot
mnist=input_data.read_data_sets('.',one_hot=True)
3.定义模型
#float14 半精度 ;float64双精度
learning_rate=tf.placeholder(tf.float32)
4.模型结构定义(计算图的定义)
#维度为784
x=tf.placeholder(tf.float32,[None,784],name='x')
#定义模型权重
W=tf.Variable(tf.truncated_normal([784,10]),name='weight')
#定义偏置 使用全0
b=tf.Variable(tf.zeros([10]),name='bias')
#未经激活的输出 matmul:矩阵乘法
logits=tf.matmul(x,W)+b
#label
y=tf.placeholder(tf.float32,[None,10],name='y')
#交叉熵损失 激活函数为softmax,做操作之前先对一批数据取一下平均
cross_entropy=tf.reduce_mean(
tf.nn.softmax_cross_entropy_with_logits(labels=y,logits=logits))
#定义优化器 train_step前向运算一次 反向运算一次
train_step=tf.train.GradientDescentOptimizer(learning_rate).minimize(
cross_entropy)
#对模型评估 arg_max某一维最大值的索引
correct_prediction=tf.equal(tf.arg_max(y,1),tf.arg_max(logits,1))
#计算准确率 reduce_mean--去掉batch,cast--将bool类型值转换为float32
accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
5.获取定义的计算图
graph=tf.get_default_graph()
print(graph)
print(graph.as_graph_def())
运行结果:
print(graph.as_graph_def()):
6.启动运行
#实例
sess=tf.Session()
#初始化计算图
sess.run(tf.global_variables_initializer())
7.批次输入数据
lr=1.0
for step in range(3000):
#动态调整学习率
if step>1000:
lr=0.3
if step>2000:
lr=0.1
batch_x,batch_y=mnist.train.next_batch(32)
#将train_stepp cross_entropy一起运行,也可以分开
_,loss=session.run(
[train_step,cross_entropy],
feed_dict={
x:batch_x,
y:batch_y,
learning_rate:lr
})
if(step+1)%100==0:
print('#'*10)
print('step [{}],entropy loss:[{}]'.format(step+1,loss))
#查看训练集上的准确率
print(sess.run(accuracy,feed_dict={x:batch_x,y:batch_y}))
#查看验证集上的准确率
print(sess.run(accuracy,feed_dict={x:mnist.test.images,
y:mnist.test.labels}))