人工智能

应用机器学习和深度学习

新的深度学习例子

在最新版本中,有超过35个与深度学习相关的新示例。要讲的内容太多了,发行说明可能会有点枯燥,所以我找来了增援。我请文档团队的成员分享他们创建的一个新示例,并回答了一些关于为什么他们对此感到兴奋的问题。欢迎在下面的评论区提问!
新的深度网络设计器示例
深度网络设计器(DND)自2018年以来一直是深度学习工具箱的旗舰应用程序。上一个版本(20a)在应用程序中引入了训练,但你只能训练图像分类。在20b中,训练被大规模扩展,以涵盖更多的深度学习应用。
新功能允许导入和可视化新的数据类型,从而支持时间序列、图像到图像回归和语义分割等工作流。这个例子展示了如何使用DND训练语义分割网络。

深度网络设计器输入数据的可视化

告诉我们其中的亮点:这个版本的应用程序有了更多的灵活性;您可以导入任何数据存储,并训练使用的任何网络trainnetwork.这打开了时间序列训练和图像到图像回归工作流。您还可以在训练之前直接在应用程序中可视化输入数据。虽然这是一个简单的示例,但它会遍历每一个步骤并半快速地进行训练。
创建示例时有什么困难吗?不是挑战本身,但这个例子涉及到很多组件:语义分割,图像处理,计算机视觉,以及如何在应用程序的上下文中使用和解释它们unetlayers所以我也得好好研究一下
还有什么?
  • 我还创建了一个“概念页面,这是我尝试和测试应用程序的结果。我想提供可以立即与应用程序一起使用的数据。许多其他示例需要清理和预处理,因此,我想提供可以直接运行的开箱即用数据。如果你从空白的MATLAB开始,你可以运行任何这些代码片段(时间序列,图像,像素等),这可以用作DND工作流的起点。这是快速导入数字数据的代码:
dataFolder = fullfile(toolboxdir('nnet'),'nndemos','nndatasets','DigitDataset');imds = imageDatastore(dataFolder, ' inclesubfolders ',true,…“LabelSource”、“foldernames”);imageAugmenter = imageDataAugmenter('RandRotation',[1,2]);augimds = augmentedImageDatastore([28 28],imds,'DataAugmentation',imageAugmenter);Augimds = shuffle(Augimds);
使用这些代码片段作为起点,并尝试为您自己的数据集和应用程序调整它们!
  • 我还为那些对语义分割感兴趣的人创建了一个图像到图像的回归示例。这个例子还介绍了使用DND进行图像去模糊的完整工作流程。
除了你的工作,有没有其他可以在20b中尝试的例子的建议?
  • LIME非常酷:它很有趣(也很有用),可以看到网络实际上学到了什么(我们在下面的特色示例中介绍!
  • 这里有一个新的样式转换示例可以在github上找到太!
感谢Jess的洞察力和建议!例子在这里
用imageLIME可视化预测
深度学习工具箱中已经使用了一两次grade - cam和遮挡灵敏度来可视化使网络预测特定类别的数据区域。这个版本采用了一种新的可视化技术,叫做LIME。这个新例子使用imageLIME可视化。
什么是LIME -在60秒或更短的时间内?LIME代表局部可解释模型不可知解释,它的实现比Grad-CAM算法稍微复杂一些。您向LIME算法提供一个数据点,然后该算法扰动数据以生成一堆示例数据。然后,该算法使用这些样本来拟合一个简单的回归模型,该模型具有与深度网络相同的分类行为。由于这些扰动,您可以看到数据的哪些部分对类预测最重要。模型不可知(model -不可知论)意味着你如何得到原始模型并不重要,它只是显示了初始数据块变化的本地化分数。
最重要的是要记住LIME计算特征重要性的地图,向您显示图像中对类别分数影响最大的区域。这些区域对于特定的类别预测是必不可少的,因为如果它们在受扰动的图像中被移除,分数就会下降。

说句题外话,我不得不问:狗的形象是什么?我们在深度学习中经常使用它:它与MATLAB一起发布,很容易展示!这只狗的名字叫夏洛克,属于MathWorks的一名开发人员。我们决定使用此图像作为示例,因为我们使用了带有遮挡灵敏度和渐变- cam的相同图像。使用相同的图像进行所有可视化可以帮助您比较和突出算法之间的相似或不同之处。事实上,在这个例子中比较LIME和Grad-CAM
你可以把这3种算法放在一起看:
图像石灰 Grad-CAM 闭塞的敏感性
链接到例子 链接到例子 链接到例子
显示可用的可视化算法的并排比较。所有算法都可以显示热图,但LIME也可以显示漂亮的超像素区域(如上所示)。 LIME结果也可以通过只显示最重要的几个特征来绘制:

创建示例时有什么困难吗?这个例子是之前其他可视化工作的一个很好的延续,所以创建这个例子是相当简单的。唯一的挑战是决定函数的名称:我们应该称它为imageLIME,还是LIME,甚至是deepLIME。我们为此争论了一会儿。
还有什么?
  • 顾名思义,函数imageLIME主要用于图像。但是,它适用于任何使用imageInputLayer,所以它可以用于时间序列,频谱或甚至是文本数据
  • 我的同事用了一个非常有趣的例子作为这个例子的补充。她向算法展示了许多动物园动物的图片,然后使用LIME定位到一个特定的动物。

这个例子使得LIME几乎像一个用于动物检测的语义分割网络!
Net = googlenet;inputSize = net.Layers(1).InputSize(1:2);Img = imread("animals.jpg");img = imresize(img,inputSize);imshow(img) classList = [categorical("老虎")categorical("狮子")categorical("豹子")];[map, feature map, featImp] = imageLIME(net,img,classList);fullMask = 0 (inputSize);for j = 1: number (classList) [~,idx] = max(featImp(:,j));mask = ismember(featMap,idx);fullMask = fullMask +掩码; end maskedImg = uint8(fullMask).*img; imshow(maskedImg)
除了这个例子,还有其他关于20b的例子吗?
  • minibatchqueue是新的。它不是特别华丽,但非常有用。Minibatchqueue是一种管理和处理自定义培训工作流数据的新方法。这只是一种更好的自定义训练循环数据管理方式,而且更易于阅读。
感谢索菲亚提供的信息和建议,尤其是动物图片!!例子在这里
新特征输入trainnetwork
今天我们的最后一个特色示例强调了一个更高级的示例。在此版本之前,网络支持仅限于图像或序列数据。20b引入了一个新的输入层:featureInputLayer
这一层可以解锁新类型的数据:通用数据.它不再需要是连续的数据,比如时间序列数据。本例中的数据是换挡数据,因此每一列对应一个传感器的值:例如温度和其他单个值。每一行都是一个观察值。
链接到示例是在这里。
这个工作流听起来像传统的机器学习工作流。对重叠有什么担心吗?这个例子缩小了传统机器学习之间的差距,并允许用户同时探索ML和DL。在此版本之前,单个特征数据只能在传统的机器学习工作流中工作。
你期望特征输入比其他深度学习例子运行得更快吗?当然,我不得不说,“这要看情况”,但我发现这个例子训练得非常快(几秒钟)。你不用处理大图像,所以它可以训练得更快。此外,如果你的模型像这个一样简单,你可能需要更少的时间。
创建示例时有什么困难吗?在你获得数据后,它基本上与训练任何网络的工作流程相同,但在经历这个工作流程时请记住两件事:
  1. 你不能做基于图像的卷积,但有了这样的数据,网络可能不需要那么复杂。
  2. 另一件需要考虑的事情是分类数据。传感器数据有时可以是字符串值,例如“on”或“off”,而不是数值。深度学习网络不会接受这些值输入,所以你必须使用onehotencode(也是一个新功能,使此工作流程成为可能),它将分类标签转换为二进制。
显示简单的实现onehotencode
  • 这个例子的另一个扩展是同时使用两个image而且同一网络中的特征数据。这个例子使用手写数字(图像)和角度(特征)作为输入。它使用自定义训练循环来处理不同的输入,但它解锁了一种全新的网络类型。
除了这个例子,还有其他关于20b的例子吗?
  • 如果您正在做非常低级的工作,您将使用模型函数选项来定义和训练您的网络。这个概念页显示所有内置层、默认初始化以及如何自己实现它。
  • 还有一个新的流程图页面,显示了哪种训练方法最适合你的特定深度学习问题。这将帮助你在简单的选择中做出选择trainnetwork选项,以更高级的自定义训练循环选项。
帮助确定使用哪种训练风格的流程图。链接到完整的流程图示例是在这里
感谢Ieuan提供的信息和建议!示例的链接在这里
从医生组直接给你!我不得不说我是“概念页”的粉丝,希望这种趋势继续下去!再次感谢杰西,索菲亚和伊安。我希望这篇文章对你有帮助。如果你对团队有任何问题,请在下方留言!
|
  • 打印
  • 发送电子邮件

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。

Baidu
map