首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

撸起袖子加油干

今天小马跟大家接着上次的话题接着一起学习,忍了两周了,咱们今天不忍了,今天小编只想贴一幅画,那就是:

当我们开始学习编程的时候,第一件事往往是学习打印"Hello World"。就好比编程入门有Hello World,机器学习入门有MNIST。MNIST是一个入门级的计算机视觉数据集,它包含各种手写数字图片。MNIST数据集的官网是http://yann.lecun.com/exdb/mnist/。我们可以先下载数据到当前目录中,或者也可以在运行代码时自动下载,这时会自动下载至/tmp,核电小马推荐的做法还是先下载数据然后再跑程序,因为如果等代码跑起来时网络不好会很影响心情哦。MNIST是一个入门级的计算机视觉数据集,它包含各种手写数字图片:

它也包含每一张图片对应的标签,告诉我们这个是数字几。比如,上面这四张图片的标签分别是5,0,4,1。每一张图片包含28像素X28像素。我们可以用一个数字数组来表示这张图片:

我们把这个数组展开成一个向量,长度是 28x28 = 784。如何展开这个数组(数字间的顺序)不重要,只要保持各个图片采用相同的方式展开。

下面这个例子是Tensorflow官网的教程,地址为https://www.tensorflow.org/versions/r0.12/tutorials/mnist/beginners/index.html。在此教程中,我们将训练一个机器学习模型用于预测上述图片里面的数字。

这两行代码是对MNIST数据进行加载,Tensorflow为我们提供了一个方便的封装,可以直接加载MNIST数据成我们期望的格式。其中有一个参数为“one_hot”,one_hot 意思是一个向量除了某一位的数字是1以外其余各维度数字都是0。

然后我们查看MNIST这个数据集的情况,可以看到训练集有55000个样本,测试集有10000个样本,验证集有5000个样本。每一个样本都有它对应的标注信息,即label。这里784的意思就是展开的每个样本的像素展开为一个数组,10的意思就是代表每个样本代表0-9中的某个数字,总共是10类。

第一行代码为我们第一篇帖子中安装的Tensorflow库的引入,第二行代码是创建一个新的InteractiveSession,使用这个命令将会将这个session注册为默认的session,之后的运算也默认跑在这个session里,不同session之间的数据和运算应该都是相互独立的。

模型

为了得到一张给定图片属于某个特定数字类的证据(evidence),我们对图片像素值进行加权求和。如果这个像素具有很强的证据说明这张图片不属于该类,那么相应的权值为负数,相反如果这个像素拥有有利的证据支持这张图片属于这个类,那么权值是正数。我们也需要加入一个额外的偏置量(bias),因为输入往往会带有一些无关的干扰量。因此对于给定的输入图片 x 它代表的是数字 i 的证据可以表示为:

其中 wi代表权重,bi 代表数字 i类的偏置量,j代表给定图片 x 的像素索引用于像素求和。然后用softmax函数可以把这些证据转换成概率 y:

softmax可以看成是一个激励(activation)函数或者链接(link)函数,把我们定义的线性函数的输出转换成我们想要的格式,也就是关于10个数字类的概率分布。因此,给定一张图片,它对于每一个数字的吻合度可以被softmax函数转换成为一个概率值。softmax函数可以定义为:

展开等式右边的子式,可以得到:

后面我们将知道,softmax其实是一个将数据间距离拉大的一个函数,这样可以更好地区分类别,因此在多分类问题中的最后一步往往就是使用softmax函数。因此我们模型即为:

更进一步,可以写成更加紧凑的方式:

这里参数W和b都是将在训练过程中自己学出来的。

策略

这里我们采用的一个损失函数为“交叉熵”(cross-entropy)。交叉熵产生于信息论里面的信息压缩编码技术,但是它后来演变成为从博弈论到机器学习等其他领域里的重要技术手段。简单地讲,意思就是当两个信号越接近这个交叉熵就会越小,在这个例子中当交叉熵越小代表计算得到的概率越接近真实的数字,因此我们需要求出让交叉熵最小的W和b,这就需要下一步的算法。

算法

在这里,我们要求TensorFlow用梯度下降算法(gradient descent algorithm)以0.5的学习速率最小化交叉熵。梯度下降算法(gradient descent algorithm)是一个简单的学习过程,TensorFlow只需将每个变量一点点地往使成本不断降低的方向移动。当然TensorFlow也提供了其他许多优化算法:只要简单地调整一行代码就可以使用其他的算法。

好了,至此机器学习最重要的三要素已经在上面解释完毕了,这也是整个机器学习的核心部分,最后我们只需要训练我们的模型和做最后的预测即可。

我们发现我们的结果最后是0.9131,这个结果好吗?嗯,并不太好。事实上,这个结果是很差的。这是因为我们仅仅使用了一个非常简单的模型。但是比结果更重要的是,我们从这个模型中学习到的设计思想。

小编再插一句,这篇文章我们主要的目的是熟悉Tensorflow的运行机制,如果要细究程序的每一个细节,我们还需要补充Python以及Tensorflow本身的API的知识,当然这部分我们会在后面慢慢一点点会接触到。

本文中部分公式参考了Tensorflow官网

作者简介

一个不想学好AI的女儿奴,绝不是一个好的会挖笋的核电工程师

往期文章

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180204G121T400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券