Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PyTorchで簡単なNN作り
Search
betashort
May 09, 2020
0
150
PyTorchで簡単なNN作り
betashort
May 09, 2020
Tweet
Share
More Decks by betashort
See All by betashort
2020研究室勉強会No.0
betashort
0
71
Pythonで解く計量時系列分析1
betashort
0
54
なんでもできるPython-脳機能画像とPython-
betashort
1
150
勉強会を企画したときの資料
betashort
0
23
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
246
12k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
BBQ
matthewcrist
89
9.8k
The Cost Of JavaScript in 2023
addyosmani
53
8.9k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
The Pragmatic Product Professional
lauravandoore
36
6.9k
Faster Mobile Websites
deanohume
309
31k
Facilitating Awesome Meetings
lara
55
6.5k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.7k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Making Projects Easy
brettharned
117
6.4k
Transcript
PyTorchで簡単なNN作り 勉強会NO1
単純なNNモデルの作り⽅ 1. データの読み込み 2. モデルの定義 3. 学習 4. モデルの評価 5.
(モデルの保存) 6. 推論
ソースコードについて https://github.com/betashort/python/blob/master/NN/PyTorch_NN.ipynb • 下のリンクに今回のソースコードがあります
1. データの読み込み • torch.utils.data.Dataset() • torch.utils.data.DataLoader()
2. モデルの定義 class NNNet(nn.Module): def __init__(self, in_features, num_class=2): super(NNNet, self).__init__()
self.net = nn.Sequential( nn.Linear(5, 3), nn.ReLU(), nn.Linear(3, 2), ) def forward(self, x): out = self.net(x) return out input output forward
3. 学習の⼿順-⽤意するもの- 1. 損失関数(LossFunction) #==== 損失関数の定義 ==== criterion = nn.CrossEntropyLoss()
#==== Optimizerの定義 ==== learning_rate = 0.01 optimizer = torch.optim.Adam( model.parameters(), lr=learning_rate) 2. 最適化アルゴリズム(Optimizer) Loss Function input output correct loss optimize
3. 学習の⼿順-更新- #==== Optimizerの初期化 ==== optimizer.zero_grad() forward backward input output
Loss Function optimize #==== forward processing ==== outputs = model(images) #==== Loss calcuration ==== loss = criterion(outputs, labels) #==== backward processing ==== loss.backward() #==== update optimizer ==== optimizer.step()
4. モデルの評価 l 精度はいいか? l Lossは減少しているか? l 過学習してないか?
5. モデルの保存とロード • 学習が終わったモデルは、再現できるように保存する #====== 保存 ======= torch.save(model.state_dict(), "model.pth") •
学習済みのモデルを、読み込む model = NNNet(64) #====== ロード ======= model.load_state_dict(torch.load("model.pth", map_location=device))
6. 推論 model.eval() with torch.no_grad(): outputs = model.forward(x) input output
forward 重みを固定する
7. 畳み込み層とプーリング層 nn.Conv2d(in_channels = 1, out_channels = 16, kernel_size =
3, stride=1, padding=0) torch.nn.Conv2dで定義
7. 畳み込み層とプーリング層 nn.MaxPool2d(kernel_size=2, stride=2) プーリング層 • MaxPooling • AveragePooling