Learning今回は、学習済みのVGG16を使ってImageNetの1000クラスの画像分類を試してみた。以前、Kerasでやった(2017/1/4)ことのPyTorch版。クラスとして実装されている。するとImageNetで学習済みの重みがロードされる。するとモデル構造が表示される。(features)と(classifier)の2つのSequentialモデルから成り立っていることがわかる。繰り返しからなる単純な構造。Normalizationを加えたモデルも公開されている。http://pytorch.org/docs/master/torchvision/models.htmlvgg16.eval()これを忘れると推論するたびに出力結果が変わってしまうのでおかしいと気づく。前処理ImageNetで学習した重みを使うときはImageNetの学習時と同じデータ標準化を入力画像に施す必要がある。normalize])入力画像に対して以下の変換を施している。取り出すテンソルに変換ImageNetの訓練データのmeanを引いてstdで割る(標準化)試しに画像を入れてみよう。PyTorchでは基本的に画像のロードはPILを使う。preprocessに通してみよう。224])画像が3Dテンソルに変換される。(TensorFlow)と違ってチャンネルが前にくるバッチサイズがついた4Dテンソルではないことに注意。する前までの変換関数を用意すればよい。Notebook上で画像描画できる。切り取られていることがわかる。画像をモデルに入力するときは3Dテンソルではなく、バッチサイズの次元を先頭に追加した4Dテンソルにする必要がある。アンダーバーがついた関数はIn-placeで属性を置き換える。224])モデルへ入れるときは4DテンソルをVariableに変換する必要がある。1000])outはsoftmaxを取る前の値なので確率になっていない(足して1.0にならない)。分類するときは確率にする必要がなく、出力が最大値のクラスに分類すればよい。out.topk(5)下のように出力とそのインデックスが返ってくる。1x5])ImageNetの1000クラスの332番目のインデックスのクラスに分類されたけどこれはなんだろう?ImageNetの1000クラスラベルPyTorchにはImageNetの1000クラスのラベルを取得する機能はついていないようだ。ImageNetの1000クラスのラベル情報はここからJSON形式でダウンロードできるので落とす。アンゴラちゃんでした!テスト関数化していくつかの画像で評価してみよう。0.823404imgKerasのときと微妙に結果が違うな。(CelebA)今回はDCGANをCelebAのデータで試してみた。Network今回は畳み込みニューラルネットワーク。»プロフィールid:aidiary人工知能とその関連分野に興味があります。)はてなブログをはじめよう!aidiaryさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。