机器学习的hello world——MNIST
MNIST:一个由60000行训练数据集和10000行的测试数据集(机器学习模型设计时必须有一个单独的数据集用于评估模型的性能)组成的数据集。
下载mnist的数据集后,将文件放入C:\Users\missouter.keras\datasets中,再将以下代码写入程序:
- import tensorflow as tf
- import numpy as np
- def transform_data(x_train, y_train, x_test, y_test):
- x_train_new=x_train.reshape(-,*)
- x_test_new=x_test.shape(-, *)
- y_train_new=np.zeros((y_train.shape[],))
- y_test_new=np.zeros((y_test.shape[],))
- for i in range(y_train.shape[]):
- y_train_new[i][y_train[i]] =
- for i in range(y_test.shape[]):
- y_test_new[i][y_test[i]] =
- return x_train_new,y_train_new,x_test_new,y_test_new
- mnist=tf.keras.datasets.mnist
- (x_train, y_train), (x_test, y_test)=mnist.load_data()
- x_train,x_test=x_train/255.0,x_test/255.0
- x_train, y_train, x_test, y_test = transform_data(x_train, y_train, x_test, y_test)
这样就直接完成了数据集的导入与训练、测试集的分割。处理完后,还需定义每轮feed给网络的数量:
- BATCH_SIZE = 100
- TOTAL_SIZE = x_train.shape[0]
下一步需要使用softmax回归(softmax regression),softmax模型可以用来给不同的对象分配概率,以得到某个图像为某个特定数字类的证据为例,输入图片x代表的数字为x的证据可表示为:
- evidencei=∑W(i,j)xj + bi
其中Wi代表权重;因输入会带一些无关的干扰量,故加入偏置量bi,j代表给定图片的像素索引。
运用softmax函数可将证据转换成概率y:
- y=softmax(evidence) 激励 / 链接函数
从而将我们定义的线性函数输出转换成十个数字类的概率分布;一般将softmax模型函数定义为下列的前一种形式,即将输入值当成幂指数求值,再将结果值正则化。
- softmax(x)=normalize(exp(x))
- softmax(x)i=exp(xi)/∑exp(xj)
更为紧凑的格式可写为:
- y=softmax(Wx+b)
用以下方式创建可交换单元:
- x=tf.placeholder("float", [None, 784])
placeholder构筑整个系统的graph;第一个参数是数据类型,第二个参数是数据形状,上述代码中[None, 784]表明行未定,列为784列;第三个参数为名称,未写入代码。
上述语句的x是一个占位符;MNIST的一张图包含28*28=784个像素,每一张图展平成784维的向量;none 表示此张量的第一维度可以是任何一个长度。
Variable表示一个可修改的向量,放置模型参数。可用于计算输入值,也可在计算中被修改。下方代码中,因我们需要让784维的图片向量乘权值w得到十位的证据向量,故模型参数形状为[784,10]。
用全为零的张量初始化w、b:
- w=tf.Variable(tf.zeros([784,10]))
- b=tf.Variable(tf.zeros[10])
我们需要用784维的图片向量乘w以获得10维的证据值向量,故w维度wei[784, 10](矩阵乘法)。
接着用以下语句实现模型:
- y=yf.nn.softmax(tf.matmul(x, W)+b)
在训练模型时,我们定义成本\损失来评估模型好坏;交叉熵是一个常见的成本函数:
- Hy‘(y)=-∑y’log(yi)
y’为预测分布,y为实际分布;
使用一个占位符输入正确值,然后计算交叉熵:
- y_=tf.placeholder("float", [none, 10])
- cross_entropy=-tf.reduce_sum(y_*tf.log(y))
选择梯度算法以0.01的学习速率最小化交叉熵,将每个变量一点点朝成本降低的方向移动:
- train_step = tf.train.GradienDescentOptimizer(0.01).minimize(cross_entropy)
简单调整一行代码就可以使用tensorflow提供的其他算法。
最后,初始化模型并训练模型,例子中训练了一千次:
- sess=tf.Session()
- sess.run(init)
- for i in range(1000):
- start = (i * BATCH_SIZE) % TOTAL_SIZE
- end = start + BATCH_SIZE
- batch_xs, batch_ys = x_train[start:end], y_train[start:end]
- sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
每次循环随机抓取训练集中的100个批处理点,替换先前定位的占位符,运行train_step。
接下来使用tf.argmax给出tensor对象某维上的数据最大值的索引值,则可知:
- tf.argmax(y, 1)返回的是预测标签值
- tf.argmax(y_, 1)代表的是正确的标签
使用tf.equal检测预测是否与真实标签匹配:
- correct_prediction=tf.equal(tf.argmax(y, 1), tf.argmax(y_,1))
代码返回布尔值,将其转换成浮点数后取平均,计算学习模型正确率:
- accuracy=tf.reduce_mean(tf.cast(correct_prediction, "float"))
- print(sess.run(accuracy, feed_dict={x:x_test, y_: y_test}))
这样对于mnist手写体识别的过程就写完了。
机器学习的hello world——MNIST的更多相关文章
- TensorFlow 学习(3)——MNIST机器学习入门
通过对MNIST的学习,对TensorFlow和机器学习快速上手. MNIST:手写数字识别数据集 MNIST数据集 60000行的训练数据集 和 10000行测试集 每张图片是一个28*28的像素图 ...
- TensorFlow下利用MNIST训练模型并识别自己手写的数字
最近一直在学习李宏毅老师的机器学习视频教程,学到和神经网络那一块知识的时候,我觉得单纯的学习理论知识过于枯燥,就想着自己动手实现一些简单的Demo,毕竟实践是检验真理的唯一标准!!!但是网上很多的与t ...
- Python资料汇总(建议收藏)
整理汇总,内容包括长期必备.入门教程.练手项目.学习视频. 一.长期必备. 1. StackOverflow,是疑难解答.bug排除必备网站,任何编程问题请第一时间到此网站查找. https://st ...
- TensorFlow实战之Softmax Regression识别手写数字
关于本文说明,本人原博客地址位于http://blog.csdn.net/qq_37608890,本文来自笔者于2018年02月21日 23:10:04所撰写内容(http://blog.c ...
- Fashion-MNIST:A MNIST-like fashion product database. Benchmark
Zalando的文章图像的一个数据集包括一个训练集6万个例子和一个10,000个例子的测试集. 每个示例是一个28x28灰度图像,与10个类别的标签相关联. 时尚MNIST旨在作为用于基准机器学习算法 ...
- Python入门、练手、视频资源汇总,拿走别客气!
摘要:为方便朋友,重新整理汇总,内容包括长期必备.入门教程.练手项目.学习视频. 一.长期必备. 1. StackOverflow,是疑难解答.bug排除必备网站,任何编程问题请第一时间到此网站查找. ...
- 自学Python,新手上路,好资源免费分享
Python 可以用来做什么? 在我看来,基本上可以不负责任地认为,Python 可以做任何事情.无论是从入门级选手到专业级选手都在做的爬虫,还是Web 程序开发.桌面程序开发还是科学计算.图像处理, ...
- ---转载---phython资料
整理汇总,内容包括长期必备.入门教程.练手项目.学习视频. 一.长期必备. 1. StackOverflow,是疑难解答.bug排除必备网站,任何编程问题请第一时间到此网站查找. https://st ...
- Python学习教程(一)自学资源分享
Python 可以用来做什么? 在我看来,基本上可以不负责任地认为,Python 可以做任何事情.无论是从入门级选手到专业级选手都在做的爬虫,还是Web 程序开发.桌面程序开发还是科学计算.图像处理, ...
随机推荐
- stand up meeting 11/26/2015
part 组员 今日工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云 完成UI简易界面布局设计:在UI部分实现释义数据格式转换的实现和测试,使得其与外界接口均标准化为string,具体实现见 ...
- stand up meeting 11/23/2015
组员 周末工作 工作耗时/h 明日计划 计划耗时/h 冯晓云 完成网络状况的侦听,对网络连接断开,WiFi状况不佳,未查询到结果设定不同的返回码,按约定格式返回:对于超时未查询进行了相关的学习: 3 ...
- Python - 翻译Talk Python To Me (和我聊Python) 播客
“和我聊Python”是一个美国的聊天播客,英文名Talk Python To Me,类似于喜马拉雅的音频课程节目,只不过这个主题是编程语言Python.该节目从2015年的节目到现在,已经超过256 ...
- notepad++批量每行加字符
移动光标到头 选择正则 输入^ 下面输入需要加的文本. 点替换
- Windows安装Tesseract-OCR 4.00并配置环境变量
一.前言 Tesseract-OCR 是一款由HP实验室开发由Google维护的开源OCR(Optical Character Recognition , 光学字符识别)引擎.与Microsoft O ...
- iview使用之怎样通过render函数在table组件表头添加图标及判断多个状态
在实际项目开发中,我们经常会用到各种各样的表格,比如在表格中填加下拉菜单,按钮,图标及可以根据状态显示对应文字等等,因为这段时间一直在做后台管理系统,所以表格用的就比较多,当然UI组件库我用的是ivi ...
- 用python把技术文档中,每个模块系列截图生成一个动态GIF
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 最近在写技术文档的时候,发现一个问题.对于每个技术步骤,都需要一个截图,这 ...
- 【<meta name="" content=">】的作用
一.语法: <meta name="name" content="string"/> 二.参数解析: 1.name项:常用的选项有keywords( ...
- 2019-2020-1 20199325《Linux内核原理与分析》第八周作业
Linux内核如何装载和启动一个可执行程序 1.理解编译链接的过程和ELF可执行文件格式,详细内容参考本周第一节: 2.编程使用exec*库函数加载一个可执行文件,动态链接分为可执行程序装载时动态链 ...
- Docker网络与存储(三)
Docker的网络和存储 1.1 Docker的4种网络模式 host模式,使用--net=host指定. container模式,使用--net=container:NAME_or_ID指定. no ...