お疲れ様です。きざきまるおです。
今回はPytorchでモデルを構築してみようと思います。
それではどうぞ。
事前準備
今回はscikit-learnで準備されているワインのデータを利用しましょう。
コードは以下になります。
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import pandas as pd
from sklearn.datasets import load_wine
wine_df = load_wine()
wine_data = pd.DataFrame(wine_df.data, columns=wine_df.feature_names)
wine_target = pd.DataFrame(wine_df.target, columns=['target'])
class WineDataset(torch.utils.data.Dataset):
def __init__(self, df, transform=None):
self.features_values = df.data
self.labels = df.target
self.transform = transform
def __len__(self):
return len(self.features_values)
def __getitem__(self, idx):
features_x = torch.FloatTensor(self.features_values[idx])
labels = torch.LongTensor([self.labels[idx]])
return features_x, labels
Dataset = WineDataset(wine_df)
train_dataloader = torch.utils.data.DataLoader(dataset=Dataset, batch_size=30, shuffle=True)
はい。こちらの詳細は過去の記事で書いているのでそちらを参照してください。
モデル構築
ワインデータ分析のケースは特徴量が13でラベルが3のカテゴリ分類になります。
Pytorchのカテゴリ分類では線形結合をすることが多いためnn.Linear()を利用してみます。
そして、活性化関数はReLU関数(ランプ)を使用します。
※ReLU関数0以下の値を0とし、0以上の値はそのまま使う活性化関数。計算がシンプルになるので処理は早くなるが0以下の値の勾配が壊れやすくなる
class NeuralModel(torch.nn.Module):
def __init__(self, features_in, features_out):
super(NeuralModel, self).__init__()
self.linear1 = nn.Linear(features_in, 128)
self.linear2 = nn.Linear(128, features_out)
self.relu = nn.ReLU()
def forward(self, x):
x = self.relu(self.linear1(x))
x = self.linear2(x)
return x
features_in = 13
features_out= 3
model = NeuralModel(features_in, features_out)
入力は特徴量をしていして出力はカテゴリ数を指定しています。
これだけの記述でモデルの構築は完了しました。
以上でモデル構築について書いていきました。
そのうち損失関数と評価関数を利用して学習を回していく方法を書いていこうと思います。
それではまた。