import torch
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn import datasets
from torch.utils.data import TensorDataset, DataLoader
digits = datasets.load_digits()
plt.gray()
plt.matshow(digits.images[0])
plt.show()
print(digits.data.shape)
print(digits.target.shape)
X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, test_size=0.3)
print(X_train.shape)
w = torch.zeros((8 * 8, 10), requires_grad=True)
criterion = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.Adam([w, ], )
train_data = TensorDataset(torch.from_numpy(X_train).float(), torch.from_numpy(y_train).long())
train_loader = DataLoader(train_data, batch_size=1000, shuffle=True)
num_epochs = 200
for epoch in range(num_epochs):
for step, (image, labels) in enumerate(train_loader):
optimizer.zero_grad()
preds = torch.mm(image, w)
loss = criterion(preds, labels)
loss.backward()
optimizer.step()
print('loss={}'.format(loss.data.numpy()))
X_test = torch.from_numpy(X_test).float()
print(X_test.dtype)
print(w.dtype)
print(X_test.size())
print(w.size())
result = torch.mm(X_test, w).data
result = torch.argmax(result, dim=1)
sum = 0
for i in range(0, len(result)):
if result[i] == y_test[i]:
sum += 1
print(sum / len(result))
基於pytorch線性判決器(不使用nn.moudle)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.