Atcoder Beginner Contest 144 振り返り 【Python】
【Python】オフラインでfine-tuningのpretrainedを使用する方法【PyTorch】
ネットワーク環境にないGPU計算機でfine-tuningのpretrainedをする方法についてまとめます。 今回はresnet18を使用するケースを考えていますが、同じ手順で他のモデルも同様にオフライン実行できると思います。
目次
環境
fine-tuningのpretrainedとは
pytorchでfine-tuningするときmodels.nameでモデルの型を参照し、pretrained=Trueでパラメータを付与する処理になっています。
model_ft = models.resnet18(pretrained=True)
このパラメータが保存されているオブジェクトファイルはライブラリが所持しているものではなく、オンラインからダウンロードする処理になっています。
因みにpretrained=Falseにすればオフライン実行できますが、パラメータは1からの学習になりfine-tuningの強みをあまり活かせません。
torchvision.modelsのオンライン参照箇所
model_urls = { 'resnet18': 'https://download.pytorch.org/models/resnet18-5c106cde.pth', 'resnet34': 'https://download.pytorch.org/models/resnet34-333f7ec4.pth', 'resnet50': 'https://download.pytorch.org/models/resnet50-19c8e357.pth', 'resnet101': 'https://download.pytorch.org/models/resnet101-5d3b4d8f.pth', 'resnet152': 'https://download.pytorch.org/models/resnet152-b121ed2d.pth', 'resnext50_32x4d': 'https://download.pytorch.org/models/resnext50_32x4d-7cdf4587.pth', 'resnext101_32x8d': 'https://download.pytorch.org/models/resnext101_32x8d-8ba56ff5.pth', 'wide_resnet50_2': 'https://download.pytorch.org/models/wide_resnet50_2-95faca4d.pth', 'wide_resnet101_2': 'https://download.pytorch.org/models/wide_resnet101_2-32ee1156.pth', } def _resnet(arch, block, layers, pretrained, progress, **kwargs): model = ResNet(block, layers, **kwargs) if pretrained: state_dict = load_state_dict_from_url(model_urls[arch], progress=progress) model.load_state_dict(state_dict) return model
変更する処理
1. 使用するモデルの学習済みモデルをダウンロードし、ローカルに保存する
ダウンロード先は上のmodel_urlsに書いてあります。 例えば、resnet18を使用したい場合は https://download.pytorch.org/models/resnet18-5c106cde.pth からダウンロードします。
2. pretrained=Falseでモデルの型のみ取得する
model_ft = models.resnet18(pretrained=False)
3. 上で定義したモデルに保存した学習済みモデルをloadする
ここでは保存先フォルダを model_pretrained にしています。
model_ft.load_state_dict(torch.load('model_pretrained/resnet18-5c106cde.pth'))
最後に
本来はライブラリ関数のオーバーライドとかで綺麗に実装したかったんですけど、色々やって断念しました。
もしオーバーライドで出来た方がいればコメントで教えてもらえると助かります🙏
【Python】[Errno 32] Broken pipe【PyTroch】
pytorchで [Errno 32] Broken pipe の解消方法について
実行環境
- windows 10
- PyTorch v1.2
エラー発生原因
このエラーはwindows+torch.utils.data.DataLoaderのnum_workers>1 + IPythonの書き方で発生してるようです。
同じコードをcentosで実行すると正常に動作するのでwindows動作でのバグか仕様みたいです。 dataloaderのnum_workersを複数にしてマルチスレッドで処理するときにエラーが発生してるみたいです。
解消方法
def main(): の中に処理を記述すれば正常に動作します。
def main(): # ここにpytorchのコードを記述 if __name__ == "__main__": main()
僕の場合.ipynbで書いたものを無理やり.pyで実行したら案の定エラーが発生。
結論
良い子のみんなはmain関数をちゃんと作ろうね!!
【Python】 str型からOrderedDict型に変換する方法
str型からOrderedDict型*1への変換についてまとめました。
1. JSONDecoderを使う場合
from collections import OrderedDict import json decoder = json.JSONDecoder(object_pairs_hook=OrderedDict) json_string = '{"info":{"name":"牛タン", "price":380}}' print(decoder.decode(json_string))
2. 文字列から直接デコードする場合
from collections import OrderedDict import json json_string = '{"info":{"name":"牛タン", "price":380}}' od = json.loads(json_string, object_pairs_hook=OrderedDict) print(od)
参考: python - Converting string to ordered dictionary? - Stack Overflow
FUNProCon -2019夏- に参加してきました!
2019/10/5に行われた学内プログラミングコンテストであるログイン - Google アカウントに参加してきました。
その感想とかを書きたいと思います。
はこだて未来大生を対象としたプロコン。
使用言語は C, C++, Java, Python3, Rubyなどから使用したいものを選択。
以下の3部門で、各部門のランキング上位者に賞品が当たる。
- 部門1 :1年生対象
- 部門2 :2年生対象
- 部門3+ :3年生以上対象
表彰状のほか、Amazonギフト券などを予定。
主催: 情報教育IRプロジェクト(未来大特別研究費 重点領域・戦略研究)
協賛: 公立はこだて未来大学高度ICTコース
FUNProConは、444株式会社の支援を受けて開催いたします。