新手神器!不用部署深度学习环境、上传数据集!(附代码&视频教程)

来源:互联网 发布:云购开奖计算方式 编辑:程序博客网 时间:2024/06/05 04:42

来源:大数据文摘

作者:Emil Wallnér

本文长度为4600字,建议阅读7分钟

本文带你快速创建神经网络,开启深度学习之旅。



前言


深度学习的浪潮在五年前开始兴起。随着计算能力的爆炸型增长和几个成功的案例,深度学习引起了大肆宣传。深度学习技术可以用来驾驶车辆,在Atari游戏中进行人机对抗,以及诊断癌症。



开始学习神经网络时,我花了两周的时间进行探索,选择合适的工具,对比不同的云服务以及检索在线课程。但回想起来,我还是希望我可以从第一天就能创建神经网络,这也是这篇文章的目的。


你不需要有任何预备知识。当然如果你对Python,命令行和Jupyter notebook有基础的了解会对你有所帮助。


深度学习是机器学习的一个分支,它被证明是一种可以在原始数据(如一幅图、或者一段声音)中找到固定模型的有效方法。 如果你想对猫和狗的图像进行分类。不需要具体的编程,它首先会找到图片中的边,然后从不同的边中构建模式。接下来,它会检测到鼻子,尾巴和爪子。通过这样的方式,神经网络最终可以实现对猫和狗进行分类。


但是,结构化的数据可以使用更好的机器学习算法。举个例子,如果你的excel表中记录了有序的客户数据,你希望可以预测他们的下一张订单,那么你可以使用传统的方法,使用一个更简单的机器学习算法。


核心逻辑


想象一个安装了很多随机调整齿轮的机器。这些齿轮堆叠在很多层上,而且会相互影响。最初,这个机器无法正常工作。然后随机地调整齿轮,直到调整到可以给出正确输出。


然后一个工程师会开始检查所有的齿轮,然后标记出来哪些齿轮会造成误差。他会从最后一层的齿轮开始,因为这里是所有误差累计的结果。一旦他找到了最后一层的误差,他就会开始查看前一层。通过这种方法他可以计算出每一个齿轮对于误差的贡献值。我们把这个过程称为反向传播。


然后这个工程师开始根据之前找到的误差对每一个齿轮进行调整,然后重新运行整个机器。运行机器,计算误差,调整齿轮,不断循环这个过程直到机器给出正确输出。


预测 – 计算误差 – 调整预测值 (训练周期)


神经网络的运行方式也是如此,有输入和输出,然后通过调整齿轮来寻找输入和输出之间的关系。给定一个输入,通过调整齿轮来预测输出,然后将预测值和真实值进行对比。


神经网络通过调整齿轮来追求最小误差(预测值与实际值之间的差异),它会不断调整齿轮,直到预测值与真实值之间的差异尽可能小。


最小化误差的一个最佳方法是梯度下降,即通过误差函数、或者说成本函数来进行误差的计算。


浅层神经网络


许多人认为人工神经网络是我们大脑新皮质的数字化复制品。 这是一个错误的观念。


我们并不知道大脑如何能够做出这样的声明。这只是神经网络发明人弗兰克·罗森布拉特(Frank Rosenblatt)的一个灵感源泉。


浅层神经网络 输入-权重-加和-判断 –> (预测值-实际值)*学习率


与神经网络模拟器玩一两个小时,你就可以获得对其的直观感受。


我们将从实现一个简单的神经网络开始,以了解TFlearn中的语法。从经典的101问题开始,也就是OR运算符。虽然神经网络更适合于其他类型的数据,但这是了解其工作原理的一个很好的问题。



所有的深度学习程序都遵循同样的核心逻辑:


  • 首先加载库,然后加载数据并清洗。不管是照片,音频还是知觉数据,所有的输入都会被转化为数字。这些很长的数字列表就是我们神经网络的输入。

  • 现在开始设计神经网络。选择你的神经网络层的类型和数量。

  • 然后它会进入学习过程。

  • 神经网络知晓输入和输出,然后自行寻找二者之间的关系。
    最后会用训练好的模型中给到你一个预测值。


下面是这个神经网络的程序:



输出:



第一行 以“#”开头的行表示备注,一般用来解释代码


第二行 加载TFlearn库 通过这个语句我们可以使用谷歌Tensorflow的深度学习函数


第五行和第六行 将上述表中的数据存储在列表中


每个数字末尾的点会将整数映射到浮点数。它存储具有十进制值的数字,使计算更加精确。


第七行 初始化神经网络,并指定输入数据的维度或者说尺寸


所有的OR运算都是在一对数据中进行的,所以维度是2.


空值是默认值,表示批量的大小


第八行 输出层


激活函数将过程中的结果映射到输出层


在这个例子中,我们使用Sigmoid函数将其映射到(0,1)区间范围内


第十一行 应用回归


使用优化器选择合适的算法来最小化成本函数
学习率决定了神经网络的调整速度,而损失变量决定了如何计算误差。


第十二行 选择使用哪个神经网络


一般情况下也可以用来指定存储训练日志的位置


第十三行 训练你的神经网络和模型


选择你的输入数据(OR)以及实际的标签(Y_truth)


Epochs决定了你的神经网络运行数据的循环次数


如果你设置 snapshot=True,那么每次循环后都会进行模型验证


第十四到十八行 使用训练好的模型进行预测


在这个例子中,返回的是结果是1/True的概率


输出层:


第一个结果表示[0.]&[0.]组合为真的可能性为4%,以此类推。“Training step”显示了你训练了多少批。


在每一批中所有数据都将训练一次,类似于Epoch。如果数据相对内存较大,你需要停止分段训练。损失函数会计算每一次迭代的错误数量。


SGD指随机梯度下降法及最小化代价函数方法。


Iter指当前数据索引以及输入项的总和。


你可以在大多数TFlearn神经网络中找到上述逻辑和语法。学习这段代码最好的方法就是修改代码并产生一些错误。



损失曲线显示了每一次训练的错误量。


你可以通过Tensorboard来可视化每一次实验,并了解每一个参数是如何影响训练的。


这里有一些你可以运行的例子的建议。我推荐你花费几小时练习这些例子,以更好地适应运行环境以及TFlearn中的参数。


实验


  • 增加训练与迭代次数

  • 尝试添加或改变文档中提到的每一个函数的参数


例如g = tflearn.fullyconnected(g, 1, activation=’sigmoid’)改成tflearn.fullyconnected(g, 1, activation=’sigmoid’, bias=False)在输入项增加整数


  • 改变输入层的形状

  • 改变输出层的激活函数

  • 使用不同的梯度下降方法

  • 改变神经网络计算代价的方式

  • 用X和Y来替代“AND”和“NOT”逻辑运算

  • 例如将最后一项Y_truth从[1.]改为[0.]。为了使其有效,你需要在网络中增加一层。

  • 使其学得更快

  • 想办法使得每一步学习都超过0.1秒


新手入门 


结合Python来使用Tensorflow在深度学习中是最常见的手段。


TFlearn是一个运行在Tensorflow之上的高层次框架。


另一个常见的框架是Keras。这是一个更加健壮的库,但是我发现TFlearn的语法更加简洁易懂。


它们都是运行在Tensorflow之上的高层次框架。


你可以使用你的电脑CPU来运行简单的神经网络。但是大多数实验需要运行数个小时甚至几周。这也是为什么大多数人通过现代GPU云服务来进行深度学习。


最简单的GPU云服务解决方案是FloydHub(https://www.floydhub.com/)。如果你掌握了基础的命令行技能,部署FloydHub将不会超过5分钟。


使用FloyHub文档来安装floyd-cli命令行工具。FloydHub还为遇到问题的客户提供内部客服支持。


阅读全文
0 0