主要内容gydF4y2Ba

训练一个暹罗网络降维gydF4y2Ba

这个例子展示了如何训练一个暹罗网络使用降维来比较手写数字。gydF4y2Ba

暹罗网络是一种深入学习网络,它使用具有相同架构的两个或多个相同的子网,并共享相同的参数和权重。暹罗网络通常用于涉及在两个可比较的事物之间找到关系的任务。暹罗网络的一些常见应用包括面部识别,签名验证[1],或解释识别[2]。暹罗网络在这些任务中表现良好,因为它们的共享权重意味着在培训期间可以学习的参数较少,并且它们可以通过相对少量的培训数据产生良好的结果。gydF4y2Ba

暹罗网络特别有用的情况下,有大量的类与少量的观察每个。在这种情况下,没有足够的数据来训练深度卷积神经网络来将图像分类。相反,Siamese网络可以确定两个图像是否属于同一类。该网络通过降低训练数据的维数并使用基于距离的代价函数来区分类来实现这一点。gydF4y2Ba

此示例使用暹罗网络,用于减少手写数字图像的一系列图像。暹罗架构通过将具有相同类的图像映射到低维空间中的附近点来减少维度。然后使用减少特征表示来从与测试图像中最相似的数据集中提取图像。该示例中的训练数据是28×28-×1的图像,提供784的初始特征维度。暹罗网络将输入图像的维度降低到两个特征,并训练以输出类似的减少功能具有相同标签的图像。gydF4y2Ba

您还可以使用暹蒙网络直接比较它们来识别类似图像。例如,看到gydF4y2Ba训练一个暹罗网络来比较图像gydF4y2Ba.gydF4y2Ba

负载和预处理培训数据gydF4y2Ba

加载培训数据,由手写数字的图像组成。这个函数gydF4y2Badigittrain4darraydata.gydF4y2Ba加载数字图像及其标签。gydF4y2Ba

[xtrain,ytrain] = DigitTrain4darraydata;gydF4y2Ba

XTrain.gydF4y2Ba是一个28×28×1-×5000阵列,包含5000个单通道图像,尺寸为28×28。每个像素的值都在gydF4y2Ba0gydF4y2Ba和gydF4y2Ba1gydF4y2Ba.gydF4y2Baytrain.gydF4y2Ba是一个包含每个观测值的标签的分类向量,这些标签是从0到9的数字,对应于所写数字的值。gydF4y2Ba

显示随机选择的图像。gydF4y2Ba

perm = randperm(numel(ytrain),9);imshow(imtile(xtrain(::::,perm),gydF4y2Ba“ThumbnailSize”gydF4y2Ba100年[100]));gydF4y2Ba

创建成对类似和不同的图像gydF4y2Ba

为了训练网络,数据必须被分组成一对对相似或不同的图像。在这里,相似的图像被定义为具有相同的标签,而不同的图像具有不同的标签。这个函数gydF4y2BagetsiameSebatch.gydF4y2Ba(定义在gydF4y2Ba金宝app支持功能gydF4y2Ba)创建随机配对的相似或不同的图像,gydF4y2BapairImage1gydF4y2Ba和gydF4y2BapairImage2gydF4y2Ba.该函数还返回标签gydF4y2BaBiaplabel.gydF4y2Ba,它可以识别这对图像是相似的还是不同的。相似的图像有gydF4y2BaBiaplabel = 1gydF4y2Ba,而不同的一对则有gydF4y2BaBiaplabel = 0.gydF4y2Ba.gydF4y2Ba

例如,创建一个小型代表性的五对图像集gydF4y2Ba

Batchsize = 10;[Piapage1,BileImage2,Biaplabel] = GetsiameSebatch(XTrain,Ytrain,Batchsize);gydF4y2Ba

显示生成的图像对。gydF4y2Ba

为gydF4y2Bai = 1:批量化子图(2,5,i)imshow([绑架1(::,:,:,:,i)pireimage2(:,:,:,i)]));gydF4y2Ba如果gydF4y2BapairLabel(i) == 1 s =gydF4y2Ba“相似”gydF4y2Ba;gydF4y2Ba别的gydF4y2BaS =gydF4y2Ba“不同”gydF4y2Ba;gydF4y2Ba结束gydF4y2Ba标题gydF4y2Ba结束gydF4y2Ba

在这个例子中,每个训练循环的迭代都会创建一个由180对图像组成的新批。这保证了网络是在大量的随机图像对上训练的,相似和不相似的图像对的比例大致相等。gydF4y2Ba

定义网络架构gydF4y2Ba

Siamese网络体系结构如下图所示。gydF4y2Ba

在本例中,两个相同的子网被定义为一系列具有ReLU层的完全连接层。创建一个网络,接受28乘28乘1的图像,并输出用于简化特征表示的两个特征向量。该网络将输入图像的维数降低为2,这个值比初始维数784更容易绘制和可视化。gydF4y2Ba

对于前两个完全连接的图层,请指定1024的输出大小并使用HE权重初始化程序。gydF4y2Ba

对于最终完全连接的图层,请指定两个输出大小并使用HE权重初始化程序。gydF4y2Ba

图层= [imageInputlayer([28 28],gydF4y2Ba“名字”gydF4y2Ba,gydF4y2Ba'输入1'gydF4y2Ba,gydF4y2Ba“归一化”gydF4y2Ba,gydF4y2Ba“没有”gydF4y2Ba)全连接列(1024,gydF4y2Ba“名字”gydF4y2Ba,gydF4y2Ba'fc1'gydF4y2Ba,gydF4y2Ba'掌控itializer'gydF4y2Ba,gydF4y2Ba'他'gydF4y2Ba) reluLayer (gydF4y2Ba“名字”gydF4y2Ba,gydF4y2Ba'relu1'gydF4y2Ba)全连接列(1024,gydF4y2Ba“名字”gydF4y2Ba,gydF4y2Ba'fc2'gydF4y2Ba,gydF4y2Ba'掌控itializer'gydF4y2Ba,gydF4y2Ba'他'gydF4y2Ba) reluLayer (gydF4y2Ba“名字”gydF4y2Ba,gydF4y2Ba'relu2'gydF4y2Ba) fullyConnectedLayer (2gydF4y2Ba“名字”gydF4y2Ba,gydF4y2Ba'fc3'gydF4y2Ba,gydF4y2Ba'掌控itializer'gydF4y2Ba,gydF4y2Ba'他'gydF4y2Ba)];Lgraph = LayerGraph(层);gydF4y2Ba

为了使用自定义的训练循环来训练网络并使其能够自动区分,将层图转换为gydF4y2BadlnetworkgydF4y2Ba目的。gydF4y2Ba

dlnet = dlnetwork (lgraph);gydF4y2Ba

定义模型渐变功能gydF4y2Ba

创建功能gydF4y2BaMapicalGRADENTERS.gydF4y2Ba(定义在gydF4y2Ba金宝app支持功能gydF4y2Ba这个例子的一部分)。的gydF4y2BaMapicalGRADENTERS.gydF4y2Ba函数取暹罗语gydF4y2BadlnetworkgydF4y2Ba对象gydF4y2BaDLNET.gydF4y2Ba和gydF4y2Ba迷你批次输入数据gydF4y2BaDLX1.gydF4y2Ba和gydF4y2BaDLX2.gydF4y2Ba他们的标签gydF4y2BapairLabelsgydF4y2Ba.该函数返回损耗值和损耗相对于网络的可学习参数的梯度。gydF4y2Ba

暹罗网络的目的是输出每个图像的特征向量,使得特征向量类似于类似图像,并且显着不同于不同图像。以这种方式,网络可以区分两个输入。gydF4y2Ba

找到来自最后一个完全连接的层的输出之间的对比损失,特征向量gydF4y2Ba特点1gydF4y2Ba和gydF4y2Ba特点1gydF4y2Ba从gydF4y2BapairImage1gydF4y2Ba和gydF4y2BapairImage2gydF4y2Ba,分别。一对的对比损耗由[3]给出gydF4y2Ba

损失gydF4y2Ba =gydF4y2Ba 1gydF4y2Ba 2gydF4y2Ba ygydF4y2Ba dgydF4y2Ba 2gydF4y2Ba +gydF4y2Ba 1gydF4y2Ba 2gydF4y2Ba (gydF4y2Ba 1gydF4y2Ba -gydF4y2Ba ygydF4y2Ba )gydF4y2Ba 最大限度gydF4y2Ba (gydF4y2Ba 米gydF4y2Ba 一个gydF4y2Ba rgydF4y2Ba ggydF4y2Ba 我gydF4y2Ba ngydF4y2Ba -gydF4y2Ba dgydF4y2Ba ,gydF4y2Ba 0gydF4y2Ba )gydF4y2Ba 2gydF4y2Ba ,gydF4y2Ba

在哪里gydF4y2Ba ygydF4y2Ba 是该对标签的值(gydF4y2Ba ygydF4y2Ba =gydF4y2Ba 1gydF4y2Ba 用于类似图像;gydF4y2Ba ygydF4y2Ba =gydF4y2Ba 0gydF4y2Ba 对于不同的图像),和gydF4y2Ba dgydF4y2Ba 两个特征向量之间的欧氏距离是多少gydF4y2Ba f1gydF4y2Ba 和gydF4y2Ba f2gydF4y2Ba :gydF4y2Ba dgydF4y2Ba =gydF4y2Ba ‖gydF4y2Ba f1gydF4y2Ba -gydF4y2Ba f2gydF4y2Ba ‖gydF4y2Ba 2gydF4y2Ba .gydF4y2Ba

的gydF4y2Ba 米gydF4y2Ba 一个gydF4y2Ba rgydF4y2Ba ggydF4y2Ba 我gydF4y2Ba ngydF4y2Ba 参数用于约束:如果一对图像中两幅图像不相同,则它们的距离至少为gydF4y2Ba 米gydF4y2Ba 一个gydF4y2Ba rgydF4y2Ba ggydF4y2Ba 我gydF4y2Ba ngydF4y2Ba ,否则将招致损失。gydF4y2Ba

对比损失有两个术语,但对于给定的图像对仅仅是非零。在类似图像的情况下,第一项可以是非零的,并且通过减少图像特征之间的距离来最小化gydF4y2Ba f1gydF4y2Ba 和gydF4y2Ba f2gydF4y2Ba .在图像不相似的情况下,第二项可以是非零的,通过增加图像特征之间的距离来最小化,至少达到gydF4y2Ba 米gydF4y2Ba 一个gydF4y2Ba rgydF4y2Ba ggydF4y2Ba 我gydF4y2Ba ngydF4y2Ba .越小的价值gydF4y2Ba 米gydF4y2Ba 一个gydF4y2Ba rgydF4y2Ba ggydF4y2Ba 我gydF4y2Ba ngydF4y2Ba ,限制它越过多样性对在发生损失之前的近距离对。gydF4y2Ba

指定培训选项gydF4y2Ba

指定的值gydF4y2Ba 米gydF4y2Ba 一个gydF4y2Ba rgydF4y2Ba ggydF4y2Ba 我gydF4y2Ba ngydF4y2Ba 在训练时使用。gydF4y2Ba

利润= 0.3;gydF4y2Ba

指定在培训期间使用的选项。火车3000次迭代。gydF4y2Ba

numiterations = 3000;minibatchsize = 180;gydF4y2Ba

指定adam优化选项:gydF4y2Ba

  • 设置学习率gydF4y2Ba0.0001.gydF4y2Ba.gydF4y2Ba

  • 初始化尾随平均梯度和尾随平均梯度平方衰减率gydF4y2Ba[]gydF4y2Ba.gydF4y2Ba

  • 设置梯度衰减因子为gydF4y2Ba0.9gydF4y2Ba和平方梯度衰减因子到gydF4y2Ba0.99gydF4y2Ba.gydF4y2Ba

learningRate = 1的军医;trailingAvg = [];trailingAvgSq = [];gradDecay = 0.9;gradDecaySq = 0.99;gydF4y2Ba

在GPU上的火车,如果有的话。使用GPU需要并行计算工具箱™和CUDA®已启用的NVIDIA®GPU,具有计算能力3.0或更高。自动检测是否有可用GPU并将相关数据放在GPU上,设置值gydF4y2Baexecultenvironment.gydF4y2Ba到gydF4y2Ba“汽车”gydF4y2Ba.如果您没有GPU,或者不想使用一个用于培训,请设置值gydF4y2Baexecultenvironment.gydF4y2Ba到gydF4y2Ba“cpu”gydF4y2Ba.为确保您使用GPU进行培训,请设置值gydF4y2Baexecultenvironment.gydF4y2Ba到gydF4y2Ba“GPU”gydF4y2Ba.gydF4y2Ba

executionEnvironment =gydF4y2Ba“汽车”gydF4y2Ba;gydF4y2Ba

要监控培训进度,您可以在每次迭代后绘制培训损失。创建变量gydF4y2Ba绘图gydF4y2Ba那个包含gydF4y2Ba“培训 - 进展”gydF4y2Ba.如果您不想绘制培训进度,请将此值设置为gydF4y2Ba“没有任何”gydF4y2Ba.gydF4y2Ba

情节=gydF4y2Ba“培训 - 进展”gydF4y2Ba;gydF4y2Ba

初始化训练损失进度图的绘图参数。gydF4y2Ba

Plotratio = 16/9;gydF4y2Ba如果gydF4y2Baplots ==.gydF4y2Ba“培训 - 进展”gydF4y2Batrafterplot = figure;trafterplot.position(3)= Plotratio *培训夹.Position(4);培训窗。可见=gydF4y2Ba“上”gydF4y2Ba;TrainingPlotaxes = GCA;LineloSstrain =动画线(培训架);xlabel(培训帆布,gydF4y2Ba“迭代”gydF4y2Ba)ylabel(培训架,gydF4y2Ba“损失”gydF4y2Ba)标题(培训架,gydF4y2Ba“训练期间的损失”gydF4y2Ba)gydF4y2Ba结束gydF4y2Ba

为了评估网络在维数减少时进行网络正在进行,计算和绘制每次迭代后一组测试数据的减少功能。加载测试数据,由与训练数据类似的手写数字的图像组成。将测试数据转换为gydF4y2Badlarray.gydF4y2Ba并指定维标签gydF4y2Ba'SSCB'gydF4y2Ba(空间,空间,频道,批量)。如果使用GPU,请将测试数据转换为gydF4y2BagpuArraygydF4y2Ba.gydF4y2Ba

[XTest,欧美]= digitTest4DArrayData;dlXTest = dlarray(单(XTest),gydF4y2Ba'SSCB'gydF4y2Ba);gydF4y2Ba%如果在GPU上训练,则将数据转换为gpuArray。gydF4y2Ba如果gydF4y2Ba(executionEnvironment = =gydF4y2Ba“汽车”gydF4y2Ba&& canUseGPU) || executionEnvironment ==gydF4y2Ba“GPU”gydF4y2Badlxtest = gpuarray(dlxtest);gydF4y2Ba结束gydF4y2Ba

初始化测试数据的减少特征图的绘图参数。gydF4y2Ba

dimensionPlot =图;dimensionPlot.Position (3) = plotRatio * dimensionPlot.Position (4);dimensionPlot。可见=gydF4y2Ba“上”gydF4y2Ba;DimensionPlotaxes = GCA;uniquegroups =唯一(ytest);颜色= HSV(长度(QualitGroups));gydF4y2Ba

初始化计数器以跟踪迭代的总数。gydF4y2Ba

迭代= 1;gydF4y2Ba

火车模型gydF4y2Ba

使用自定义训练循环训练模型。在训练数据上循环并在每次迭代时更新网络参数。gydF4y2Ba

每一次迭代:gydF4y2Ba

  • 提取一批图像对和标签使用gydF4y2BagetsiameSebatch.gydF4y2Ba在该部分中定义的功能gydF4y2Ba创建批量图像对gydF4y2Ba.gydF4y2Ba

  • 将图像数据转换为gydF4y2Badlarray.gydF4y2Ba底层类型的对象gydF4y2Ba单身的gydF4y2Ba并指定维标签gydF4y2Ba'SSCB'gydF4y2Ba(空间,空间,频道,批量)。gydF4y2Ba

  • 对于GPU训练,将图像数据转换为gydF4y2BagpuArraygydF4y2Ba对象。gydF4y2Ba

  • 使用模型梯度评估使用gydF4y2Badlfeval.gydF4y2Ba和gydF4y2BaMapicalGRADENTERS.gydF4y2Ba函数。gydF4y2Ba

  • 使用gydF4y2Baadamupdate.gydF4y2Ba函数。gydF4y2Ba

%循环小批。gydF4y2Ba为gydF4y2Ba迭代= 1:NUMITRATIONSgydF4y2Ba%提取小批图像对和对标签gydF4y2Ba[x1,x2,biklabels] = getsiamesebatch(xtrain,ytrain,小匹匹匹匹配);gydF4y2Ba%转换小批数据到美元。指定尺寸标签gydF4y2Ba%'SSCB'(空间,空间,通道,批量)用于图像数据gydF4y2BadlX1 = dlarray(单(X1)、gydF4y2Ba'SSCB'gydF4y2Ba);dlX2 = dlarray(单(X2),gydF4y2Ba'SSCB'gydF4y2Ba);gydF4y2Ba%如果在GPU上训练,则将数据转换为gpuArray。gydF4y2Ba如果gydF4y2Ba(executionEnvironment = =gydF4y2Ba“汽车”gydF4y2Ba&& canUseGPU) || executionEnvironment ==gydF4y2Ba“GPU”gydF4y2BadlX1 = gpuArray (dlX1);dlX2 = gpuArray (dlX2);gydF4y2Ba结束gydF4y2Ba%评估模型梯度和生成器状态使用gydF4y2Ba%dlfeval和easturedients函数在结束时列出gydF4y2Ba%的例子。gydF4y2Ba[渐变,损失] = DLFeval(@ MapeStrients,Dlnet,DLX1,DLX2,Biabelabels,Railgin);loadValue = double(收集(提取物));gydF4y2Ba%更新暹罗网络参数。gydF4y2Ba[dlnet.Learnables,trailingavg,trailingavgsq] =gydF4y2Ba......gydF4y2Baadamupdate (dlnet。可学的、渐变gydF4y2Ba......gydF4y2BaTrailingavg,trailingavgsq,迭代,学习,graddecay,graddecaysq);gydF4y2Ba%更新培训损失进度图。gydF4y2Ba如果gydF4y2Baplots ==.gydF4y2Ba“培训 - 进展”gydF4y2BaAddpoints(LineLoStrain,迭代,丢失值);gydF4y2Ba结束gydF4y2Ba%更新测试数据的减少特征图。gydF4y2Ba%计算测试数据的简化特征:gydF4y2Badlftest =预测(dlnet,dlxtest);ftest =提取数据(dlftest);图(DimensionPlot);gydF4y2Ba为gydF4y2Bak = 1:长度(uniquegroups)gydF4y2Ba%获取测试数据中每个图像的相同数值的索引gydF4y2Ba%标签(由唯一组定义):gydF4y2BaIND = YTEST == uniquegroups(k);gydF4y2Ba%绘制此组:gydF4y2Ba绘图(DimensionPlotaxes,收集(ftest(1,Ind)'),收集(ftest(2,Ind)'),gydF4y2Ba“。”gydF4y2Ba,gydF4y2Ba'颜色'gydF4y2Ba,gydF4y2Ba......gydF4y2Ba颜色(k,:));持有gydF4y2Ba在gydF4y2Ba结束gydF4y2Ba传奇(uniqueGroups)gydF4y2Ba通过培训进度信息,%更新减少特征绘图的标题。gydF4y2Ba标题(dimensionPlotAxes,gydF4y2Ba数字图像的二维特征表示。迭代= "gydF4y2Ba+gydF4y2Ba......gydF4y2Ba迭代);传奇(dimensionPlotAxesgydF4y2Ba'地点'gydF4y2Ba,gydF4y2Ba'eastoutside'gydF4y2Ba);包含(dimensionPlotAxesgydF4y2Ba“功能1”gydF4y2Ba)Ylabel(DimensionPlotaxes,gydF4y2Ba“功能2”gydF4y2Ba) 抓住gydF4y2Ba离开gydF4y2BadrawngydF4y2Ba结束gydF4y2Ba

现在已学习网络以将每个图像表示为2-D向量。您可以从测试数据的减少特征图中看到,在这2-D表示中,类似数字的图像彼此靠近群集。gydF4y2Ba

使用训练过的网络寻找相似的图像gydF4y2Ba

您可以使用经过训练的网络从一组图像中找到彼此相似的图像。在这种情况下,使用测试数据作为一组图像。将一组图像转换为gydF4y2Badlarray.gydF4y2Ba对象和gydF4y2BagpuArraygydF4y2Ba对象,如果您使用的是GPU。gydF4y2Ba

groupx = xtest;dlgroupx = dlarray(单(groupx),gydF4y2Ba'SSCB'gydF4y2Ba);gydF4y2Ba如果gydF4y2Ba(executionEnvironment = =gydF4y2Ba“汽车”gydF4y2Ba&& canUseGPU) || executionEnvironment ==gydF4y2Ba“GPU”gydF4y2BadlGroupX = gpuArray (dlGroupX);gydF4y2Ba结束gydF4y2Ba

从组中提取单个测试图像并显示它。从组中删除测试图像,以便它不会出现在类似图像集中。gydF4y2Ba

testidx = randi(5000);testimg = dlgroupx(::,:,testIdx);trialimgdisp =提取数据(testimg);图imshow(trialimgdisp,gydF4y2Ba'InitialMagnification'gydF4y2Ba, 500);gydF4y2Ba

dlgroupx(:,:,:,testIdx)= [];gydF4y2Ba

使用使用的测试图像的功能缩短gydF4y2Ba预测gydF4y2Ba.gydF4y2Ba

trialF =预测(dlnet testImg);gydF4y2Ba

使用训练的网络找到组中每幅图像的二维降维特征表示。gydF4y2Ba

fgroupx =预测(dlnet,dlgroupx);gydF4y2Ba

使用euclidean距离度量,使用缩小的特征表示来找到最接近测试图像的九个图像。显示图像。gydF4y2Ba

距离= vecnorm(提取数据(timef  -  fgroupx));[〜,IDX] =排序(距离);sortedimages = groupx(:,::,idx);图imshow(Imtile(SortedImages(:::::,1:9)),gydF4y2Ba'InitialMagnification'gydF4y2Ba, 500);gydF4y2Ba

通过降低图像的维数,该网络能够识别与试验图像相似的图像。简化的特征表示允许网络区分相似和不同的图像。连体网络通常用于人脸或签名识别。例如,可以训练一个Siamese网络接受人脸的图像作为输入,并从数据库返回一组最相似的人脸。gydF4y2Ba

金宝app支持功能gydF4y2Ba

模型梯度函数gydF4y2Ba

这个函数gydF4y2BaMapicalGRADENTERS.gydF4y2Ba的暹罗gydF4y2BadlnetworkgydF4y2Ba对象gydF4y2BaDLNET.gydF4y2Ba,一对迷你批量输入数据gydF4y2BaX1gydF4y2Ba和gydF4y2BaX2gydF4y2Ba和标签gydF4y2BapairLabelsgydF4y2Ba.该函数返回损失相对于网络中可学习参数的梯度,以及成对图像的降维特征之间的对比损失。在本例中,函数gydF4y2BaMapicalGRADENTERS.gydF4y2Ba介绍在该部分gydF4y2Ba定义模型渐变功能gydF4y2Ba.gydF4y2Ba

功能gydF4y2Ba[梯度,损失] = MaposGRADENTERS(NET,X1,X2,Biabel,Margin)gydF4y2Ba模型梯度函数计算的对比度损失gydF4y2Ba%配对图像并返回丢失和损耗的渐变gydF4y2Ba%关于网络可学习参数gydF4y2Ba%通过网络转发图像对的前半部分gydF4y2BaF1 =向前(NET,X1);gydF4y2Ba%通过网络转发第二组图像对gydF4y2BaF2 =向前(NET,X2);gydF4y2Ba%计算对比损耗gydF4y2Ba损失=对比度(F1,F2,Biglabel,边缘);gydF4y2Ba计算损失相对于网络可学习的梯度gydF4y2Ba%的参数gydF4y2Ba梯度= Dlgradient(损失,Net.Learnables);gydF4y2Ba结束gydF4y2Ba功能gydF4y2Ba损失= contrastiveLoss (F1, F2, pairLabel,边缘)gydF4y2Ba% contrast veloss函数计算之间的对比损失gydF4y2Ba%成对图像的缩小功能gydF4y2Ba%定义小值以防止取0的平方根gydF4y2Badelta = 1e-6;gydF4y2Ba求欧几里得距离度量gydF4y2Ba距离= sqrt(sum((f1-f2)。^ 2,1)+ delta);gydF4y2Ba%标签(i)= 1如果特征1(:,i)和特征2(:,i)是功能gydF4y2Ba相似图像的%,否则为0gydF4y2BalossSimilar = pairLabel。*(距离。^ 2);lossDissimilar = (1 - pairLabel)。*(max(margin - distance, 0).^2);loss = 0.5*sum(lossSimilar + lossDissimilar,gydF4y2Ba'全部'gydF4y2Ba);gydF4y2Ba结束gydF4y2Ba

创建批量图像对gydF4y2Ba

以下函数根据其标签创建类似或不相似的随机图像。在本例中,函数gydF4y2BagetsiameSebatch.gydF4y2Ba介绍在该部分gydF4y2Ba创建成对类似和不同的图像gydF4y2Ba.gydF4y2Ba

功能gydF4y2Ba[x1,x2,pairlabels] = getsiamesebatch(x,y,minibatchsize)gydF4y2Ba%getsiamesebatch返回一个随机选择的批次配对图像。gydF4y2Ba平均而言,这个函数产生一组平衡的相似和gydF4y2Ba%不同的配对。gydF4y2BapairLabels = 0 (1, miniBatchSize);imgSize =大小(X (:,:,: 1));if ([imgSize 1 miniBatchSize] = 0); / /指定一个最小的字节[imgSize 1 miniBatchSize] = 0; / /设置一个最小的批次gydF4y2Ba为gydF4y2Bai = 1:小匹匹配选择=兰特(1);gydF4y2Ba如果gydF4y2Ba选择<0.5 [Biredx1,BiredX2,Biabelabels(i)] = GetSimilarPair(Y);gydF4y2Ba别的gydF4y2Ba[pairIdx1, pairIdx2, pairLabels(i)] = getDissimilarPair(Y);gydF4y2Ba结束gydF4y2Bax1(::,:,i)= x(:,::,biredx1);x2(::,::,i)= x(:,:,pairidx2);gydF4y2Ba结束gydF4y2Ba结束gydF4y2Ba功能gydF4y2Ba[pairIdx1, pairIdx2 pairLabel] = getSimilarPair (classLabel)gydF4y2Ba%GetImilarPair返回一个随机的图像索引gydF4y2Ba%在同一类中和类似的对标签= 1。gydF4y2Ba找到所有唯一的类。gydF4y2Baclasses =唯一(classlabel);gydF4y2Ba%随机选择一个职业,它将被用来得到一个相似的配对。gydF4y2Baclasschoice = randi(numel(类));gydF4y2Ba%从所选类中找到所有观察的指标。gydF4y2Baidxs = find(classlabel == classes(classchoice));gydF4y2Ba%从所选的类中随机选择两张不同的图片。gydF4y2BaBiredxChoice = Randperm(Numel(IDXS),2);BiredX1 = IDXS(BiredXchoice(1));Biredx2 = IDXS(BiredXchoice(2));Biaplabel = 1;gydF4y2Ba结束gydF4y2Ba功能gydF4y2Ba[pairIdx1, pairIdx2 pairLabel] = getDissimilarPair (classLabel)gydF4y2Ba% getDissimilarPair返回图像的随机索引对gydF4y2Ba%是在不同的类和不同的对标签= 0。gydF4y2Ba找到所有唯一的类。gydF4y2Baclasses =唯一(classlabel);gydF4y2Ba%随机选择两个不同的类,将用于得到一个不同的对。gydF4y2BaclassesChoice = randperm(numel(classes), 2);gydF4y2Ba%从第一和第二类找到所有观察的指数。gydF4y2Baidxs1 = find(classlabel == classes(classeschoice(1)));idxs2 = find(classlabel == classes(classeschoice(2)));gydF4y2Ba%从每个类中随机选择一张图片。gydF4y2BapairIdx1Choice =兰迪(元素个数(idxs1));pairIdx2Choice =兰迪(元素个数(idxs2));pairIdx1 = idxs1 (pairIdx1Choice);pairIdx2 = idxs2 (pairIdx2Choice);pairLabel = 0;gydF4y2Ba结束gydF4y2Ba

参考gydF4y2Ba

[gydF4y2Ba[1]陈志强,陈志强,陈志强。gydF4y2Ba使用“暹罗”时滞神经网络的签名验证。gydF4y2Ba“在第六次国际神经信息处理系统会议(NIPS 1993),1994年,PP737-744中的诉讼程序中。可用gydF4y2Ba使用“暹罗”时间延迟神经网络签名验证gydF4y2Ba在NIPS会议记录网站上。gydF4y2Ba

[2] Wenpeg,Y.和HSchütze。“gydF4y2Ba卷曲神经网络,用于解释鉴定。gydF4y2Ba《中华人民大学学报(自然科学版)》,2015,pp901-911。可以在gydF4y2Ba卷积神经网络,用于解释gydF4y2Ba在ACL选集网站上。gydF4y2Ba

[3] Hadsell,R.,S.Chopra和Y. Lecunn。“gydF4y2Ba通过学习不变映射降维gydF4y2Ba。“在2006年IEEE计算机愿景和模式识别会议上的诉讼程序中(CVPR 2006),2006,PP1735-1742。gydF4y2Ba

另请参阅gydF4y2Ba

|gydF4y2Ba|gydF4y2Ba|gydF4y2Ba|gydF4y2Ba

相关话题gydF4y2Ba