2023.08.09 nn.Sequential版アイリスデータ【torch】
Keras が提供する Sequential を模したもの。
レイヤーや活性化関数を引数として渡しすので、分岐などの複雑なネットは構成できない。
引数として渡した順番に伝播されるので、forward()メソッドを書く必要が無い。
簡潔なネットの構築に有効。
code:python
import torch
import torch.nn as nn
import torch.nn.functional as F
from sklearn.datasets import load_iris
import numpy as np
from sklearn.model_selection import train_test_split
from torch.utils.data import TensorDataset, DataLoader
import torch.optim
import matplotlib.pyplot as plt
model = nn.Sequential(
nn.Linear(4, 10),
nn.ReLU(),
nn.Linear(10,3),
nn.Softmax(dim=1),
)
XX, yy = load_iris(return_X_y=True)
X = torch.Tensor(XX).float()
y = torch.Tensor(yy).to(torch.int64)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.1, random_state=42)
y_train_onehot = F.one_hot(y_train, num_classes=3).float()
y_test_onehot = F.one_hot(y_test, num_classes=3).float()
data_loader = DataLoader(
dataset = TensorDataset(X_train, y_train_onehot),
batch_size = 10,
shuffle = True,
num_workers = 0
)
epoches = 100
loss_func = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
LOSS = []
model.train()
for epoch in range(epoches):
for X, y in data_loader:
optimizer.zero_grad()
y_predict = model(X)
loss = loss_func(y_predict, y)
loss.backward()
LOSS.append(loss.item())
optimizer.step()
plt.plot(LOSS)
plt.show()