欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~
源码下载地址请点击原文查看。
初学机器学习,写篇文章mark一下,希望能为将入坑者解点惑。本文介绍一些机器学习的入门知识,从安装环境到跑通机器学习入门程序MNIST demo。
内容提纲:
- 环境搭建
- 了解Tensorflow运行机制
- MNIST(手写数字识别 ) softmax性线回归
- MNIST 深度卷积神经网络(CNN)
- tools 工具类
- CPU & GPU & multi GPU
- 学习资料
1 环境搭建 (Windows)
- 安装虚拟环境 Anaconda,方便python包管理和环境隔离。
Anaconda3 4.2 https://www.anaconda.com/downloads,自带python 3.5。
- 创建tensorflow隔离环境。打开Anaconda安装后的终端Anaconda Prompt,执行下面命令
conda create -n tensorflow python=3.5 #创建名为tensorflow,python版本为3.5的虚拟环境 activate tensorflow #激活这个环境 deactivate #退出当前虚拟环境。这个不用执行CPU 版本
pip install tensorflow #通过包管理来安装 pip install whl-file #通过下载 whl 文件安装,tensorflow-cpu安装包:http://mirrors.oa.com/tensorflow/windows/cpu/tensorflow-1.2.1-cp35-cp35m-win_amd64.whl, cp35是指python3.5GPU 版本。我的笔记本是技持NVIDIA显卡的,可以安装cuda,GPU比CPU快很多,不过笔记本的显存不大,小模型还可以跑,大模型建议在本地用CPU跑通,到Tesla平台上训练。

注意点:选择正确的 CUDA 和 cuDNN 版本搭配,不要只安装最新版本,tensorflow可能不支持。目前Tensorflow已支持到CUDA 9 & cuDNN 7,之前本人安装只支持CUDA 8 & cuDNN 6,所以用是的:
它也包含每一张图片对应的标签,告诉我们这个是数字几。比如,上面这四张图片的标签分别是5,0,4,1。
数据集图片大小28x28,单通道灰度图。存储样式如下:

MNIST手写数字识别的目的是输入这样的包含手写数字的28x28的图片,预测出图片中包含的数字。
softmax线性回归认为图片中数字是N可能性由图像中每个像素点用

表示是 数字 i 的可能性,计算出所有数字(0-9)的可能性,也就是所有数字置信度,然后把可能性最高的数字作为预测值。
evidence的计算方式如下:

其中

代表权重,

代表数字 i 类的偏置量,j 代表给定图片 x 的像素索引(0~28x28=784),用于像素求和。即图片每个像素值x权重之和,再加上一个偏置b,得到可能性值。
引入softmax的目的是对可能性值做归一化normalize,让所有可能性之和为1。这样可以把这些可能性转换成概率 y:



- 开始实现
数据
X样本 size 28x28 = 784

Y样本 ,样式如


读取
from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets(FLAGS.data_dir, one_hot=True) #total 55000,one_hot方式,图片x格式为1维数组,大小784 batch_xs, batch_ys = mnist.train.next_batch(batch_size) #分batch读取构建图(Graph)
Inference推理,由输入 x 到输出预测值 y 的推理过程


x = tf.placeholder(tf.float32, [None, 784], name="input")
