beplay体育手机官网安卓版计算遇上知识

beplay体育手机官网安卓版Wolfram神经网络训练营回顾:狗vs蝴蝶光学错觉对决

beplay体育手机官网安卓版Wolfram神经网络训练营回顾:狗vs蝴蝶光学错觉对决

神经网络越来越多地成为社会的一部分,并被用于生活的许多方面,特别是电子商务和社交媒体。我最近有机会参加beplay体育手机官网安卓版Wolfram神经网络训练营与开发人员和研究人员一起设计和利用beplay体育官网下载app神经网络资源。在训练营期间,参与者接受了使用沃尔夫拉姆语言使用神经网络的速成课程。beplay体育官网下载appbeplay体育手机官网安卓版

beplay体育手机官网安卓版Wolfram的开发者和研究员Markus van Almsick向与会者介绍了用于计算机视觉和深度学习图像分类的Wolfram语言的结构和特征。beplay体育官网下载app在这次会议上,他解释了如何为计算机创建一个光学错觉。这是什么意思?欺骗人的视错觉也会欺骗电脑吗?也许反之亦然?

这篇博客是对神经网络和计算机视觉初学者的一次探索,使用了一个计算机视觉缺点的例子。欺骗神经网络是一个入门生成对抗网络(GANs).如果你有兴趣学习神经网络的完整介绍或复习,你应该阅读Tuseeta Banerjee的博客文章“神经网络:简介.”

计算机怎么看?

计算机将图像视为等级3张量.图像中的每个像素都有三个对应于红、绿、蓝(RGB)的值。计算机读取这三个值,并将它们转换成我们可以看到和理解的光。例如,这些值会生成当前屏幕上的颜色。

人类擅长模式识别。我们可以在任何地方找到图案:脸、云的形状和许多其他地方其中包括面包.尽管神经网络完成了与人类相似的视觉任务,但仍存在实质性差异。

与周边视觉相比,人类视网膜的中心提供了更高的分辨率。相比之下,计算机对整个图像中每个像素的RGB值进行相等的加权。此外,人类很容易识别对齐的、定向的特征,而神经网络在纹理识别方面很难被击败。在研究人类和机器所相信的视错觉时,这些差异变得明显起来。

让我们利用一些示例数据beplay体育手机官网安卓版Wolfram数据存储库为了证明这一点。

imgArray = {ExampleData
& # 10005

imgArray = {ExampleData[{"TestImage", "Airplane2"}], ImagePerspectiveTransformation[ExampleData[{"TestImage", "Airplane2"}], \!\ (\ * TagBox [RowBox[{”(“,格子里[{{“1”,RowBox[{“1”、“/”、“3”}],“0”},{RowBox[{“1”、“/”、“3”}]," 1 "," 0 "},{" 0 ",RowBox[{“/”“1”,“2”}]," 1 "}},GridBoxAlignment - >{“列”- - - >{{中心}},“ColumnsIndexed " -> {}, " 行”——>{{基线}},“RowsIndexed " -> {}}, GridBoxSpacings - >{“列”- >{抵消(0.27999999999999997),{抵消[0.7]},抵消[0.27999999999999997]}”ColumnsIndexed " -> {}, " 行”——>{抵消[0.2],{抵消[0.4]},抵消[0.2]},“RowsIndexed " -> {}}], ")"}],函数[BoxForm 'e $, MatrixForm[BoxForm 'e $]]]\), Background -> Transparent, Masking -> All]}

Wolfbeplay体育手机官网安卓版beplay体育官网下载appram语言神经网络驱动函数ImageIdentify将尝试识别原始图像和转换后的图像。

ImageIdentify /@ imgArray
& # 10005

ImageIdentify /@ imgArray

这让人感觉问题得到了解答。变形图像很容易,但这可能会使图像甚至人类都难以识别。为什么不试着创造一张图像,既能骗过神经网络,又不会完全变形呢?

狗对蝴蝶

在神经网络训练营期间,我们对Wolfram语言用户目前可用的训练过的神经网络进行了有趣而相对简单的探索。beplay体育官网下载appbeplay体育手机官网安卓版

inceptNet = NetModel
& # 10005

inceptNet = NetModel["Inception V1训练ImageNet竞赛数据"]

Inception V1是谷歌在2014年发布的一个神经网络。与会者学习了如何访问beplay体育手机官网安卓版Wolfram神经网络存储库(为各种应用程序预先制作和预先训练的网络,可以通过使用找到和编程调用NetModel).这NetChain是一个完整的模型,在前面的例子中用于进行预测,可以用新数据进行训练,甚至重构(也称为网络手术和迁移学习).

第一步是定义我们希望如何预测测试图像。我们将从数据存储库中提取一只狗和一只蝴蝶的示例图像。

butterfly = ResourceData
& # 10005

butterfly = ResourceData["样本图像:紫色花朵上的橙色蝴蝶"]

dog = ResourceData
& # 10005

dog = ResourceData["样本图像:沙滩上的白狗"]

Inception V1识别出第一个图像中有一只蝴蝶。

inceptNet
& # 10005

inceptNet(蝴蝶)

Inception V1网络存储了图像所代表的每个选项的概率,我们可以提取它认为最有可能的识别。

inceptNet
& # 10005

inceptNet[狗,{" topprobability ", 3}]

下面是狗和蝴蝶图像是狗或蝴蝶的概率。在这两种情况下,它都不是选项之一。

{实体
& # 10005

{实体["概念","DanausPlexippus::bfk9c"],实体["概念","Samoyede::rq827"]} /。inceptNet(狗,“概率”)

{实体
& # 10005

{实体["概念","DanausPlexippus::bfk9c"],实体["概念","Samoyede::rq827"]} /。inceptNet(蝴蝶,“概率”)

目标是让盗梦空间V1有很大的概率或信心相信蝴蝶的图像是一只狗,特别是一只萨摩耶。这是通过增加其他概念的概率来实现的。关键是在蝴蝶图像中创建神经网络在识别狗时寻找的特征。

为此,我们将实现一种新的神经网络叫做foolNet.它将包含蝴蝶图像作为权重数组,并修改这些权重以将图像分类从“Monarch butterfly”更改为“Samoyed”。

构建网络的第一步是从Inception V1网络中提取输入图像的尺寸和颜色通道的数量以及NetDecoder使用它的输出类。这些参数在以后的构造中是需要的foolNet

imageDims = NetExtract
& # 10005

imageDims = NetExtract[inceptNet, {"Input", "ImageSize"}];imageChannels = NetExtract[inceptNet, {"Input", "ColorChannels"}];解码器= Normal@NetExtract[inceptNet, "Output"];decodeDims =解码器["Dimensions"];foolNetEncoder = NetEncoder[{"Class", decoder["Labels"], "UnitVector"}];

为了引起错误分类,我们应用了一个修改过的CrossEntropyLossLayer到Inception V1。这一层做了大部分的跑腿工作foolNet通过将得到的1000种分类概率与狗的分类概率进行比较。

featureLossLayer = CrossEntropyLossLayer
& # 10005

featureLossLayer = CrossEntropyLossLayer["概率"]

foolNet本质上是简单的。蝴蝶的图像将被存储为a中的权重张量NetArrayLayer的输入inceptNet

imgWeights = ImageData
& # 10005

imgWeights = ImageData[ImageResize[butterfly, imageDims, Resampling -> {"OMOMS", 3}], Interleaving -> False];

新网络是用NetGraph而且NetPort

foolNet
& # 10005

foolNet[img_Image]:= With[{imgWeights = ImageData[ImageResize[img, imageDims, Resampling -> {"OMOMS", 3}], Interleaving -> False]}, NetGraph[<| "image" -> NetArrayLayer["Array" -> imgWeights], "inceptnet" -> NetReplacePart[inceptnet, {"Input" -> Prepend[imageDims, imageChannels], "Output" -> {decodeDims}}], "loss" -> featurelosslayer |>, {"image" -> "inceptnet", {"inceptnet", NetPort["Target"} -> "loss" -> NetPort[" loss"}, "Target" -> foolnetencoder]]]

请注意,foolNet不需要训练数据。我们只提供错误分类的目标标签,这相当于批处理大小为1。此外,几乎所有LearningRateMultipliers设置为没有一个避免(再)训练inceptNet本身。只有蝴蝶图像层的学习率被设置为1。

训练=网络训练
& # 10005

training = NetTrain[foolNet[butterfly], <|"Target" -> {inceptNet[dog]}|>, All, learningratemulti- > {"image" -> 1, _ -> None}, MaxTrainingRounds -> 300, BatchSize -> 1, TargetDevice -> "CPU"];

观察结构foolNet,因为它本质上还是同一个网络。然而,模型用来了解跟踪数据的度量标准被改变了。foolNet最小化创建的新图像的损失(或不正确的概率)。

愚网=训练
& # 10005

愚网= training["训练网"]

foolNet使用Inception V1的结构和额外的损耗层。输出或目标是修改权重张量。这个张量也可以转换回图像。

maybedog = ImageResize
& # 10005

maybedog = ImageResize[图像[NetExtract[NetExtract[fooledNet, {" Image ", "Array"}], Interleaving -> False], ImageDimensions[butterfly], Resampling -> {"OMOMS", 3}]

这张照片虽然模糊,但看起来像一只蝴蝶,大多数人都能认出它是一只蝴蝶。然而,在Inception V1中进行测试会产生特殊的结果。

inceptNet
& # 10005

inceptNet[maybedog, {" topprobability ", 5}]

现在,比较蝴蝶和萨摩犬的识别概率:

{实体
& # 10005

{实体["概念","DanausPlexippus::bfk9c"],实体["概念","Samoyede::rq827"]} /。inceptNet (maybedog,“概率”)

ImageDifference
& # 10005

ImageDifference[butterfly, maybedog] //

盗梦空间V1现在非常确定它看到了一只萨摩耶狗,或者至少它确定图像不是一只蝴蝶。蝴蝶翅膀的整体图案都没有改变,所以这是一个经过认证的计算机光学错觉。神经网络被看似轻微的调整所愚弄,因为它们不是人类的大脑;它们受到相对来说非常简单的方法的限制。这意味着神经网络可以错误地对稍微修改过的图像进行分类。

在庆祝我们对神经网络的霸权之前,值得注意的是,简单地模糊生成的图像会使Inception V1再次正确地识别出蝴蝶。

模糊
& # 10005

模糊(maybedog 3)

inceptNet
& # 10005

inceptNet [[maybedog 3]]模糊

正如在神经网络训练营中解释的那样,这种方法是特定于网络和图像的。给定一个新的网络或图像,这个过程必须重复并可能进行修改。愚弄或击败一个神经网络被扩展并应用于GANs。

额外的资源

本文探讨的只是Wolfram神经网络训练营涵盖的众多主题之一。beplay体育手机官网安卓版如果你有兴趣学习更多关于神经网络的结构,并在Wolfram语言中使用它们,可以看看这些资源:beplay体育官网下载appbeplay体育手机官网安卓版

看看剩下的beplay体育手机官网安卓版Wolfram U的课程和教程,学习如何在广泛的领域和应用中使用Wolfram技术。beplay体育网页登录文明网beplay体育手机官网安卓版

让你的计算成就得到认可beplay体育手机官网安卓版Wolfram认证

评论

加入讨论

请输入您的评论(至少5个字符)。

请输入您的姓名。

请输入有效的电子邮件地址。

3评论

  1. 感谢这篇有趣的文章。然而,这里面有某种隐含的神经网络故障。这只蝴蝶被认为是帝王蝶,但我很确定,这张照片显示的是一位彩绘的女士(vanessa cardui)。
    致以最诚挚的问候Jürg

    回复
Baidu
map