Anomaly detection using Variational Autoencode​r(VAE)のサンプ​ルコードエラーについ​て

こちらのサンプルコードを動かそうとしています。
最初の画像サイズの部分に関しましては入力画像に応じて変更できるように下記のように書き換えました。
Imgsize = size(readimage(imdsTrain,1)); % 画像サイズ
BlockSize = round(Imgsize(1:2)./10);% ネットワークの入力サイズ
その後実行を続けていくとモデルの学習の部分で下記のようなエラーが返されます。
配列のサイズがこの演算に適合しません。
エラー: deep.internal.recording.operations.MinusBroadcastOp/forward (32)
x = x - y;
エラー: - (39)
zdata = matlab.lang.internal.move(xdata) - matlab.lang.internal.move(ydata);
エラー: VAEmodel_ver2>ELBOloss (188)
squares = 0.5*(xPred-x).^2;
エラー: VAEmodel_ver2>modelGradients (165)
loss = ELBOloss(x, xPred, zMean, zLogvar);
エラー: deep.internal.dlfeval (18)
[varargout{1:nout}] = fun(x{:});
エラー: dlfeval (41)
[varargout{1:nout}] = deep.internal.dlfeval(fun,varargin{:});
関連ドキュメンテーション
こちらに関する解決方法はありますでしょうか。
宜しくお願い致します。

 Accepted Answer

BlockSize = round(Imgsize(1:2)./10);
BlockSizeが [72 128] となっており、入力サイズがあってないのだと思います。
この場合、Blocksize = Blocksize * 2;で解決します。

3 Comments

ご回答ありがとうございます。
こちらを試させていただきましたが解決できませんでした。
しかし、コードをたどっていくと確かにサイズの問題が原因そうです。
今回入力画像は1200×1200を使用しており、回答を適応しましてBlockSizeは240×240になります。
この状態でモデルの学習部分にある
[infGrad, genGrad] = dlfeval(...
@modelGradients, encoderNet, decoderNet, XBatch);
を適応しようとしてエラーが出ていました。
ここに入力される前のXBatchのサイズは240×240×3×64ですが、
modelGradients内のxPredのサイズが144×256×3×64になっており、ここでサイズの差が出ていることが分かりました。
しかしmodelGradients内のxPredがどこを見て144×256を持ってきたが分かりません。
お手数ですが宜しくお願い致します。
入力層と隠れ層の一部を自在なサイズに変更したいということでしょうか? 個人的には入力層のサイズに合わせた方がいいかなあと思いました。 imresize を参照ください。今回、スマホでコメントしていますので、コードそのものを確認する場合は少し時間がかかります。
ご回答・ご提案ありがとうございます。
意図としましてはおっしゃられている内容で合っています。
ご提案していただきましたimresizeで対応してみようと思います。
ありがとうございました。

Sign in to comment.

More Answers (0)

Categories

Find more on Deep Learning Toolbox in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!