Tensorflow实现逻辑分类器

实现分类器使用的数据集为input_data中的数据,导入数据集前需要先下载数据集,否则会报错ImportError: No module named input_data

解决方法:先安装input_data.py,直接复制地址https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/tutorials/mnist

在这里下载后,在终端输入Python input_data.py就好了


最终结果值应该大约是91%



#coding=utf-8
import tensorflow as tf
import numpy as np
import input_data
#mnist.train为训练数据集,mnist.test为测试集
#每个mnist数据单元由两部分组成:一张包含手写数字的图片(xs)和一个对应的标签(ys)
#训练数据集和测试数据集都包含xs和ys,比如训练数据集的图片是 mnist.train.images ,训练数据集的标签是 mnist.train.labels
mnist = input_data.read_data_sets("MNIST_data/",one_hot = True)
#mnist.train.images是一个形状为[55000,784]的张量,55000个图片,每张图片28*28,展开成一个向量长度为784
#第一维度数字用来索引图片,第二维度数字用来索引每张图片中的像素点(值介于0-1)
#标签为0-9的数字标签数据使用one-hot vectors。
#mnist.train.labels为一个[55000,10]的数字矩阵

#占位符
X = tf.placeholder("float",[None,784])
Y = tf.placeholder("float",[None,10]) 
#第一维度可任意长
w = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros([10]))
#训练模型
y = tf.nn.softmax(tf.matmul(X,w)+b)
#损失函数
lost = -tf.reduce_sum(Y*tf.log(y))#计算交叉熵
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(lost)#梯度下降算法

sess = tf.Session()
sess.run(tf.initialize_all_variables())
#模型循环训练1000次
for i in range(1000):
	#每次循环,会随机抓取训练数据中的100个批处理数据点
	batch_xs,batch_ys = mnist.train.next_batch(100)
	sess.run(train_step,feed_dict = {X:batch_xs,Y:batch_ys})
#评估模型
#找出预测正确的标签
correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(Y,1))
#把布尔值转换成浮点数,然后取平均值。例如,[True, False, True, True] 会变成 [1,0,1,1] ,取平均值后得到 0.75.
accuracy = tf.reduce_mean(tf.cast(correct_prediction,"float"))
#计算所学习到的模型在测试数据集上面的正确率。
print (sess.run(accuracy,feed_dict = {X: mnist.test.images,Y:mnist.test.labels}))
sess.close()




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值