MATLAB Answers

1

オートエンコーダーの​学習に関するプロット​の値の取得

Asked by Kenta Itakura on 21 Feb 2019
Latest activity Commented on by Kenta Itakura on 21 Feb 2019
XTrain = digitTrainCellArrayData;
hiddenSize = 25;
autoenc = trainAutoencoder(XTrain,hiddenSize,...
'L2WeightRegularization',0.004,...
'SparsityRegularization',4,...
'SparsityProportion',0.15);
スパース自己符号化器を使用した手書きの数字イメージの再構成に関するものです。
このコードを実行し、表示されるウィンドウのperformanceボタンを押すと、添付画像にあるとおり、学習に関するプロットを得ることができます。
そこで質問なのですが、このプロットの値(XとYの値)を取得することは可能でしょうか。
資料作成のため、この値をExcelにインポートし、こちらの望む形のフォーマットにて、同様の図を作成したいと考えています。
もし、ご存知のかたがいらっしゃれば教えていただけないでしょうか。よろしくお願いいたします。

  0 Comments

Sign in to comment.

1 Answer

Takumi
Answer by Takumi
on 21 Feb 2019
Edited by Takumi
on 21 Feb 2019
 Accepted Answer

figureから元のデータを取得する方法は以下のリンクが参考になるかと思います.
またExcelに出力する方法としては例えばxlswrite関数を用いる方法があります.
次に示す例は,まずsinおよびcos関数をプロットしたのち,変数を削除することで質問の状態を再現し,図から元データを抽出してExcelファイルの各シートに出力するものです.
’学習に関するプロット’ に適用する場合は元データを得たいグラフを出力した後に  ’% グラフィックハンドル取得' と書かれた行以降を実行していただければ良いかと思います.
clear all
close all
% サンプル
x1 = linspace(0,2*pi,100);
x2 = linspace(0,2*pi,50);
y1 = sin(x1);
y2 = cos(x2);
plot(x1,y1,'DisplayName','sin(x)')
hold on
plot(x2,y2)
clear % 変数削除
% グラフィックハンドル取得
h = findobj(gca,'type','line'); % カレント軸のラインオブジェクト
x = get(h,'XData'); %'XData'プロパティ値の取得
y = get(h,'YData'); %'YData'プロパティ値の取得
% ラインオブジェクトが複数の時はcell配列,単数の時は数値配列となるので
% 数値配列のときはcell配列に変換
if isnumeric(x)
X{1} = x;
Y{1} = y;
else
X = x;
Y = y;
end
filename = 'test.xlsx';
for i = 1:length(X)
data = [X{i};Y{i}]';
sheat = get(h(i),'DisplayName');
if isempty(sheat)
sheat = sprintf('line%u',i);
end
xlswrite(filename,data,sheat);
end

  1 Comment

Kenta Itakura on 21 Feb 2019
回答いただきありがとうございます。
丁寧にコードも示していただき、誠にありがとうございました。
無事、求めるデータをエクセルファイルに保存することができました。
グラフィックハンドルの取得方法や、エクセルのシートを分けての保存などを知ることができ、非常に勉強になりました。

Sign in to comment.