深度学习

理解和使用深度学习网络

行动深入学习 - 第3部分

大家好!它是约翰娜史蒂夫允许我时不时地接管这个博客来谈论深度学习。 我回来看下一集:

“行动中的深度学习:在MathWorks创建的很酷的项目"

这旨在让您深入了解我们在MathWorks上的工作。 今天的演示被召唤“命运之轮”或者“你会给MATLAB签名吗?”这是一系列文章中的第三篇,包括:
这个演示的开发者是Joshua Wang,他领导的团队参加了MathWorks Hack Day,这是一个有趣的日子,MathWorks的开发人员有24小时的时间来做一个与MATLAB相关的项目。这个团队决定做一个手语项目,我被这个例子吸引了,因为#1)这个演示使用了图像,#2)这个演示使用了深度学习,#3)这个演示使用了MATLAB。
当我最初到达Josh时,我得到了这个回复......
......不仅它很酷,Mathworks工具可能会在一天内完成所有这些(我们的编码全部发生在星期三),但它肯定会与我们的社会使命良好。
我很好奇他们是如何在24小时内完成并运行的,所以我要求查看代码。
在查看和运行代码后,看起来工作的重要部分是在MATLAB中一个漂亮的用户界面,看起来像命运之轮:完成一个旋转的轮子和与对手玩游戏的能力。在这里看到游戏的行动:
Matlab中的用户界面很大,但深度学习不是独一无二的。因此,对于这篇文章的剩余部分来说,我想穿越应用程序的深度学习部分:他们如何建立CNN以识别这些字母。我会把Josh问几个问题,并为您提供对josh和团队向josh和团队提出任何问题的机会。

演示:Matlab中的手语
这个演示的基础是让CNN确定哪个字母正在被签名,a到z。这里有一些随机字母的样本图像和它们对应的图像:
>> samples = imds.splitEachLabel(1,'randomize',true);> >蒙太奇(样本)
这些图像来自一个训练数据集,可以从GitHub下载在这里。

深入学习代码
本节将从4个部分介绍创建和训练网络的代码:
  1. 加载数据集
  2. 网络负载
  3. 修改网络
  4. 设置培训选项
%% load数据imds = imageageatastore('dataset',......“IncludeSubfolders”,真的,…“LabelSource”、“foldernames”);[imdsTrain, imdsValidation] = splitEachLabel (imd, 0.7,“随机”);
%% load网络网= inceptionv3 ();lgraph = layerGraph(净);图('单位','标准化','位置',[0.1 0.1 0.8 0.8]);情节(lgraph)

呵!《盗梦空间》是一个复杂的结构。

注意:如果您没有下载Inception-V3,只需键入
> > inceptionv3
在命令行上将提供下载模型的链接。
可以在此处找到所有型号的列表,[包括新的Onnx Model转换器]:https://www.mathwands.com/金宝搏官方网站solutions/deep-learning/models.html.
接下来,更改最后的层以反映数据集中类的数量。由于这是一个DAG网络,添加层,然后验证网络是否重新连接正确。
%%编辑架构InputSize = Net.Layers(1).InputSize;Lgraph = RemoveLayers(Lgraph,{'预测','predictions_softmax','classificationlayer_predictions'});numclasses = numel(类别(imdstrain.labels));newlayers = [全连接列(numclasses,“名称”、“俱乐部”、“WeightLearnRateFactor”10,'biaslearnratefactor',10)softmaxlayer(“名称”、“softmax”) classificationLayer (“名称”、“classoutput”));lgraph = addLayers (lgraph newLayers);lgraph = connectLayers (lgraph,“avg_pool”、“俱乐部”);
接下来,设置培训选项:
图层= lgraph.Layers;Connections = Lcraph.Connections;层(1:110)= FreezeWeights(层(1:110));Lgraph = CreateLgraphusConnections(层,连接);PIXELRANGE = [-30 30];imageaugmenter = imagedataAugmenter(...“RandXReflection”,真的,…“RandXTranslation”, pixelRange,…“RandYTranslation”,pixelrange);Augimdstrain = AugmentedimageGedataStore(Inputsize(1:2),IMDstrain)......'dataaugmentation', imageAugmenter);augimdsValidation = augmentedImageDatastore (inputSize (1:2), imdsValidation);选择= trainingOptions (“个”,......'minibatchsize'10…'maxepochs'6……“InitialLearnRate”,1E-4,......“详细”,真的);
老实说,我还没有爱上增强图像数据存储(因为我不喜欢额外的代码行原本是一个非常简单和容易阅读的部分),但它日益增长的对我在这个例子中,因为它允许您创建额外的样本图像使用翻译,反射,和可伸缩性。它还将所有图像的大小调整为网络所需的适当大小。
最后,训练网络。
网= trainNetwork (augimdsTrain、lgraph选项);
注意:我使用旧的Tesla K40 GPU卡培训了网络,大约需要1小时15分钟运行。我显着削减了培训数据大小,因为事情似乎比我想要的时间更长,所以我想象这会带来更长时间的完整训练。

问答与乔希
1.首先我要问,什么是优质的工程?你做什么工作?
MathWorks的质量工程是一组软件工程师,他们构建基础设施和全面的测试环境,以支持和支持MathWorks的主要目标,即向我们的客户交付无bug、功能丰富的软件。金宝app具体来说,我的工作是网络和云服务,这些服务为MathWorks的在线产品提供动力,如MATLAB online、MATLAB Mobile和MATLAB Grader。
2.您与深度学习的关系是什么?您是否在您的角色深入了解您的角色,或者在工作之外感兴趣,或两者兼而有之?
我在MathWorks并不直接从事深度学习的工作。然而,机器学习的最新进展有很大潜力改变客户在日益互联的世界中使用我们的产品的方式,我们的hack day项目旨在展示一种方法,我们可以使用深度学习使科学计算更直观、上下文相关和可访问。下载188bet金宝搏
3.谁的想法是一个手语项目,为什么?
我们的使命是为技术计算、可视化、设计、仿真和实现提供最终的计算环境,使MATLAB对任何人,包括那些听力受损的人,是一个重要的部分。此外,通过手势控制使MATLAB更易于使用将加速工程和科学的步伐,使其在人们可能无法轻松使用传统输入机制的环境中使用,如手术室或工厂车间。
4.你为什么选择转学《盗梦空间3》?
Inception v3比像GoogLeNet这样的模型具有更高的准确性,并且在MATLAB中可以很容易地获得示例。
5.您的验证准确性大致是什么?
对于不熟悉美国手语的人来说,大概是70%。某些字母非常相似,因此我们的模型更难区分,比如M和N,而且我们的训练数据集相当同一性——从同一背景下的一个人的右手开始。考虑到这是一天的工作,我们没有花很多时间调优模型或改进训练数据。
6.你对6个时代的理论基础是什么?是训练时间,还是准确性?如果你有更多的时间,你会训练更长的时间吗?
我不认为我们有任何真正的原因,甚至每个人都没有意识到我们选择了6个纪元-我们只是采用了MATLAB或Github项目中可用的默认值,我们用于初始原型。
感谢团队的演示(整个团队组成:Anil Patro,Oral Dalay,Harshad Tambekar,Krishan Sharma,Rohit Kudva,Michael Broshi和Sara Burke)并感谢Josh花时间走过我的时间!我希望你也喜欢它。还有什么你想问团队的吗?留下评论! (希望他们不介意我在团队的一张照片中。恭喜一下工作岗位!)
|
  • 打印
  • 发电子邮件

评论

要发表评论,请点击在这里登录您的MathWorks帐户或创建新的。