基於pytorch線性判決器(不使用nn.moudle)

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))

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章