PAI的示例项目MNIST详解
本文将详细的介绍PAI的示例项目:MNIST手写数字识别项目的代码,详细代码链接请见文章最后。
目录
MNIST 项目介绍
MNIST是机器学习中的Hello world,前期准备要了解Softmax (multinomial logistic ) regression。
MNIST的是一个简单的计算机视觉数据集,它包含一系列手写数字图片,我们将训练一个模型识别图片中的数字。
我们本次目的不是训练一个精准模型,以达到稳定的高性能,而是学会如何使用Tensorflow解决简单的问题,以及如何使用PAI平台运行深度学习项目。
本文将完成以下任务:
了解MNIST数据以及Softmax Regression
构建一个模型,根据图片的像素识别数字
基于上千个样例,使用TensorFlow训练模型识别数字
使用测试数据检验正确性
在PAI平台上顺利运行该项目
MINIST 数据集
数据集可从 http://yann.lecun.com/exdb/mnist/ 中下载。
数据集中训练集中有60000个数据点,测试集有10000个数据点。
每个MNIST数据点有两个部分:手写的数字图片和其相应的标签,将图片作为x, 标签作为y。
每张图片为28x28像素,图片和对应矩阵的关系如下图所示:
=
可见图像和28*28的矩阵相对应。
每个图片有一个相应的标签,为0-9,对应的是0-9的10个数字,每个标签抽象为“one-hot vectors” (指只有一个维度为1其他维度都为0的向量),如类别为1的图片对应的类别向量为 [0 1 0 0 0 0 0 0 0 0] 。
Softmax Regression
Softmax Regression是Logistic回归的推广,Logistic回归是处理二分类问题的,而Softmax Regression是处理多分类问题的。
Logistic回归是处理二分类问题的比较好的算法,具有很多的应用场合,如广告计算等。Logistic回归利用的是后验概率最大化的方式去计算权重。
多分类模型的输出结果为该样本属于k个类别的概率,从这k个概率中我们选择最优的概率对应的类别(通常选概率最大的类别),作为该样本的预测类别。
代码分析
在Python数值计算中,经常会使用到一些别的库,像numpy,在python外进行昂贵的操作,如矩阵计算。但是Python内外的数据交互会使得高的开销,为避免这些,Tensorflow使用先描述计算图,后再一起计算的方式。
所以Tensorflow中代码运行顺序取决于会话中的代码顺序,而非整个文件中的代码顺序。
import os
import sys
import argparse
import tensorflow as tf
FLAGS = None
导入了需要用的库,其中FLAGS是PAI平台中需要使用的量。
def read_image