训练识别数字图片的模型
TanjaWEP
8年前
<p>本文根据官方教程,通过MNIST数据,使用Softmax Regressio算法训练一个输入784像素的图片,识别出其对应数字的模型</p> <p>前一篇文章中我们配置了TensorFlow并根据官方教程训练了一个简单的模型,今天我们继续训练另外一个简单的模型。</p> <p><img src="https://simg.open-open.com/show/ba5e3ceed84bec95ca81a23a5caa0fdc.png"></p> <p>MNIST包含一个手写的数字,就好像:</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/dacd3dce305a4a8ecfacb6b14f645d1e.png"></p> <p>这个案例是为了解答:</p> <ol> <li>TensorFlow是怎么工作的?</li> <li>机器学习的核心思想是什么?</li> </ol> <p>你可以学习到:</p> <ol> <li>MNIST数据、Softmax Regression算法</li> <li>建立一个可以基于观察图片的每一个像素来识别数字的模型</li> <li>通过模型浏览上千个案例来训练模型识别数字</li> <li>通过测试数据,来验证模型的准确度</li> </ol> <h2>I. MNIST数据</h2> <p>数据是在 <a href="/misc/goto?guid=4959616969854868915" rel="nofollow,noindex">Yann LeCun’s website</a> 这上面。</p> <p>该数据分为三部分</p> <p>通过分离不同的数据,一部分用于训练,一部分用户测试,一部分用于学习,这样才能验证结果是训练的模型自己生成的。</p> <ol> <li>mnist.train: 55_000个数据用于训练</li> <li>mnist.test: 10_000个数据用于测试</li> <li>minst.validation: 5_000个数据用于验证</li> </ol> <p>每个数据有两部分</p> <ol> <li>手写数字的图片(x)( mnist.train.images 、 mnist.test.images ): 28px * 28px = 784px</li> <li>对应的标签(y)( mnist.train.labels 、 mnist.test.labels )</li> </ol> <p>如数字 1 :</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/cf3c4042a8ce8143e6fd1da325a30f08.png"></p> <ul> <li>mnist.[train/test].images 是一个tensor,由55_000个由784个点的二维数组组成,数组中的每个值代表每个像素点,像素点有色的根据浅到深是0到1,无色为0,每个数组所呈现的数字对应一个label,我们表示为[55000,784]<br> <img src="https://simg.open-open.com/show/d4448a983fb8d2f4f2cc798195ab50bd.png"></li> <li>minst.[train/test].labels 也是一个tensor,由55_000个由10个值的一维数组组成,数组中有且仅有一个为1,其余为0,数组的index表示标签所代表的数字,如3表示为[0,0,0,1,0,0,0,0,0,0]],我们表示为[55000,10]<br> <img src="https://simg.open-open.com/show/75c15d1434707c7fd064c58d968318a4.png"></li> </ul> <h2>II. Softmax Regression算法</h2> <p>我们算法要尽量准确的通过图片(784个像素点)所呈现的,让结果中正确的数字所占的比例尽量的高,如给出的图片对应的数字是9,模型运算结果可能是: 80%的概率是9,5%概率是8,15%的概率是其他。</p> <p>该算法使用场景:从不同的事件中为一个对象分配可能性,因为该算法给我们一个0到1的列表,并且加起来等于1</p> <p>大概步骤</p> <ol> <li>总结输入的数据在某些类中的证据(we add up the evidence of our input being in certain classes)</li> <li>将证据转化为具体的可能性</li> </ol> <p>做像素强度(intensities)的加权值,当图片的强度(intentsity)与某个分类不一致,其权重为负数,当有强有力的证据证明是在那个分类,其权重为正数</p> <p>最终的模型权重</p> <p>蓝色为正数权重,红色为负数</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/c978566ad13364267ea031da6d3bd396.png"></p> <p>大概算法</p> <p>第i个类型、第j个像素、W为权重、x为输入的图片、b为偏移量</p> <p>结果: $y = softmax(W_x$ + b)</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/47751d1670e27089c506a8f74291abe2.png"> <img src="https://simg.open-open.com/show/edc0cc5382269aad82557f9b0bf64647.png"> <img src="https://simg.open-open.com/show/e9c2317d800d96fa28295997893e115f.png"></p> <p> </p> <p>来自:https://blog.dreamtobe.cn/tensorflow-mnist/</p> <p> </p>