主要内容gydF4y2Ba

このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。gydF4y2Ba

次元削減のためのシャムネットワ,クの学習gydF4y2Ba

この例では,次元削減を使用して手書きの数字を比較するシャムネットワ,クの学習方法を説明します。gydF4y2Ba

シャムネットワークは深層学習ネットワークの一種で,同じアーキテクチャをもち,同じパラメーターと重みを共有する,2つ以上の同一のサブネットワークを使用します。シャムネットワークは通常,比較可能な2つの事例の関係性を見つけることに関わるタスクに使用されます。シャムネットワークの一般的な使用例には,顔認識,シグネチャ検証[1],またはパラフレーズ識別[2]などがあります。学習中に重みを共有することで学習させるパラメーターが少なくなり,比較的少量の学習データで良い結果が得られるため,シャムネットワークはこれらのタスクにおいて良好に動作します。gydF4y2Ba

シャムネットワ,クは特に,クラスの数が多く,各クラスの観測値が少ない場合に役立,ます。このような場合,イメージをこれらのクラスに分類するよう深層畳み込みニューラルネットワークに学習させるだけの十分なデータがありません。代わりに,シャムネットワークによって2つのイメージが同じクラスに属するかどうかを判定することができます。ネットワークは,学習データの次元を削減し,距離ベースのコスト関数を使用してクラス間を区別することでこれを行います。gydF4y2Ba

この例ではシャムネットワークを使用して,手書きの数字のイメージコレクションについて次元削減を行います。シャムアーキテクチャは,同じクラスのイメージを低次元空間の近傍点にマッピングすることで次元削減を行います。その後,低次元特徴の表現を使用して,テストイメージに最も類似したイメージをデータセットから抽出します。この例の学習データは,サイズ28 28 x 1のイメージで,初期の特徴次元は784です。シャムネットワークは,入力イメージの次元を2つの特徴に削減して,同一ラベルのイメージに対して類似の低次元特徴を出力するように学習を行います。gydF4y2Ba

シャムネットワ,クを使用すると,類似の,メ,ジを直接比較して識別することもできます。例にいては,gydF4y2Baシャムネットワクの学習とメジの比較gydF4y2Baを参照してください。gydF4y2Ba

学習デ,タの読み込みと前処理gydF4y2Ba

手書きの数字のメジで構成される学習デタを読み込みます。関数gydF4y2BadigitTrain4DArrayDatagydF4y2Baは,数字の。gydF4y2Ba

[XTrain,YTrain] = digitTrain4DArrayData;gydF4y2Ba

XTraingydF4y2Baは,サイズが28 x 28のシングルチャネルイメージ5000個を含む,28日28 x 5000 xの配列です。各ピクセルはgydF4y2Ba0gydF4y2BaからgydF4y2Ba1gydF4y2Baの間の値です。gydF4y2BaYTraingydF4y2Baは,各観測値のラベルが含まれる直言ベクトルで,ラベルは手書きの数字に対応する0から9の数字です。gydF4y2Ba

ランダムに選択した▪▪メ▪▪ジを表示します。gydF4y2Ba

perm = randperm(数字(YTrain), 9);imshow (imtile (XTrain(:,:,:,烫),gydF4y2Ba“ThumbnailSize”gydF4y2Ba100年[100]));gydF4y2Ba

類似メジと非類似メジのペアの作成gydF4y2Ba

ネットワークに学習させるには,データを類似イメージまたは非類似イメージのペアにグループ化しなければなりません。ここで,類似イメージは同じラベルをもつイメージ,非類似イメージは異なるラベルをもつイメージとして定義されます。関数gydF4y2BagetSiameseBatchgydF4y2Ba(この例のgydF4y2Baサポ,ト関数gydF4y2Baの節で定義)は,類似gydF4y2BapairImage1gydF4y2BaとgydF4y2BapairImage2gydF4y2Baを作成します。また,この関数は,gydF4y2BapairLabelgydF4y2Baを返します。メ,ジの類似ペアの場合はgydF4y2BapairLabel = 1gydF4y2Ba,非類似ペアの場合はgydF4y2BapairLabel = 0gydF4y2Baになります。gydF4y2Ba

。gydF4y2Ba

batchSize = 10;[pairImage1,pairImage2,pairLabel] = getSiameseBatch(XTrain,YTrain,batchSize);gydF4y2Ba

生成された▪▪メ▪▪ジのペアを表示します。gydF4y2Ba

为gydF4y2Bai = 1: batchSize次要情节(2、5、i) imshow ([pairImage1 (::,:, i) pairImage2(::,:,我)]);gydF4y2Ba如果gydF4y2BapairLabel(i) == 1 s =gydF4y2Ba“相似”gydF4y2Ba;gydF4y2Ba其他的gydF4y2Bas =gydF4y2Ba“不同”gydF4y2Ba;gydF4y2Ba结束gydF4y2Ba标题(年代)gydF4y2Ba结束gydF4y2Ba

この例では,学習ル,プの反復ごとに,メ,ジのペア180個から成る新しいバッチが作成されます。これにより,類似ペアと非類似ペアの比率がほぼ等しい大量のランダムなイメージのペアでネットワークに学習させることができます。gydF4y2Ba

ネットワ,クア,キテクチャの定義gydF4y2Ba

シャムネットワ,クのア,キテクチャを次の図に示します。gydF4y2Ba

この例では,2。28 x 28 x 1 のイメージを受け取り、低次元特徴表現として使用される 2 つの特徴ベクトルを出力するネットワークを作成します。ネットワークは、入力イメージの次元を 2 に削減します。これにより、初期の 784 の次元よりもプロットと可視化を簡単に行えるようになります。

最初の2つの全結合層では,出力サイズに1024を指定し,他の重みの初期化子を使用します。gydF4y2Ba

最終の全結合層では,出力サaaplズに2を指定し,Heの重みの初期化子を使用します。gydF4y2Ba

图层= [imageInputLayer([28 28],gydF4y2Ba“名字”gydF4y2Ba,gydF4y2Ba“input1”gydF4y2Ba,gydF4y2Ba“归一化”gydF4y2Ba,gydF4y2Ba“没有”gydF4y2Ba) fullyConnectedLayer (1024,gydF4y2Ba“名字”gydF4y2Ba,gydF4y2Ba“fc1”gydF4y2Ba,gydF4y2Ba“WeightsInitializer”gydF4y2Ba,gydF4y2Ba“他”gydF4y2Ba) reluLayer (gydF4y2Ba“名字”gydF4y2Ba,gydF4y2Ba“relu1”gydF4y2Ba) fullyConnectedLayer (1024,gydF4y2Ba“名字”gydF4y2Ba,gydF4y2Ba“取得”gydF4y2Ba,gydF4y2Ba“WeightsInitializer”gydF4y2Ba,gydF4y2Ba“他”gydF4y2Ba) reluLayer (gydF4y2Ba“名字”gydF4y2Ba,gydF4y2Ba“relu2”gydF4y2Ba) fullyConnectedLayer (2gydF4y2Ba“名字”gydF4y2Ba,gydF4y2Ba“一个fc3”文件gydF4y2Ba,gydF4y2Ba“WeightsInitializer”gydF4y2Ba,gydF4y2Ba“他”gydF4y2Ba));lgraph = layerGraph(图层);gydF4y2Ba

カスタム学習ル,プを使用してネットワ,クに学習させ,自動微分を有効にするには,層グラフをgydF4y2BadlnetworkgydF4y2Baオブジェクトに変換します。gydF4y2Ba

Dlnet = dlnetwork(lgraph);gydF4y2Ba

モデル勾配関数の定義gydF4y2Ba

関数gydF4y2BamodelGradientsgydF4y2Ba(この例のgydF4y2Baサポ,ト関数gydF4y2Baの節で定義)を作成します。関数gydF4y2BamodelGradientsgydF4y2Baは,シャムgydF4y2BadlnetworkgydF4y2BaオブジェクトのgydF4y2BadlnetgydF4y2Ba而且gydF4y2Baと,ミニバッチ入力デ,タgydF4y2BadlX1gydF4y2BaおよびgydF4y2BadlX2gydF4y2BaとそのラベルgydF4y2BapairLabelsgydF4y2Baを受け取ります。関数は損失値と、ネットワークの学習可能なパラメーターについての損失の勾配を返します。

シャムネットワークの目的は,各イメージについて,類似イメージの場合は類似し,非類似イメージの場合は明確に異なるような特徴ベクトルを出力することです。このようにして,ネットワ,クは2の入力を区別することができます。gydF4y2Ba

最後の全結合層の出力と,gydF4y2BapairImage1gydF4y2BaおよびgydF4y2BapairImage2gydF4y2Baからの特徴ベクトルgydF4y2Bafeatures1gydF4y2BaおよびgydF4y2Bafeatures1gydF4y2Baとの間の対比損失をそれぞれ求めます。ペアの対比損失は[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 ,非類似aapl . exe,非類似aapl . exegydF4y2Ba ygydF4y2Ba =gydF4y2Ba 0gydF4y2Ba )で,gydF4y2Ba dgydF4y2Ba は2の特徴ベクトルgydF4y2Ba f1gydF4y2Ba とgydF4y2Ba f2gydF4y2Ba のユ,クリッド距離gydF4y2Ba dgydF4y2Ba =gydF4y2Ba 为gydF4y2Ba f1gydF4y2Ba -gydF4y2Ba f2gydF4y2Ba 为gydF4y2Ba 2gydF4y2Ba です。gydF4y2Ba

米gydF4y2Ba 一个gydF4y2Ba rgydF4y2Ba ggydF4y2Ba 我gydF4y2Ba ngydF4y2Ba パラメ,タ,は制約のために使用されます。ペア内の2のメジが非類似の場合は,両者の距離が少なくともgydF4y2Ba 米gydF4y2Ba 一个gydF4y2Ba rgydF4y2Ba ggydF4y2Ba 我gydF4y2Ba ngydF4y2Ba でなければならず,そうでないと損失が発生します。gydF4y2Ba

対比損失には項が2つありますが,与えられたイメージペアについて非ゼロになり得るのは,どちらか1つだけです。類似メジの場合は,第1項が非ゼロになることができ,メジの特徴gydF4y2Ba f1gydF4y2Ba とgydF4y2Ba f2gydF4y2Ba の間の距離を減らすことで最小化されます。非類似イメージの場合は,第2項が非ゼロになることができ,イメージの特徴間の距離を増やすことで,少なくともgydF4y2Ba 米gydF4y2Ba 一个gydF4y2Ba rgydF4y2Ba ggydF4y2Ba 我gydF4y2Ba ngydF4y2Ba の距離まで最小化されます。gydF4y2Ba 米gydF4y2Ba 一个gydF4y2Ba rgydF4y2Ba ggydF4y2Ba 我gydF4y2Ba ngydF4y2Ba の値が小さいほど,損失が発生する前に非類似ペアがどれだけ近くなり得るかの制約が緩くなります。gydF4y2Ba

学習オプションの指定gydF4y2Ba

学習中に使用するgydF4y2Ba 米gydF4y2Ba 一个gydF4y2Ba rgydF4y2Ba ggydF4y2Ba 我gydF4y2Ba ngydF4y2Ba の値を指定します。gydF4y2Ba

Margin = 0.3;gydF4y2Ba

学習中に使用するオプションを指定します。3000回反復して学習させます。gydF4y2Ba

numIterations = 3000;miniBatchSize = 180;gydF4y2Ba

亚当最適化のオプションを指定します。gydF4y2Ba

  • 学習率をgydF4y2Ba0.0001gydF4y2Baに設定します。gydF4y2Ba

  • 最後の平均勾配と最後の平均2乗勾配減衰率をgydF4y2Ba[]gydF4y2Baに初期化します。gydF4y2Ba

  • 勾配の減衰係数をgydF4y2Ba0.9gydF4y2Baに,2乗勾配の減衰係数をgydF4y2Ba0.99gydF4y2Baに設定。gydF4y2Ba

learningRate = 1e-4;trailingAvg = [];trailingAvgSq = [];gradDecay = 0.9;gradDecaySq = 0.99;gydF4y2Ba

Gpuが利用できる場合,Gpuで学習を行います。GPUを使用するには,并行计算工具箱™とサポートされているGPUデバイスが必要です。サポトされているデバスにいては,gydF4y2Baリリス別のgpuサポトgydF4y2Ba(并行计算工具箱)gydF4y2Baを参照してください。Gpuが使用可能で,関連するデ,タをGpuに配置できるかどうかを自動的に検出するには,gydF4y2BaexecutionEnvironmentgydF4y2Baの値をgydF4y2Ba“汽车”gydF4y2Baに設定します。Gpuがない場合や,学習にGpuを使用しない場合は,gydF4y2BaexecutionEnvironmentgydF4y2Baの値をgydF4y2Ba“cpu”gydF4y2Baに設定します。学習に必ずgpuを使用するには,gydF4y2BaexecutionEnvironmentgydF4y2Baの値をgydF4y2Ba“图形”gydF4y2Baに設定します。gydF4y2Ba

executionEnvironment =gydF4y2Ba“汽车”gydF4y2Ba;gydF4y2Ba

学習の進行状況を監視するには,それぞれの反復の後で学習の損失をプロットできます。gydF4y2Ba“训练进步”gydF4y2Baを含む変数gydF4y2Ba情节gydF4y2Baを作成します。学習の進行状況をプロットしない場合は,この値をgydF4y2Ba“没有”gydF4y2Baに設定します。gydF4y2Ba

情节=gydF4y2Ba“训练进步”gydF4y2Ba;gydF4y2Ba

学習損失の進行状況をプロットするためのプロットパラメ,タ,を初期化します。gydF4y2Ba

plotRatio = 16/9;gydF4y2Ba如果gydF4y2Ba情节= =gydF4y2Ba“训练进步”gydF4y2BatrainingPlot =数字;trainingPlot.Position(3) = plotRatio*trainingPlot.Position(4);trainingPlot。可见=gydF4y2Ba“上”gydF4y2Ba;trainingPlotAxes = gca;lineLossTrain = animatedline(trainingPlotAxes);包含(trainingPlotAxesgydF4y2Ba“迭代”gydF4y2Ba) ylabel (trainingPlotAxesgydF4y2Ba“损失”gydF4y2Ba)标题(trainingPlotAxesgydF4y2Ba“培训期间的损失”gydF4y2Ba)gydF4y2Ba结束gydF4y2Ba

次元削減におけるネットワークの性能を評価するために,各反復の後でテストデータのセットについて低次元特徴を計算してプロットします。学習デタと類似した手書きの数字のメジで構成されるテストデタを読み込みます。テストデ,タをgydF4y2BadlarraygydF4y2Baに変換し,次元ラベルをgydF4y2Ba“SSCB”gydF4y2Ba(空间,空间,通道,批次)に指定します。Gpuを使用している場合は,テストデ,タをgydF4y2BagpuArraygydF4y2Baに変換します。gydF4y2Ba

[XTest,YTest] = digitTest4DArrayData;dlXTest = dlarray(single(XTest),gydF4y2Ba“SSCB”gydF4y2Ba);gydF4y2Ba如果在GPU上训练,则将数据转换为gpuArray。gydF4y2Ba如果gydF4y2Ba(executionEnvironment = =gydF4y2Ba“汽车”gydF4y2Ba&& canUseGPU) || executionEnvironment ==gydF4y2Ba“图形”gydF4y2BadlXTest = gpuArray(dlXTest);gydF4y2Ba结束gydF4y2Ba

テストデ,タの低次元特徴プロットのためにプロットパラメ,タ,を初期化します。gydF4y2Ba

dimensionPlot =图;维度plot . position (3) = plotRatio*维度plot . position (4);dimensionPlot。可见=gydF4y2Ba“上”gydF4y2Ba;dimensionPlotAxes = gca;uniqueGroups = unique(YTest);colors = hsv(length(uniqueGroups));gydF4y2Ba

反復の合計回数を追跡するためのカウンタ,を初期化します。gydF4y2Ba

迭代= 1;gydF4y2Ba

モデルの学習gydF4y2Ba

カスタム学習ル,プを使用してモデルに学習させます。学習デ,タ全体をル,プ処理し,各反復でネットワ,クパラメ,タ,を更新します。gydF4y2Ba

それぞれの反復で次を行います。gydF4y2Ba

  • メ,ジペアのバッチの作成gydF4y2Baの節で定義されている関数gydF4y2BagetSiameseBatchgydF4y2Baを使用して,。gydF4y2Ba

  • 基となる型がgydF4y2Ba单gydF4y2BaのgydF4y2BadlarraygydF4y2Baオブジェクトにメジデタを変換し,次元ラベルをgydF4y2Ba“SSCB”gydF4y2Ba(空间,空间,通道,批次)に指定。gydF4y2Ba

  • 显卡で学習する場合,显卡(Gpu)メ,显卡(Gpu)ジデ,显卡(Gpu)タをgydF4y2BagpuArraygydF4y2Baオブジェクトに変換。gydF4y2Ba

  • 関数gydF4y2BadlfevalgydF4y2BaおよびgydF4y2BamodelGradientsgydF4y2Baを使用してモデルの勾配を評価します。gydF4y2Ba

  • 関数gydF4y2BaadamupdategydF4y2Baを使用してネットワ,クパラメ,タ,を更新。gydF4y2Ba

在小批上循环。gydF4y2Ba为gydF4y2Baiteration = 1:numIterationsgydF4y2Ba提取小批量图像对和图像对标签gydF4y2Ba[X1,X2,pairLabels] = getSiameseBatch(XTrain,YTrain,miniBatchSize);gydF4y2Ba将小批量数据转换为大数组。指定尺寸标签gydF4y2Ba% 'SSCB'(空间,空间,通道,批处理)用于图像数据gydF4y2BadlX1 = dlarray(single(X1),gydF4y2Ba“SSCB”gydF4y2Ba);dlX2 = dlarray(single(X2),gydF4y2Ba“SSCB”gydF4y2Ba);gydF4y2Ba如果在GPU上训练,则将数据转换为gpuArray。gydF4y2Ba如果gydF4y2Ba(executionEnvironment = =gydF4y2Ba“汽车”gydF4y2Ba&& canUseGPU) || executionEnvironment ==gydF4y2Ba“图形”gydF4y2BadlX1 = gpuArray(dlX1);dlX2 = gpuArray(dlX2);gydF4y2Ba结束gydF4y2Ba使用评估模型梯度和发电机状态gydF4y2Ba的末尾列出的modelGradients函数gydF4y2Ba%的例子。gydF4y2Ba[gradients,loss] = dlfeval(@modelGradients,dlnet,dlX1,dlX2,pairLabels,margin);lossValue = double(gather(extractdata(loss)));gydF4y2Ba更新Siamese网络参数。gydF4y2Ba[dlnet。可学的,trailingAvg trailingAvgSq] =gydF4y2Ba...gydF4y2Baadamupdate (dlnet。可学的、渐变gydF4y2Ba...gydF4y2BatrailingAvg trailingAvgSq,迭代,learningRate、gradDecay gradDecaySq);gydF4y2Ba更新培训损失进度图。gydF4y2Ba如果gydF4y2Ba情节= =gydF4y2Ba“训练进步”gydF4y2Baaddpoints (lineLossTrain迭代,lossValue);gydF4y2Ba结束gydF4y2Ba更新测试数据的降维特征图。gydF4y2Ba计算测试数据的简化特征:gydF4y2BadlFTest = predict(dlnet,dlXTest);FTest = extractdata(dlFTest);图(dimensionPlot);gydF4y2Ba为gydF4y2Bak = 1:length(uniqueGroups)gydF4y2Ba获取测试数据中每个图像的索引,其数值相同gydF4y2Ba%标签(由唯一组定义):gydF4y2Baind = YTest==uniqueGroups(k);gydF4y2Ba绘制此组:gydF4y2Ba情节(dimensionPlotAxes,收集(英国《金融时报》(印第安纳州)'),收集(英国《金融时报》(印第安纳州)'),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 (dimensionPlotAxesgydF4y2Ba“功能2”gydF4y2Ba)举行gydF4y2Ba从gydF4y2BadrawnowgydF4y2Ba结束gydF4y2Ba

ネットワクは,各メジを2次元ベクトルとして表すことを学習しました。テストデータの低次元特徴プロットからわかるように,2次元表現では類似した数字のイメージが互いに近くに集まっています。gydF4y2Ba

学習済みネットワクを使用した類似メジの検出gydF4y2Ba

学習済みネットワクを使用して,互いに似ているメジの集合をグルプから検出することが可能です。この場合,テストデタをメジのグルプとして使用します。イメージのグループをgydF4y2BadlarraygydF4y2BaオブジェクトとgydF4y2BagpuArraygydF4y2Baオブジェクト(gpuを使用している場合)に変換します。gydF4y2Ba

groupX = XTest;dlGroupX = dlarray(single(groupX),gydF4y2Ba“SSCB”gydF4y2Ba);gydF4y2Ba如果gydF4y2Ba(executionEnvironment = =gydF4y2Ba“汽车”gydF4y2Ba&& canUseGPU) || executionEnvironment ==gydF4y2Ba“图形”gydF4y2BadlGroupX = gpuArray(dlGroupX);gydF4y2Ba结束gydF4y2Ba

グル、プからテスト、メ、ジを1抽出して表示します。テストメジをグルプから削除して,類似メジのセットに出現しないようにします。gydF4y2Ba

testdx = randi(5000);testtestg = dlGroupX(:,:,:, testdx);trialImgDisp = extractdata(teestimg);图imshow (trialImgDisp,gydF4y2Ba“InitialMagnification”gydF4y2Ba, 500);gydF4y2Ba

dlGroupX(:,:,:, testdx) = [];gydF4y2Ba

预测gydF4y2Baを使用してテスト▪▪メ▪▪ジの低次元特徴を求めます。gydF4y2Ba

trialF = predict(dlnet, testestimg);gydF4y2Ba

学習済みネットワークを使用して,グループ内の各イメージについて2次元の低次元特徴表現を求めます。gydF4y2Ba

FGroupX =预测(dlnet,dlGroupX);gydF4y2Ba

低次元特徴表現を使用して,ユークリッド距離計量を用いてテストイメージに最も近いイメージをグループ内から9個見つけます。メ,ジを表示します。gydF4y2Ba

距离= vecnorm(extractdata(trialF - FGroupX));[~,idx] = sort(距离);sortedImages = groupX(:,:,:,idx);图imshow (imtile (sortedImages (:,:,: 1:9)),gydF4y2Ba“InitialMagnification”gydF4y2Ba, 500);gydF4y2Ba

。低次元特徴表現によって,ネットワ:。シャムネットワ,クは顔認識やシグネチャ認識のコンテキストでよく使用されます。たとえば,顔のイメージを入力として受け取り,データベースからよく似ている顔のセットを返すように,シャムネットワークに学習させることができます。gydF4y2Ba

サポ,ト関数gydF4y2Ba

モデル勾配関数gydF4y2Ba

関数gydF4y2BamodelGradientsgydF4y2Baは,シャムgydF4y2BadlnetworkgydF4y2BaのオブジェクトgydF4y2BadlnetgydF4y2Ba,ミニバッチ入力デ,タgydF4y2BaX1gydF4y2BaとgydF4y2BaX2gydF4y2Baのペア,およびラベルgydF4y2BapairLabelsgydF4y2Baを受け取ります。この関数は,ネットワーク内の学習可能なパラメーターについての損失の勾配と,ペアになっているイメージの次元低特徴間の対比損失を返します。この例において,関数gydF4y2BamodelGradientsgydF4y2Baにいては,gydF4y2Baモデル勾配関数の定義gydF4y2Baの節で説明されています。gydF4y2Ba

函数gydF4y2Ba[gradients, loss] = modelGradients(net,X1,X2,pairLabel,margin)gydF4y2Ba%的模型梯度函数计算之间的对比损失gydF4y2Ba%的配对图像,并返回损失和梯度的损失与gydF4y2Ba%相对于网络可学习参数gydF4y2Ba将前一半的图像对通过网络转发gydF4y2BaF1 =正向(净,X1);gydF4y2Ba将第二组图像对通过网络转发gydF4y2BaF2 =正向(净,X2);gydF4y2Ba%计算对比损失gydF4y2Ba损失= contrtiveloss (F1,F2,pairLabel,margin);gydF4y2Ba计算相对于网络可学习的损失的梯度gydF4y2Ba%的参数gydF4y2Bagradients = dlgradient(loss, net.Learnables);gydF4y2Ba结束gydF4y2Ba函数gydF4y2Baloss = contrtiveloss (F1,F2,pairLabel,margin)gydF4y2Ba之间的对比损失函数gydF4y2Ba%成对图像的约简特征gydF4y2Ba定义小值以防止取0的平方根gydF4y2BaDelta = 1e-6;gydF4y2Ba找到欧几里得距离度量gydF4y2Ba距离=平方根(sum((F1 - F2).^2,1) + delta);gydF4y2Ba% label(i) = 1如果features1(:,i)和featres2 (:,i)是特征gydF4y2Ba相似的图像为%,否则为0gydF4y2BalossSimilar = pairLabel.*(距离。^2);lossDissimilar = (1 - pairLabel)。*(max(margin - distance, 0).^2);损失= 0.5*sum(lossSimilar + lossdissimilarity,gydF4y2Ba“所有”gydF4y2Ba);gydF4y2Ba结束gydF4y2Ba

メ,ジペアのバッチの作成gydF4y2Ba

次の関数は,ラベルに基づいて類似または非類似の。この例では,関数gydF4y2BagetSiameseBatchgydF4y2BaにいてgydF4y2Ba類似メジと非類似メジのペアの作成の節で紹介されていますgydF4y2Ba。gydF4y2Ba

函数gydF4y2Ba[X1,X2,pairLabels] = getSiameseBatch(X,Y,miniBatchSize)gydF4y2Ba% getSiameseBatch返回随机选择的成对图像批次。gydF4y2Ba平均而言,此函数生成一组相似的和的平衡集gydF4y2Ba%不相似对。gydF4y2BapairLabels = 0 (1, miniBatchSize);imgSize = size(X(:,:,:,1));X1 = 0 ([imgSize 1 miniBatchSize]);X2 = 0 ([imgSize 1 miniBatchSize]);gydF4y2Ba为gydF4y2Bai = 1:miniBatchSize select = rand(1);gydF4y2Ba如果gydF4y2Baselect < 0.5 [pairIdx1, pairIdx2, pairLabels(i)] = getSimilarPair(Y);gydF4y2Ba其他的gydF4y2Ba[pairIdx1, pairIdx2, pairLabels(i)] = getDissimilarPair(Y);gydF4y2Ba结束gydF4y2BaX1(:,:,:,i) = X(:,:,:,pairIdx1);X2(:,:,:,i) = X(:,:,:,pairIdx2);gydF4y2Ba结束gydF4y2Ba结束gydF4y2Ba函数gydF4y2Ba[pairIdx1,pairIdx2,pairLabel] = getSimilarPair(classLabel)gydF4y2BagetSimilarPair返回图像的随机索引对gydF4y2Ba%属于同一类且相似的pair标签= 1。gydF4y2Ba找到所有唯一的类。gydF4y2Baclasses =唯一的(classLabel);gydF4y2Ba%随机选择一个类,将用于获得类似的一对。gydF4y2BaclassChoice = randi(编号(类));gydF4y2Ba找到所选类中所有观测值的指数。。gydF4y2Baidxs = find(classLabel==classes(classChoice));gydF4y2Ba从所选类别中随机选择两张不同的图片。gydF4y2BapairIdxChoice = randperm(数字(idxs),2);pairIdx1 = idxs(pairIdxChoice(1));pairIdx2 = idxs(pairIdxChoice(2));pairLabel = 1;gydF4y2Ba结束gydF4y2Ba函数gydF4y2Ba[pairIdx1,pairIdx2,pairLabel] = getDissimilarPair(classLabel)gydF4y2BagetDissimilarPair返回图像的随机索引对gydF4y2Ba%,在不同的类和不同的对标签= 0。gydF4y2Ba找到所有唯一的类。gydF4y2Baclasses =唯一的(classLabel);gydF4y2Ba%随机选择两个不同的班级,将会得到一个不同的配对。gydF4y2BaclassesChoice = randperm(编号(类),2);gydF4y2Ba找到第一类和第二类中所有观测值的指标。gydF4y2Baidxs1 = find(classLabel==classes(classesChoice(1)));idxs2 = find(classLabel==classes(classesChoice(2)));gydF4y2Ba从每个类别中随机选择一张图片。gydF4y2BapairIdx1Choice = randi(编号(idxs1));pairIdx2Choice = randi(编号(idxs2));pairIdx1 = idxs1(pairIdx1Choice);pairIdx2 = idxs2(pairIdx2Choice);pairLabel = 0;gydF4y2Ba结束gydF4y2Ba

参考文献gydF4y2Ba

[1]布罗姆利,J., I.盖恩,Y.勒丘恩,E. Säckinger和R.沙阿。”gydF4y2Ba使用“暹罗式”时滞神经网络进行签名验证。gydF4y2Ba“第六届神经信息处理系统国际会议论文集(NIPS 1993), 1994,第737-744页。可以在gydF4y2Ba使用“暹罗式”时滞神经网络进行签名验证gydF4y2Ba在NIPS论文集网站上。gydF4y2Ba

[2] Wenpeg, Y.和H Schütze。”gydF4y2Ba释义识别的卷积神经网络。gydF4y2Ba《ACL北美分会2015年会议论文集》,2015,pp901-911。可以在gydF4y2Ba释义识别的卷积神经网络gydF4y2Ba访问ACL选集网站。gydF4y2Ba

[3]哈德塞尔,R.乔普拉和Y.勒昆。”gydF4y2Ba学习不变映射降维方法gydF4y2Ba2006年IEEE计算机学会计算机视觉与模式识别会议论文集(CVPR 2006), 2006, pp1735-1742。gydF4y2Ba

参考gydF4y2Ba

|gydF4y2Ba|gydF4y2Ba|gydF4y2Ba|gydF4y2Ba

関連するトピックgydF4y2Ba