Effacer les filtres
Effacer les filtres

【Alexnet】i​nputLayerに​対するイメージサイズ​の変更について

7 vues (au cours des 30 derniers jours)
MASAYUKI EGUCHI
MASAYUKI EGUCHI le 7 Avr 2018
Commenté : MASAYUKI EGUCHI le 26 Mai 2018
MATLAB初心者の学生です。 Alexnetを用いた転移学習をしたいのですが、学習元のイメージサイズが、83×83です。 そのため、入力層を変えてみたのですが、下記のとおり、Layer'fc6 でエラーが生じました。
 ①Alexnetをどのように変更すればよいのでしょうか? 
 ②また、Alexnetの変更で対応が困難な場合、学習元のイメージサイズを227×227 に変換する方法はありますでしょうか?
②の場合、大量のデータを扱っているので、簡易にできる方法があると助かります。 よろしくお願いいたします。
dsflowers=imageDatastore('C:\Flowers','IncludeSubfolders',true)
flowernames = dsflowers.Labels
dsflowers = imageDatastore('C:\Flowers','IncludeSubfolders',true,'LabelSource','foldernames')
[flwrTrain,flwrTest] = splitEachLabel(dsflowers,100)
anet=alexnet;
layers=anet.Layers
inputLayer = imageInputLayer([83 83 3]);
layers(1)=inputLayer
fc = fullyConnectedLayer(4)
layers(23) = fc
layers(end) = classificationLayer
opts = trainingOptions('sgdm','InitialLearnRate',0.001)
[flowernet,info]=trainNetwork(flwrTrain,layers,opts);
エラー:trainNetwork(line154)
無効なネットワーク
原因:Layer'fc6Input size mismatch,Size of input to this layer is different from the expected input size.
この層の入力:from layer 'pool5'(1×1×256 出力)

Réponse acceptée

michio
michio le 8 Avr 2018
Modifié(e) : michio le 8 Avr 2018
入力画像のサイズを変えるのが良いかと思います。とはいえ、事前にすべての画像サイズを変更して保存しておく必要はなく、imageDatastore では、ReadFcn プロパティーを設定することで、画像を読み込むと同時にそのサイズ変更処理を実行させることができます。
ここでは読み込む際に画像のサイズを 227 x 227 に変更する処理を行う関数を添付しました。ダウンロードして
dsflowers = imageDatastore('C:\Flowers','IncludeSubfolders',true,'LabelSource','foldernames')
の後に
dsflowers.ReadFcn = @(filename)readAndPreprocessImage(filename);
と加えて、ReadFcn を設定してみてください。これで alexnet の入力層は変更せずに実行できるかと思います。
  3 commentaires
michio
michio le 16 Avr 2018
①の方を改善した方が近道である気がしますので、こちらのエラーをまず見てみましょう。
エラー:trainNetwork(line 140) Invalid training data.The output size(4) of the last layer doesn't match the number of classes (1).
このエラーからは、4 つのラベルを分類させるネットワークを構築することを想定したネットワークでありながら、学習データに 1 つのラベルしか含まれていないことが推察されます。
dsflowers=imageDatastore('C:\Flowers\*.jpg','LabelSource','foldernames')
unique(dsflowers.Labels)
と実行してラベルの種類数を確認して頂けますか?
michio
michio le 16 Avr 2018
今回実施されたいことの具体的な例として
がありますので、ぜひ確認してみてください。
また、下記 Webinar の 20分~ も内容を理解するうえでお勧めです。

Connectez-vous pour commenter.

Plus de réponses (1)

MASAYUKI EGUCHI
MASAYUKI EGUCHI le 22 Avr 2018
Modifié(e) : michio le 23 Avr 2018

ご連絡ありがとうございました。 具体例は見たのですが、複数のラベルの設定方法がなかなか理解できず、ご質問しました。

フォルダ「Flower」の直下に各ラベルのフォルダを4つ作成した上で、①を下記のとおり記載したところ無事に稼働することができました。ありがとうございました。

dsflowers=imageDatastore('C:\Flower','IncludeSubfolders',true)
flowernames=dsflowers.Labels
dsflowers=imageDatastore('C:\Flower','IncludeSubfolders',true,'LabelSource','foldernames')
dsflowers.ReadFcn=@(dsflowers)readAndPreprocessImage(dsflowers);
  2 commentaires
michio
michio le 23 Avr 2018

解決されたとのことよかったです。参考まで、ですが、

 dsflowers.ReadFcn=@(dsflowers)readAndPreprocessImage(dsflowers);

の右辺は「無名関数」を定義しておりまして、@ の後に続く部分は readAndPreprocessImage 関数に対する入力引数を意味します。dsflowers である必要はありません。例えば

 dsflowers.ReadFcn=@(x)readAndPreprocessImage(x);

でも同じ処理となります。

参考URL: 無名関数

MASAYUKI EGUCHI
MASAYUKI EGUCHI le 26 Mai 2018
dsflowers とは直接的に関係しないんですね。 勉強になります。 ありがとうございました。

Connectez-vous pour commenter.

Catégories

En savoir plus sur Deep Learning Toolbox dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!