このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
tsne
を使用したネットワ,クの動作の表示この例では,関数tsne
を使用して学習済みネットワ,クの活性化を表示する方法を説明します。この表示は,ネットワ,クの動作を理解するのに役立,ます。
统计和机器学习工具箱™の関数tsne
(统计和机器学习工具箱)は,t分布型確率的近傍埋め込み法(t- sne)[1]を実装します。この手法では,高次元のデ,タ(層のネットワ,ク活性化など)が2次元にマッピングされます。この手法では距離を保持しようとする非線形のマッピングが使用されます。t-SNEを使用してネットワーク活性化を可視化することにより,ネットワークがどのように応答するかを理解できます。
t-SNEを使用して,入力データがネットワーク層を通過するときに,深層学習ネットワークが入力データの表現をどのように変化させるかを可視化できます。t-SNEを使用すると,入力データの問題を検出したり,ネットワークによって正しく分類されていない観測値を把握することもできます。
たとえば,t-SNEでソフトマックス層の多次元の活性化を減らして,同様の構造をもつ2次元表現にすることができます。結果のt-SNEプロットの密なクラスターは,ネットワークによって通常正しく分類されるクラスに対応しています。可視化を使用すると,誤ったクラスタ,に表示されている点を検出できます。これは,ネットワ,クによって正しく分類されていない観測値を示します。観測値に誤ったラベルが付けられる場合があり,また,そのクラスの他の観測値に似ていることが原因で,ネットワークによって別のクラスのインスタンスであると予測される場合があります。t-SNEによるソフトマックス活性化の減少ではこれらの活性化のみが使用され,基となる観測値は使用されないことに注意してください。
この例では,食品メジのサンプルというデタセットを使用します。このデータセットには9クラスの978枚の食品の写真が含まれており,サイズは約77 MBです。補助関数downloadExampleFoodImagesData
を呼び出して,デ,タセットを一時ディレクトリにダウンロ,ドします。この補助関数のコ,ドは,この例の終わりに示します。
dataDir = fullfile(tempdir,“ExampleFoodImageDataset”);url =“//www.tatmou.com/金宝appsupportfiles/nnet/data/ExampleFoodImageDataset.zip”;如果~存在(dataDir“dir”mkdir (dataDir);结束downloadExampleFoodImagesData (url, dataDir);
下载MathWorks示例食物图像数据集…这可能需要几分钟的时间来下载…下载完成了…将文件解压缩……解压缩完成……完成了。
データセットに含まれる食品のイメージを分類するように,SqueezeNet事前学習済みネットワークを変更します。1000年ImageNetの個のクラスに対する1000個のフィルターを備えた最終畳み込み層を,9個のフィルターのみを備えた新しい畳み込み層に置き換えます。各フィルタは食品の1のタプに対応しています。
lgraph = layerGraph(squeezenet());lgraph = lgraph. replacelayer (“ClassificationLayer_predictions”,…classificationLayer (“名称”,“ClassificationLayer_predictions”));newConv = convolution2dLayer([14 14], 9,“名称”,“conv”,“填充”,“相同”);lgraph = lgraph. replacelayer (“conv10”, newConv);
イメージデータへのパスが含まれるimageDatastore
を作成します。データの65%を学習に使用し,残りを検証に使用して,データストアを学習セットと検証セットに分割します。デ,タセットが非常に小さいため,過適合が深刻な問題になります。過適合を最小限に抑えるため,ランダムな反転とスケ,リングで学習セットを拡張します。
imds = imageDatastore(dataDir,…“IncludeSubfolders”,真的,“LabelSource”,“foldernames”);aug = imageDataAugmenter(“RandXReflection”,真的,…“RandYReflection”,真的,…“RandXScale”, [0.8 1.2],…“RandYScale”, [0.8 1.2]);trainingFraction = 0.65;[trainImds,valImds] = splitEachLabel(imds, trainingFraction);augImdsTrain = augmentedImageDatastore([227 227], trainImds,…“DataAugmentation”8月);augImdsVal = augmentedImageDatastore([227 227], valImds);
学習オプションを作成し,ネットワ,クに学習させます。SqueezeNetは簡単に学習させることができる小さいネットワ,クです。GpuまたはCPUで学習させることができますが,この例ではCPUで学習させます。
opts = trainingOptions(“亚当”,…“InitialLearnRate”1的军医,…“MaxEpochs”30岁的…“ValidationData”augImdsVal,…“详细”假的,…“阴谋”,“训练进步”,…“ExecutionEnvironment”,“cpu”,…“MiniBatchSize”, 128);rng默认的net = trainNetwork(augImdsTrain, lgraph, opts);
ネットワ,クを使用して,検証セットの,メ,ジを分類します。ネットワークが妥当な精度で新しいデータを分類することを確認するため,真のラベルと予測ラベルの混同行列をプロットします。
图();YPred =分类(net,augImdsVal);confusionchart (valImds。标签,YPred,“ColumnSummary”,“column-normalized”)
このネットワクはさまざまなメジを適切に分類しています。このネットワクは寿司のメジにいて問題があると考えられます。多くを寿司として分類していますが,一部をピザやハンバ,ガ,として分類しているためです。ホットドッグクラスに分類されている▪▪メ▪▪ジはありません。
引き続きネットワーク性能を解析するため,初期の最大プーリング層,最終畳み込み層,および最終ソフトマックス層でデータセットのすべての観測値について活性化を計算します。活性化をn行m列の行列として出力します。ここで,nは観測値の数,mは活性化の次元数です。Mは空間次元とチャネルの次元の積になります。各行は観測値で,各列は次元です。食品デ,タセットには9個のクラスがあるため,ソフトマックス層ではm = 9になります。行列の各行には9個の要素が含まれます。これは観測値が食品の9個の各クラスに属する確率に対応します。
earlyLayerName =“pool1”;finalConvLayerName =“conv”;softmaxLayerName =“概率”;pool1Activations =激活(net,…augImdsVal earlyLayerName,“OutputAs”,“行”);finalConvActivations =激活(net,…augImdsVal finalConvLayerName,“OutputAs”,“行”);softmaxActivations =激活(net,…augImdsVal softmaxLayerName,“OutputAs”,“行”);
ソフトマックス活性化を使用して,間違っている可能性が最も高い。分類の“あいまいさ”を,最も高い確率に対する2番目に高い確率の比率として定義します。分類のあいまいさは、0 (ほぼ確実に特定のクラスに分類される) と 1 (最も有力なクラスに分類される確率と 2 番目のクラスに分類される確率がほぼ同じ) の間になります。あいまいさが 1 に近い場合、そのネットワークでは特定のイメージが属するクラスを明確に判定できないことを意味します。このようなあいまいさは、類似した観測値をもつ 2 つのクラスがあり、ネットワークがこれらの違いを学習できないことが原因で発生します。または、特定の観測値に複数のクラスの要素が含まれ、どの分類が正しいかネットワークが判定できないことが原因で、あいまいさが発生する場合もあります。あいまいさが低いことは、必ずしも分類が正しいことを意味しません。ネットワークによってあるクラスの確率が高いと判定された場合でも、分類が間違っていることがあります。
[R,RI] = maxk(softmaxactivation,2,2);模糊性= R(:,2)./R(:,1);
最もあいまいな▪▪メ▪▪ジを見▪▪けます。
[歧义,歧义idx] = sort(歧义,“下”);
あいまいな▪▪メ▪▪ジの最も確率の高いクラスと真のクラスを表示します。
classList = unique(valImds.Labels);top10Idx =歧义idx (1:10);top10ambiguous = ambiguous (1:10);mostLikely = classList(RI(ambiguityIdx,1));secondLikely = classList(RI(ambiguityIdx,2));表(top10Idx top10Ambiguity,最有(1:10),secondLikely (1:10), valImds.Labels (ambiguityIdx (1:10)),…“VariableNames”,[“图像#”,“含糊不清”,“最有可能”,“第二”,“真正的课程”])
ans =10×5表图片#模糊可能性第二真实类_______ _________ _________ ____________ ____________ 94 0.9879汉堡披萨汉堡175 0.96311汉堡薯条热狗179 0.94939披萨汉堡热狗337 0.93426寿司生鱼片寿司256 0.92972寿司披萨披萨297 0.91776寿司生鱼片生鱼片283 0.80407披萨寿司披萨27 0.80278汉堡披萨薯条302 0.79283生鱼片寿司寿司201 0.76034披萨希腊沙拉披萨
。しかし実際には,この@ @ @ジはフラ@ @ @ @ @ @ @。
V = 27;图();imshow (valImds.Files {v});标题(sprintf (“我观察:% \ n”+…“实际:% s。预测:% s”v,…字符串(valImds.Labels (v))、字符串(YPred (v))),…“翻译”,“没有”);
イメージには複数の独立した領域が含まれており,そのいくつかによってネットワークに混乱が生じている可能性があります。
初期の最大プーリング層,最終畳み込み層,および最終ソフトマックス層について,ネットワークデータの低次元表現を計算します。関数tsne
を使用して,活性化デ,タの次元をmから2に減らします。活性化の次元が大きくなるほど,t-SNEの計算にかかる時間は長くなります。そのため,活性化の次元が200704の初期の最大プーリング層は,最終ソフトマックス層より計算に時間がかかります。t-SNEの結果の再現性にいて乱数シドを設定します。
rng默认的pool1tsne = tsne(pool1activation);finalConvtsne = tsne(finalConvActivations);softmaxsne = tsne(softmaxActivations);
t-SNE手法では距離の保持が試みられるため,高次元表現で近接している点は,低次元表現でも近接しています。混同行列からわかるように,ネットワ,クは異なるクラスへの分類では効果を発揮します。そのため,シーザーサラダとカプレーゼサラダなど,意味的に類似している(または同じタイプの)イメージは,ソフトマックス活性化の空間で近接しています。t-SNEではこの近さが2次元表現で取得されるため,9次元のソフトマックススコアより理解しやすく,プロットが容易になります。
初期の層は,エッジや色など,低レベルの特徴に対して作用する傾向があります。深い層は,ピザとホットドッグの違いなど,よりセマンティックな意味をもつ高レベルの特徴で学習しています。そのため,初期の層からの活性化はクラスによるクラスタリングを示しません。ピクセル単位で類似する(たとえば,どちらも緑のピクセルを多く含んでいる)2つのイメージは,セマンティックなコンテンツに関係なく,活性化の高次元空間で近接しています。後の層からの活性化は,同じクラスの点を一緒にクラスタリングする傾向があります。この動作はソフトマックス層で最も顕著であり,2次元のt-SNE表現で維持されます。
関数gscatter
を使用して,初期の最大プーリング層,最終畳み込み層,および最終ソフトマックス層についてt-SNEデータをプロットします。初期の最大プーリング層の活性化は,同じクラスのイメージ間のクラスタリングを示していないことがわかります。最終畳み込み層の活性化はクラスによるクラスタリングがある程度行われていますが,ソフトマックス活性化ほどではありません。それぞれの色は各クラスの観測値に対応しています。
doLegend =“关闭”;markerSize = 7;图;次要情节(1,3,1);gscatter (pool1tsne (: 1) pool1tsne (:, 2), valImds。标签,…[],“。”、markerSize doLegend);标题(“最大池化激活”);次要情节(1、3、2);gscatter (finalConvtsne (: 1) finalConvtsne (:, 2), valImds。标签,…[],“。”、markerSize doLegend);标题(“最终的conv激活”);次要情节(1,3,3);gscatter (softmaxtsne (: 1) softmaxtsne (:, 2), valImds。标签,…[],“。”、markerSize doLegend);标题(“Softmax激活”);
各クラスのラベル付けの凡例を含む,ソフトマックス活性化の大きいプロットを作成します。t-SNEプロットから,事後確率分布の構造にいてより多くのことがわかります。
たとえば,このプロットにはフライドポテトの観測値の独立した個別のクラスターが表示されていますが,刺身と寿司のクラスターは適切に解決されていません。このプロットは,混同行列と同様に,フライドポテトのクラスの予測でネットワークの精度がより高くなることを示しています。
numClasses =长度(classList);colors = lines(numClasses);H =数字;gscatter (softmaxtsne (: 1) softmaxtsne (:, 2), valImds.Labels,颜色);L =传说;l.Interpreter =“没有”;l.Location =“bestoutside”;
t-SNEを使用して,ネットワクによって誤分類されるメジとその理由を判定できます。間違った観測値は多くの場合,周囲のクラスタ,に対する誤った色の孤立点として表示されています。たとえば,誤分類されたハンバーガーのイメージはフライドポテトの領域に非常に近接しています(オレンジのクラスターの中心に最も近い緑の点)。この点は観測値99です。t-SNEプロットでこの観測値を円で囲み,imshow
で▪▪メ▪▪ジを表示します。
奥林匹克广播服务公司=99;图(h)在;Hs = scatter(softmaxsne (obs, 1), softmaxsne (obs, 2),…“黑”,“线宽”, 1.5);l.String{结束}=“汉堡包”;持有从;图();imshow (valImds.Files{奥林匹克广播服务公司});标题(sprintf (“我观察:% \ n”+…“实际:% s。预测:% s”奥林匹克广播服务公司,…字符串(valImds.Labels(突发))、字符串(YPred(突发))),…“翻译”,“没有”);
。この場合,前景の食品がハンバーガーであるにもかかわらず,ネットワークはイメージをフライドポテトとして分類しています。@ @ @ @ @ @ @ @ @ @ @ @ @ @。
同様に,(この例で前述した)あいまいなメジ27には複数の領域があります。このフラaapl . exeこのフラaapl . exeドポテトのaapl . exeジのあいまいな側面が強調表示されたt-SNEプロットを確認します。
奥林匹克广播服务公司=27;图(h)在;H = scatter(softmaxsne (obs, 1), softmaxsne (obs, 2),…“k”,' d ',“线宽”, 1.5);l.String{结束}=“炸薯条”;持有从;
このメジは,適切に定義されたクラスタでプロットに表示されていません。これは,分類が間違っている可能性が高いことを示します。このメジはフラドポテトのクラスタからは遠く,ハンバガのクラスタの近くにあります。
誤分類される“理由”をその他の情報で示さなければなりません。この情報には通常,に基づく仮説を使用します。その後,その他のデータを使用するか,またはイメージのどの空間領域がネットワークによる分類で重要であるかを示すツールを使用して,仮説をテストします。例にいては,occlusionSensitivity
とGrad-CAMでの深層学習による判定の理由の解明を参照してください。
[1] van der Maaten, laurence和Geoffrey Hinton。“使用t-SNE可视化数据。”机器学习研究杂志2008,第2579-2605页。
函数dataDir downloadExampleFoodImagesData (url)下载示例食品图像数据集,包含978张图片%不同种类的食物分为9类。The MathWorks, Inc.版权所有文件名=“ExampleFoodImageDataset.zip”;fileFullPath = fullfile(dataDir, fileName);下载.zip文件到一个临时目录。如果~存在(fileFullPath“文件”)流(“下载MathWorks示例食物图像数据集…\n”);流(“这可能需要几分钟才能下载……\n”);websave (fileFullPath、url);流(“下载完成…\ n”);其他的流(“跳过下载,文件已经存在……\n”);结束解压缩文件。%通过检查文件是否已经解压缩一个类目录的%。exampleFolderFullPath = fullfile(dataDir,“披萨”);如果~存在(exampleFolderFullPath“dir”)流(“将文件解压缩…\ n”);解压缩(fileFullPath dataDir);流(“解完成…\ n”);其他的流("跳过解压缩,文件已解压缩…\n");结束流(“完成。\ n”);结束
激活
|分类
|layerGraph
|occlusionSensitivity
|squeezenet
|trainingOptions
|trainNetwork
|tsne
(统计和机器学习工具箱)