PyTorchとオブジェクト指向プログラミング

PyTorchによる中級ディープラーニング

Michal Oleszak

Machine Learning Engineer

学習内容

堅牢な深層学習モデルの訓練方法:

  • オプティマイザによる訓練の改善
  • 勾配消失・爆発の軽減
  • 畳み込みニューラルネットワーク(CNN)
  • 再帰型ニューラルネットワーク(RNN)
  • マルチ入力・マルチ出力モデル

 

 

PyTorchロゴ

PyTorchによる中級ディープラーニング

前提知識

本コースは以下のトピックを理解していることを前提とします:

  • ニューラルネットワークの訓練:

    • 順伝播
    • 損失の計算
    • 逆伝播
  • PyTorchによるモデル訓練:

    • DatasetとDataLoader
    • モデル訓練ループ
    • モデル評価
  • 前提コース: Introduction to Deep Learning with PyTorch

PyTorchによる中級ディープラーニング

オブジェクト指向プログラミング(OOP)

  • OOPを使って以下を定義します:

    • PyTorch Dataset
    • PyTorchモデル
  • OOPではオブジェクトを以下で構成します:

    • 機能(メソッド)
    • データ(属性)
PyTorchによる中級ディープラーニング

オブジェクト指向プログラミング(OOP)

class BankAccount:
    def __init__(self, balance):
        self.balance = balance
  • __init__BankAccountオブジェクト生成時に呼び出される
  • balanceBankAccountオブジェクトの属性
account = BankAccount(100)
print(account.balance)
100
PyTorchによる中級ディープラーニング

オブジェクト指向プログラミング(OOP)

  • メソッド:タスクを実行するPython関数
  • depositメソッドで残高を増やす
class BankAccount:
    def __init__(self, balance):
        self.balance = balance


def deposit(self, amount): self.balance += amount
account = BankAccount(100)
account.deposit(50)
print(account.balance)
150
PyTorchによる中級ディープラーニング

水の飲料可否データセット

水の飲料可否データの最初と最後の数行を示すPandas DataFrame。

PyTorchによる中級ディープラーニング

PyTorch Dataset

from torch.utils.data import Dataset

class WaterDataset(Dataset):

def __init__(self, csv_path): super().__init__() df = pd.read_csv(csv_path) self.data = df.to_numpy()
def __len__(self): return self.data.shape[0]
def __getitem__(self, idx): features = self.data[idx, :-1] label = self.data[idx, -1] return features, label
  • init:データを読み込み、numpy配列として保存
    • super().__init__()によりWaterDatasetがtorchのDatasetとして動作する
  • len:データセットのサイズを返す
  • getitem
    • idxという引数を受け取る
    • インデックスidxの特徴量とラベルを返す
PyTorchによる中級ディープラーニング

PyTorch DataLoader

dataset_train = WaterDataset(
    "water_train.csv"
)
from torch.utils.data import DataLoader

dataloader_train = DataLoader(
    dataset_train,
    batch_size=2,
    shuffle=True,
)
features, labels = next(iter(dataloader_train))
print(f"Features: {features},\nLabels: {labels}")
Features: tensor([
  [0.4899, 0.4180, 0.6299, 0.3496, 0.4575,
   0.3615, 0.3259, 0.5011, 0.7545],
  [0.7953, 0.6305, 0.4480, 0.6549, 0.7813,
   0.6566, 0.6340, 0.5493, 0.5789]
]),
Labels: tensor([1., 0.])
PyTorchによる中級ディープラーニング

PyTorchモデル

Sequentialによるモデル定義:

net = nn.Sequential(
  nn.Linear(9, 16),
  nn.ReLU(),
  nn.Linear(16, 8),
  nn.ReLU(),
  nn.Linear(8, 1),
  nn.Sigmoid(),
)

クラスベースのモデル定義:

class Net(nn.Module):

def __init__(self): super().__init__() self.fc1 = nn.Linear(9, 16) self.fc2 = nn.Linear(16, 8) self.fc3 = nn.Linear(8, 1)
def forward(self, x): x = nn.functional.relu(self.fc1(x)) x = nn.functional.relu(self.fc2(x)) x = nn.functional.sigmoid(self.fc3(x)) return x net = Net()
PyTorchによる中級ディープラーニング

練習しましょう!

PyTorchによる中級ディープラーニング

Preparing Video For Download...