直接コードファイルをダウンロードするには、私たちの公共番ああに注意を払います!閲覧履歴メッセージをすることができます!
手書きメモや電子ノートが良いでしょうか?
卒業シーズンはちょうど大学攻略、これは単なるスタートにはなっていない脳のセットをコンパイルする準備学習のための2018孟新しいすぐに来て、我々music.brothers古いベーコン小さなシリーズを、見て、終了しました良い良いまたは電子ノート手書きのメモです最終的にノートを取るために - 彼は挑戦に会いましたか?
賢い少し友人は、おそらく小扁を憎む必要があり、そこではありません電子手書きのメモに!さて、ウィット、私はどのようにできた、このことについて考えたとして!
私たちはしばしばまた、ノートが整理した場合、検索機能は、電子手書きのメモを達成することはできませんがしたい、地方の電子ペーパーに加えて、注意して手書き認識、検索機能が、それは本当に紙の唯一の道です。このために、この小さなシリーズ個人的に経験豊富なGoodNotes手書きのメモアプリケーション、それは手書き認識検索を行うことができていても、しかしきちんと記述する必要は、ないにもペン、書き込み、移動グループは、バーなどの小さなシリーズの数を含め、彼を抑制しようとすることができるだろう。
だから、最後にそれを手書き認識を達成するためにどのように?この問題の魔術師は、あなたがどのように簡単なプログラミングで一見高度な手書き文字認識技術を実現するために教会に来て。いくつかのオンラインチュートリアルを参照してください、私たちは、デモンストレーションを行いますMNIST手書き認識達成tensorflow使用例を。
まず、あなたが記事の内容のマップを気にすることを学ぶあなたが詳細について話していない場合は、研究自体を参照してください。
アメリカ国立標準技術研究所からセットMNISTデータ、アメリカ国立標準技術研究所(NIST)。トレーニングセット(トレーニングセット)は、国勢調査局(国勢調査局)職員から来た250の異なる人々の50%が高校生であるの手書き、50%からの数字で構成されています。テストセット(テストセット)は、手書きデジタルデータの同じ割合です。
Tensorflowはそれについてあなたを与えます。
tensorflow是谷歌于2015年11月9日正式开源的计算框架。tensorflow计算框架可以很好地支持深度学习的各种算法,但它的应用也不限于深度学习,是由Jeff Dean领头的谷歌大脑团队基于谷歌内部第一代深度学习系统DistBelief改进而来的通用计算框架。
我们通过基于python3的编程语言调用tensorflow这一框架。
下载方式参考如下:
入门捷径:线性回归
我们看一个最简单的机器学习模型,线性回归的例子。
狭义的最小二乘方法,是线性假设下的一种有闭式解的参数求解方法,最终结果为全局最优。
梯度下降法,是假设条件更为广泛(无约束)的,一种通过迭代更新来逐步进行的参数优化方法,最终结果为局部最优。
而我们通过调用Tensorflow计算梯度下降的函数tf.train.GradientDescentOptimizer来实现优化。
我们看下这个例子代码,只有30多行,逻辑还是很清晰的。
最终会得到一个接近2的值,比如我这次运行的值为1.9183811
线性模型:logistic回归
线性回归不过瘾,我们直接一步到位,开始进行手写识别。
我们采用深度学习三巨头之一的Yann Lecun教授的MNIST数据为例。 如上图所示,MNIST的数据是28x28的图像,并且标记了它的值应该是什么。
我们先看看数据是怎样从图片一步步转化为我们的预测的:
我们可以获取到的数据在编译器里是以矩阵形式存储的,如下:
teX为10000乘784的矩阵,teY为10000乘10的矩阵,10000表示例子的数目,784就是28x28个像素点,因为有10种不同的数字,所以teY的另一维度为10,每一维的值用来判断是否是该维对应的数字。teX,teY构成了训练集的数据。同理,trX,trY为测试集。
接下来要介绍的部分都只是模型构建的部分不同,大家可以参考上面数据的转化图片进行理解。
我们首先不管三七二十一,就用线性模型来做分类。
算上注释和空行,一共加起来30行左右,我们就可以解决手写识别这么困难的问题啦!请看代码:
经过100轮的训练,我们的准确率是92.36%。
无脑的浅层神经网络
用了最简单的线性模型,我们换成经典的神经网络来实现这个功能。
我们还是不管三七二十一,建立一个隐藏层,用最传统的sigmoid函数做激活函数。sigmoid的数学形式如下:
其核心逻辑还是矩阵乘法,这里面没有任何技巧。
h = tf.nn.sigmoid(tf.matmul(X, w_h))
return tf.matmul(h, w_o)
完整代码如下,仍然是40多行,不长:
第一轮运行,我这次的准确率只有69.11% ,第二次就提升到了82.29%。跑100轮的最终结果是95.41%,比Logistic回归的强!
请注意我们模型的核心那两行代码,完全就是无脑地全连接做了一个隐藏层而己,这其中没有任何的技术。完全是靠神经网络的模型能力。
深度学习时代方案 - ReLU和Dropout
我们将sigmoid函数换成ReLU函数。
线性整流函数(Rectified Linear Unit, ReLU),又称修正线性单元, 是一种人工神经网络中常用的激活函数(activation function),通常指代以斜坡函数及其变种为代表的非线性函数。
当然,Dropout也是要做的,Dropout可以比较有效地减轻过拟合的发生,一定程度上达到了正则化的效果。于是我们还是一个隐藏层,写个更现代一点的模型吧:
X = tf.nn.dropout(X, p_keep_input)
h = tf.nn.relu(tf.matmul(X, w_h))
h = tf.nn.dropout(h, p_keep_hidden)
h2 = tf.nn.relu(tf.matmul(h, w_h2))
h2 = tf.nn.dropout(h2, p_keep_hidden)
return tf.matmul(h2, w_o)
除了ReLU和dropout这两个技巧,我们仍然只有一个隐藏层,表达能力没有太大的增强。并不能算是深度学习。
从结果看到,第二次就达到了96%以上的正确率。后来就一直在98.4%左右游荡。仅仅是ReLU和Dropout,就把准确率从95%提升到了98%以上。
卷积神经网络出场
接下来,真正的深度学习利器CNN,卷积神经网络出场。这次的模型比起前面几个无脑型的,的确是复杂一些。涉及到卷积层和池化层。
我们看下这次的运行数据:
0 0.95703125
1 0.9921875
2 0.9921875
3 0.98046875
4 0.97265625
5 0.98828125
6 0.99609375
在第6轮的时候,就跑出了99.6%的高分值,比ReLU和Dropout的一个隐藏层的神经网络的98.4%大大提高。因为难度是越到后面越困难。
在第16轮的时候,竟然跑出了100%的正确率:
7 0.99609375
8 0.99609375
9 0.98828125
10 0.98828125
11 0.9921875
12 0.98046875
13 0.99609375
14 0.9921875
15 0.99609375
16 1.0
借助Tensorflow和机器学习工具,我们只有几十行代码,就解决了手写识别这样级别的问题,而且准确度可以达到如此程度。
模型结果展示
说了这么多模型,我们来做个对比:
模型实践显神威
我们再用手写的图片试验一下模型的效果,手写图片如下:
图片处理的方式如下:
import numpy as np
from PIL import Image
img=Image.open(r'图片文件路径').convert('L')
# resize的过程
if img.size[0] != 28 or img.size[1] != 28:
IMG = img.resize((28、28))
ピクセル値の一次元アレイをステージング#
ARR = []
範囲内のiに対する(28):
範囲内のため、J(28):
#0は色を表すMnistは、ブラック1.0(バックグラウンド)白
ピクセル= 1.0 - フロート(img.getpixel((J、I)))/ 255.0
#ピクセル= 255.0 - 色0-255場合フロート(img.getpixel((J、I)))#
arr.append(ピクセル)
ARR1 = np.array(ARR).reshape((1、28、28、1))#1 ARR1は、入力画像データモデルであります
我々は行列を格納するためにコンパイラにインポート画像を見ることができ、数値内部マトリックスは、各画素を表します。
それぞれ出力[2]、[3]、予測成功!デジタルモデルの識別能力を訓練された内容は、まだ非常に強いです。
リアルタイムの手書き文字認識技術に - 私は最近、ペンシルベニア州ペンシルベニアAppleが新しい特許を申請したと聞きました。
ああ手書き電子ノートを福音!
Appleは技術に取り組んでいるとしても、我々は少しを表示することができ、ない超幸せ!
直接コードファイルをダウンロードするには、私たちの公共番ああに注意を払います!閲覧履歴メッセージをすることができます!