最近、PyTorchのversionが0.4になったみたい。
さらにWindowsも公式からインストールできるようになったらしい。
なので、今回インストールから簡単なプログラムを動かすまでをやってみようと思います。
インストール
インストールはここからー> http://pytorch.org/
自分の環境にあわせてインストール。
簡単なプログラム
今回はシンプルにアイリスの分類をやってみます。
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as O
from sklearn import datasets
from sklearn.utils import shuffle
from sklearn.model_selection import train_test_split
iris = datasets.load_iris()
data = iris.data
target = iris.target
train_x, test_x, train_t, test_t = train_test_split(data, target, test_size=0.1)
class NN(nn.Module):
def __init__(self):
super(NN, self).__init__()
self.layer = nn.Linear(4, 3)
def forward(self, x):
return self.layer(x)
model = NN()
optimizer = O.Adam(model.parameters(), lr=0.1)
criterion = nn.CrossEntropyLoss()
for _ in range(40):
train_x, train_t = shuffle(train_x, train_t)
for i in range(0, len(train_x), 30):
x = torch.tensor(train_x[i:i+30], dtype=torch.float)
t = torch.tensor(train_t[i:i+30], dtype=torch.long)
optimizer.zero_grad()
y = model(x)
loss = criterion(y, t)
loss.backward()
optimizer.step()
tensor = torch.tensor(test_x, dtype=torch.float, requires_grad=False)
result = model(tensor)
predicted = torch.max(result, 1)[1]
label = torch.tensor(test_t, dtype=torch.long)
print("Accuray: {:.2f}".format((predicted == label).sum().item() / len(label)))
変わったところ
今までだと
x = Variable(torch.FloatTensor(train_x[i:i+30]))
t = Variable(torch.LongTensor(train_x[i:i+30])
これが、こんな感じに。
x = torch.tensor(train_x[i:i+30], dtype=torch.float)
t = torch.tensor(train_t[i:i+30], dtype=torch.long)
item()
今まではlossの中身を取り出すのはloss.data[0]みたいにしていたが、
v0.4からはloss.item()で取り出せる。
他の例
tensor = torch.tensor([1, 2, 3])
print(tensor.sum())
print(tensor.sum().item())
とりあえず、今はここまで。