深度学习的编程工具Tensorflow

TensorFlow™是一个基于数据流编程(dataflow programming)的符号数学系统,被广泛应用于各类机器学习(machine learning)算法的编程实现,其前身是谷歌的神经网络算法库DistBelief。

<p class='ai8py-video'>
<iframe height=498 width=510 src='https://player.youku.com/embed/XNTg3OTU3MDc0OA==' frameborder=0 'allowfullscreen'></iframe>
</p>

在接下来的两讲中
我们将讲解深度学习的编程工具
咖啡和tensorflow的基础使用规则
最初的深度学习编程工具主要由研究人员义务开发
免费发布供大家使用
卢卡费就是在2014年由美国加州大学伯克利分校贾扬清开发
随着深度学习技术的逐渐普及
开发深度学习的编程工具变得有利可图
因此近年来编程工具的主要开发者变成了公司
这里是各种开发工具演变的历程
其中cafe pytorch和tensorflow分别由facebook和google两家公司运营和维护
从影响力和使用频率来说
他们也是目前深度学习编程工具的三强
其他的相对著名的工具还包括百度公司开发的pd
microsoft开发的c n t k以及moon开发的mx net等等
编程工具
竞争的背后是软件和硬件整个标准的全面竞争
我们也希望中国的企业和科研机构能在这样的竞争中有所作为
在软件的应用方面总是存在易用性和灵活性的矛盾
例如最初的卡费只支持卷积神经网络这一种深度学习的模型
因此它的代码简洁易懂
容易移植
近年来
随着相关领域研究的深入
灵活性的要求变得更多
能够适应多种深度学习模型的编程工具
如pytorch和tensorflow
也包括新一代的咖啡兔等等
逐渐占据了主流的地位
在这一讲中
我们首先结合l net的例子来讲tensorflow的基本语法
tensorflow是以python程序设计语言为接口
我们打开附件中的nmn dotpy文件
可以看到第一行到第12行是载入程序的各种库
接下来第14行是读入训练和测试的数据
按照前面的描述
m st数据集中包含6万张
28×28的二值图像
分别属于0~9这十个类别
第16行到第28行
定义了卷积神经网络中常用的几个函数
前两个函数wait variable和bers variable
分别对卷积神经网络中的权重和偏置进行初始化
第三个函数coo nv to d是卷积操作最后一个函数
max pool to markely to是最大石化操作
第31到第33行是初始化的操作
tensorflow的语法规则是首先开启一个流程
在程序里面用cs s s s来表示
然后把整个流程设置清除了
过后再去运行它
例如第31行是开启流程的操作
而直到第75行才让整个流程运行起来
而中间就是对这个流程的描述
32和33行描述的是输入和输出
由于输入是28×28的二值
图像总共784位
而类别的数量是十
因此在这两行中都有体现
值得注意的是
让这里是占位符
它代表的是输入样本的个数
由于到现在没有确定
因此用浪进行站位
tensorflow的特点之一是先用占位符让流程走下去
到后面再一步一步的明确细节
例如直到第79行和第81行
才把x和y下划线这两个变量赋值清楚
从而完全确定总共有多少张图片
第35行到第66行设置了l net的网络结构
我们对照l net的网络结构图来详细的说明
在l net的网络结构图中
第一个卷积层是用六个5×5的卷积和卷积原图像
产生六张28×28的特征图
我们对照程序的第35到第42行
很容易看懂这些程序
值得注意的是
第41行c o n v to d函数
第三个变量same表示输入图像自动补零
使得输出的特征图的维度和输入是一样的
如果第三个变量改为valid
那么就表示不补零
那么输出的特征图的维度将相比于输入的特征图有相应的减少
第二个卷积层是16个5×5的卷积核
将输入的六个14×14的特征图变成16个10×10的特征图
从程序中44~49行可以获得
接下来第51到第68行是三个全连接层
对照l net的结构图
很容易看懂这些程序
值得注意的是
我们引入了dropout
其中keep prop这个变量表示的是我们需要保留多少比例的神经元
在程序中被赋值为50%
接着从第70行到第81行是训练的过程
在第71行中设置目标函数为交叉商
第72行表示利用a档优化策略进行训练
第76到第81行是整个训练的循环过程
其中第77行说明每个batch有50个训练样本
由于总共有6万个训练样本
因此每120 零个batch便利所有训练样本一次
第76行表明总共有1000次去b取的操作
因此整个训练过程总共便利了训练样本100次
最后第83行打印出测试集上的训练结果
下面我们演示一下程序的运行情况
打开pyh
我们进行了设置过后
我们就可以运行这个程序了
点击run
我们可以看到运行需要一定的过程
现在开始了
每隔100步
也就是每遍历所有的训练样本一次
我们测试一下它的识别率
可以看到识别率处于一个不断增长的过程
由于训练需要一定的时间
所以说我们在这里省略掉后续的运行过程
运行结束过后
我们可以看到在测试集上识别率为97.33%
在这一讲中
我们基于net讲解了tensorflow的基本语法规则
我们将演示的程序放在网站上供大家下载
希望大家根据tensorflow的网站以及网上其他的参考资料
在自己的计算机上调通这个程序
我们也欢迎学有余力的同学自己去钻研tensorflow的编程技巧
构建更加复杂的深度学习模型
本讲就到这里
谢谢同学们

发表评论

邮箱地址不会被公开。 必填项已用*标注