modelとして自分が用意した画像に対して学習」する時のメモ。これが一番簡単だと思います。(0.2.1)の話をする。torchvision学習済みモデルはpytorchの画像向けパッケージとなるtorchvisionでもサポートされている。documentation最近はすごいスピードで他の高精度モデルや、仕組みの違う学習済みモデルが出てきてるので、pytorchのpretrainモデルを使う場合のサポートpackageを使うと良さそう。以下のどちらでも良い。NetworksPNASNet-5-LargePolyNetモデルは「どのモデルがどんな感じの精度なん?」というのは以下READMEにimagenetでの精度比較表が載ってるので参考に。https://github.com/Cadene/pretrained-models.pytorch#evaluation-on-imagenetそれぞれのモデルへのリンクも以下に存在する。-cnn_finetuneの方がちょっとばかり楽できるので今回はcnn_finetuneベースで薦める。分類するクラス数とモデルの入力となる画像サイズ、pretrained=Trueを指定して実行すると、学習済みデータがダウンロードされて読み込まれる。model.to(device)学習のためのデータセットとしては、header付きのhogehoge.csvなる「学習画像の名前(ImageName)」と「学習画像に対するラベル(ImageLabel)」がある想定。ImageName,ImageLabel0001.jpg,10002.jpg,10003.jpg,00004.jpg,1また「学習画像は/hogehoge/train/なる配下に全て入っている」想定。学習にはDataset、DataLoaderというクラスを利用する必要がある。今回は雑に2クラスのデータセットを想定して書く。shuffle=True)シンプルに画像とラベルを返す__getitem__とデータの大きさを返す__len__を実装するだけです。バッチサイズは画像の大きさに合わせて調整すると良いです。memory」になります。Optimizerを選ぶ。学習済みモデル使うならSGDでええんちゃうんと思ってるけどベストプラクティスは謎。momentum=0.9)これで後は学習回すだけ。train(epoch)以下examplesを参考にした。-state_dictはモデルの構造だけ保存。普通にsaveするとGPU等device関連情報も一緒に保存するため、別環境で動かす時面倒らしい。modelをそのままsaveした場合はloadで簡易に読み込めるが、state_dictした場合は以下のように。model.eval()テスト時もDataLoaderが必要になるが、今回は上記train時に作成したMyDataSetクラスをそのまま使う。batch_size=32)torch.no_gradとした上でmodelにデータを入力するだけ。皆大好きclassification_reportを出す。なってるので、argmax取ってやれば予測クラスを出すことができる。-最近インターン生にオススメされてPyTorch触り始めて「ええやん」ってなってるので書いた。使う話も気が向いたら書くと思うけど、TensorFlow資産(tensorbordとか)にも簡単に繋げられるし、分散時もバックエンド周りを意識しながら書きやすいので結構良い感じする。追記:2018/09/16以下の部分でtransforms内のメソッドを利用して入力正規化とかaugumentationも出来るのですが、今回省いています。transforms.Compose([transforms.ToTensor()])そしたら「正規化はpretrainに合わせてやった方がいいのでは?」みたいな話がTwitterで発生しました。結論としては、多分やったほうが良いみたいになったのですが、確証が今の所ないのでtransforms.Normalizeとかtransforms内の色々試して比較すべきみたいな感じです。stdが載っているので使うと良いと思います。最近はWebスクレイピングにお熱である。-スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。