X = np.zeros((N*K,D))
y = np.zeros(N*K, dtype='uint8')
np.random.seed(0)
for j in range(K):
ix = range(N*j,N*(j+1))
r = np.linspace(0.0,1,N)
t = np.linspace(j*4,(j+1)*4,N) + np.random.randn(N)*0.2
X[ix] = np.c_[r*np.sin(t), r*np.cos(t)]
y[ix] = j
import torch
import torch.nn as nn
from torch.nn import functional as F
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from torch.utils.data import TensorDataset
from torch.utils.data import DataLoader
N = 500 # 1クラスあたりのデータ数
D = 2 # データの次元
K = 3 # クラス数
#データ定義
X = np.zeros((N*K,D))
y = np.zeros(N*K, dtype='uint8')
np.random.seed(0)
for j in range(K):
ix = range(N*j,N*(j+1))
r = np.linspace(0.0,1,N)
t = np.linspace(j*4,(j+1)*4,N) + np.random.randn(N)*0.2
X[ix] = np.c_[r*np.sin(t), r*np.cos(t)]
y[ix] = j
#3×3の単位行列を生成してラベルのワンホットエンコーディング
n_values = np.max(y) + 1
Y = np.eye(n_values)[y]
#データを8:2に分割
train_X, test_X, train_Y, test_Y = train_test_split(X, Y, test_size=0.2)
with torch.no_grad():# 試験用データでは勾配を計算しない
pred_labels = [] # 各バッチごとの結果格納用
for x in test_X:
pred = net(x) #モデルの出力
#argmax関数で出力における最大値のインデックスを取得し、ワンホットエンコーディングされたラベルに変換
if torch.argmax(pred) == torch.tensor(0) :
pred_labels.append([1.,0.,0.])
elif torch.argmax(pred) == torch.tensor(1):
pred_labels.append([0.,1.,0.])
else:
pred_labels.append([0.,0.,1.])
pred_labels = np.array(pred_labels) #numpy arrayに変換
試験用データセットで推論
では、推論させ、その結果を描画してみましょう。
デフォルトのコード
import torch
import torch.nn as nn
from torch.nn import functional as F
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from torch.utils.data import TensorDataset
from torch.utils.data import DataLoader
N = 500 # 1クラスあたりのデータ数
D = 2 # データの次元
K = 3 # クラス数
#データ定義
X = np.zeros((N*K,D))
y = np.zeros(N*K, dtype='uint8')
np.random.seed(0)
for j in range(K):
ix = range(N*j,N*(j+1))
r = np.linspace(0.0,1,N)
t = np.linspace(j*4,(j+1)*4,N) + np.random.randn(N)*0.2
X[ix] = np.c_[r*np.sin(t), r*np.cos(t)]
y[ix] = j
#3×3の単位行列を生成してラベルのワンホットエンコーディング
n_values = np.max(y) + 1
Y = np.eye(n_values)[y]
#データを8:2に分割
train_X, test_X, train_Y, test_Y = train_test_split(X, Y, test_size=0.2)
with torch.no_grad():# 試験用データでは勾配を計算しない
pred_labels = [] # 各バッチごとの結果格納用
for x in test_X:
pred = net(x) #モデルの出力
#argmax関数で出力における最大値のインデックスを取得し、ワンホットエンコーディングされたラベルに変換
if torch.argmax(pred) == torch.tensor(0) :
pred_labels.append([1.,0.,0.])
import torch
import torch.nn as nn
from torch.nn import functional as F
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from torch.utils.data import TensorDataset
from torch.utils.data import DataLoader
N = 500 # 1クラスあたりのデータ数
D = 2 # データの次元
K = 3 # クラス数
#データ定義
X = np.zeros((N*K,D))
y = np.zeros(N*K, dtype='uint8')
np.random.seed(0)
for j in range(K):
ix = range(N*j,N*(j+1))
r = np.linspace(0.0,1,N)
t = np.linspace(j*4,(j+1)*4,N) + np.random.randn(N)*0.2
X[ix] = np.c_[r*np.sin(t), r*np.cos(t)]
y[ix] = j
#3×3の単位行列を生成してラベルのワンホットエンコーディング
n_values = np.max(y) + 1
Y = np.eye(n_values)[y]
#データを8:2に分割
train_X, test_X, train_Y, test_Y = train_test_split(X, Y, test_size=0.2)
import torch
import torch.nn as nn
from torch.nn import functional as F
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from torch.utils.data import TensorDataset
from torch.utils.data import DataLoader
N = 500 # 1クラスあたりのデータ数
D = 2 # データの次元
K = 3 # クラス数
#データ定義
X = np.zeros((N*K,D))
y = np.zeros(N*K, dtype='uint8')
np.random.seed(0)
for j in range(K):
ix = range(N*j,N*(j+1))
r = np.linspace(0.0,1,N)
t = np.linspace(j*4,(j+1)*4,N) + np.random.randn(N)*0.2
X[ix] = np.c_[r*np.sin(t), r*np.cos(t)]
y[ix] = j
#3×3の単位行列を生成してラベルのワンホットエンコーディング
n_values = np.max(y) + 1
Y = np.eye(n_values)[y]
#データを8:2に分割
train_X, test_X, train_Y, test_Y = train_test_split(X, Y, test_size=0.2)