Pytorch入門(3)
前回
- 自動微分により学習時に勾配を算出する
- 勾配を元にwの値をupdateしていく
今回
- 前回の実装をtorchの機能で書き換える
- 予測機能はtorchのmodel
- 損失関数はtorchのcriterion
- 勾配の更新はtorchのoptimizer
- データは前回と同様のものを利用する
class Model(torch.nn.Module):
def __init__(self):
super(Model, self).__init__()
# Linear(in_ch, out_ch) : in * w + b
self.linear = torch.nn.Linear(1, 1)
def forward(self, x):
x = self.linear(x)
return x
model
- 値を予測する機能(前回のforward関数)の実装例
- torch.nn.Moduleを継承したクラスを作成
- forwardメソッドに値を予測する機能を定義
x, y = torch.tensor([[1.],[2.],[3.]]), torch.tensor([[2.],[4.],[6.]])
model = Model()
pred = model(x[0])
print(pred)
print(model.linear.weight)
=> tensor([-1.5321], grad_fn=<AddBackward0>)
=> tensor([[-0.8516]], requires_grad=True)
model
- 定義したモデルの使用例
- 実体化したmodelに説明変数を渡すと予測値が戻る
- wの初期値はランダムらしい
criterion = torch.nn.MSELoss()
pred = model(x[0])
loss = criterion(pred, y[0])
print(loss)
=> tensor(12.4759, grad_fn=<MseLossBackward>)
criterion
- 損失関数(前回のloss_fn)を定義
- 前回の実装と近いMeanSquadErrorを利用する
- 利用方法は以下の通り
pred = model(x[0])
loss = criterion(pred, y[0])
loss.backward()
print(loss)
print(model.linear.weight.grad)
=> loss: tensor(3.1791, grad_fn=<MseLossBackward>)
=> grad: tensor([[-3.5660]])
grad
- 勾配の算出はcriterionの戻り値をbackward()する
- 重み、勾配はモデル内に存在し以下で出力できる
- 今回の勾配は以下の通り
optimizer
- 勾配を重みへ反映する処理
- 今回は確立的勾配降下法を利用
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
pred = model(x[0])
loss = criterion(pred, y[0])
loss.backward()
print(model.linear.weight.item(), model.linear.weight.grad.item())
optimizer.step() #=> 勾配を重みに反映
print(model.linear.weight)
optimizer.zero_grad() #=> 勾配を0にセット
print(model.linear.weight.grad)
=> 0.9048234224319458 -2.2820169925689697
=> tensor([[0.9276]], requires_grad=True)
=> tensor([[0.]])
まとめ
import torch
x, y = torch.tensor([ [1.], [2.], [3.] ]), torch.tensor([ [2.], [4.], [6.] ])
class Model(torch.nn.Module):
def __init__(self):
super(Model, self).__init__()
self.linear = torch.nn.Linear(1, 1)
def forward(self, x):
x = self.linear(x)
return x
model = Model()
- 以上を踏まえた実装例(前半)
まとめ
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
criterion = torch.nn.MSELoss()
for epoch in range(300):
for _x, _y in zip(x, y):
pred = model(_x)
loss = criterion(pred, _y)
loss.backward()
optimizer.step()
optimizer.zero_grad()
pred = model(torch.tensor([4.]))
print(pred)
=> tensor([7.9167], grad_fn=<AddBackward0>)
- 以上を踏まえた実装例(後半)
終了

More Related Content

PDF
2013.07.15 はじパタlt scikit-learnで始める機械学習
PDF
[第2版]Python機械学習プログラミング 第16章
PDF
[第2版]Python機械学習プログラミング 第14章
PDF
[第2版]Python機械学習プログラミング 第8章
PDF
[第2版]Python機械学習プログラミング 第13章
PPTX
[第2版]Python機械学習プログラミング 第9章
PPTX
Pytorch 01
PDF
科学技術計算関連Pythonパッケージの概要
2013.07.15 はじパタlt scikit-learnで始める機械学習
[第2版]Python機械学習プログラミング 第16章
[第2版]Python機械学習プログラミング 第14章
[第2版]Python機械学習プログラミング 第8章
[第2版]Python機械学習プログラミング 第13章
[第2版]Python機械学習プログラミング 第9章
Pytorch 01
科学技術計算関連Pythonパッケージの概要

What's hot (20)

PDF
「深層学習」勉強会LT資料 "Chainer使ってみた"
PDF
Chainer/CuPy v5 and Future (Japanese)
PDF
画像認識で物を見分ける
PDF
ディープラーニングフレームワーク とChainerの実装
PDF
Pythonによる機械学習入門 ~Deep Learningに挑戦~
PDF
[第2版]Python機械学習プログラミング 第15章
PDF
深層学習フレームワークChainerの紹介とFPGAへの期待
PDF
PythonによるDeep Learningの実装
PDF
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
PDF
[DSO] Machine Learning Seminar Vol.1 Chapter 1 and 2
PPTX
My code
PPTX
Qlik Tips 20220315 Null値の課題と対策
PDF
Chainerチュートリアル -v1.5向け- ViEW2015
PDF
[DSO] Machine Learning Seminar Vol.2 Chapter 3
PPTX
Jupyter NotebookとChainerで楽々Deep Learning
PDF
CuPy解説
PPT
Few shot object detection via feature reweighting
PDF
[DL輪読会]“Submodular Field Grammars Representation” and “Deep Submodular Functi...
PPTX
はじめての人のためのDeep Learning
PDF
DTrace for biginners part(2)
「深層学習」勉強会LT資料 "Chainer使ってみた"
Chainer/CuPy v5 and Future (Japanese)
画像認識で物を見分ける
ディープラーニングフレームワーク とChainerの実装
Pythonによる機械学習入門 ~Deep Learningに挑戦~
[第2版]Python機械学習プログラミング 第15章
深層学習フレームワークChainerの紹介とFPGAへの期待
PythonによるDeep Learningの実装
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
[DSO] Machine Learning Seminar Vol.1 Chapter 1 and 2
My code
Qlik Tips 20220315 Null値の課題と対策
Chainerチュートリアル -v1.5向け- ViEW2015
[DSO] Machine Learning Seminar Vol.2 Chapter 3
Jupyter NotebookとChainerで楽々Deep Learning
CuPy解説
Few shot object detection via feature reweighting
[DL輪読会]“Submodular Field Grammars Representation” and “Deep Submodular Functi...
はじめての人のためのDeep Learning
DTrace for biginners part(2)
Ad

Similar to Pytorch 03 (20)

PDF
機械学習を用いた予測モデル構築・評価
PDF
Chainerの使い方と自然言語処理への応用
PDF
boost tour 1.48.0 all
PDF
Boost tour 1_40_0
PDF
Boost Tour 1.50.0 All
PDF
Why Reactive Matters #ScalaMatsuri
PPT
Gurobi python
PDF
SMCTC ライブラリの使用方法
PPTX
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
PDF
はじめてのPowerShell
PDF
20180123 power shell
PDF
Opencv object detection_takmin
PDF
研究生のためのC++ no.4
PPTX
葉物野菜を見極めたい!by Keras
PDF
mxnetで頑張る深層学習
PPT
Or seminar2011final
PDF
OpenCVの拡張ユーティリティ関数群
ODP
Ekmett勉強会発表資料
PDF
JSクラス定義
PDF
研究生のためのC++ no.3
機械学習を用いた予測モデル構築・評価
Chainerの使い方と自然言語処理への応用
boost tour 1.48.0 all
Boost tour 1_40_0
Boost Tour 1.50.0 All
Why Reactive Matters #ScalaMatsuri
Gurobi python
SMCTC ライブラリの使用方法
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
はじめてのPowerShell
20180123 power shell
Opencv object detection_takmin
研究生のためのC++ no.4
葉物野菜を見極めたい!by Keras
mxnetで頑張る深層学習
Or seminar2011final
OpenCVの拡張ユーティリティ関数群
Ekmett勉強会発表資料
JSクラス定義
研究生のためのC++ no.3
Ad

Pytorch 03

  • 3. 今回 - 前回の実装をtorchの機能で書き換える - 予測機能はtorchのmodel - 損失関数はtorchのcriterion - 勾配の更新はtorchのoptimizer - データは前回と同様のものを利用する
  • 4. class Model(torch.nn.Module): def __init__(self): super(Model, self).__init__() # Linear(in_ch, out_ch) : in * w + b self.linear = torch.nn.Linear(1, 1) def forward(self, x): x = self.linear(x) return x model - 値を予測する機能(前回のforward関数)の実装例 - torch.nn.Moduleを継承したクラスを作成 - forwardメソッドに値を予測する機能を定義
  • 5. x, y = torch.tensor([[1.],[2.],[3.]]), torch.tensor([[2.],[4.],[6.]]) model = Model() pred = model(x[0]) print(pred) print(model.linear.weight) => tensor([-1.5321], grad_fn=<AddBackward0>) => tensor([[-0.8516]], requires_grad=True) model - 定義したモデルの使用例 - 実体化したmodelに説明変数を渡すと予測値が戻る - wの初期値はランダムらしい
  • 6. criterion = torch.nn.MSELoss() pred = model(x[0]) loss = criterion(pred, y[0]) print(loss) => tensor(12.4759, grad_fn=<MseLossBackward>) criterion - 損失関数(前回のloss_fn)を定義 - 前回の実装と近いMeanSquadErrorを利用する - 利用方法は以下の通り
  • 7. pred = model(x[0]) loss = criterion(pred, y[0]) loss.backward() print(loss) print(model.linear.weight.grad) => loss: tensor(3.1791, grad_fn=<MseLossBackward>) => grad: tensor([[-3.5660]]) grad - 勾配の算出はcriterionの戻り値をbackward()する - 重み、勾配はモデル内に存在し以下で出力できる - 今回の勾配は以下の通り
  • 8. optimizer - 勾配を重みへ反映する処理 - 今回は確立的勾配降下法を利用 optimizer = torch.optim.SGD(model.parameters(), lr=0.01) pred = model(x[0]) loss = criterion(pred, y[0]) loss.backward() print(model.linear.weight.item(), model.linear.weight.grad.item()) optimizer.step() #=> 勾配を重みに反映 print(model.linear.weight) optimizer.zero_grad() #=> 勾配を0にセット print(model.linear.weight.grad) => 0.9048234224319458 -2.2820169925689697 => tensor([[0.9276]], requires_grad=True) => tensor([[0.]])
  • 9. まとめ import torch x, y = torch.tensor([ [1.], [2.], [3.] ]), torch.tensor([ [2.], [4.], [6.] ]) class Model(torch.nn.Module): def __init__(self): super(Model, self).__init__() self.linear = torch.nn.Linear(1, 1) def forward(self, x): x = self.linear(x) return x model = Model() - 以上を踏まえた実装例(前半)
  • 10. まとめ optimizer = torch.optim.SGD(model.parameters(), lr=0.01) criterion = torch.nn.MSELoss() for epoch in range(300): for _x, _y in zip(x, y): pred = model(_x) loss = criterion(pred, _y) loss.backward() optimizer.step() optimizer.zero_grad() pred = model(torch.tensor([4.])) print(pred) => tensor([7.9167], grad_fn=<AddBackward0>) - 以上を踏まえた実装例(後半)