pytorch测试

#%%

import torch as th
import numpy as np
import matplotlib.pyplot as plt
from torch.utils.data import Dataset
from torch.utils.data import DataLoader

#%%

data = np.loadtxt('data/diabetes.csv',delimiter=',')

class DiabetesDataset(Dataset):
    def __init__(self,filepath):
        xy = np.loadtxt(filepath,delimiter=',',dtype=np.float32)
        self.len = xy.shape[0]
        self.x_data = xy[:,:-1]
        self.y_data = xy[:,-1:]

    def __getitem__(self, index):
        return self.x_data[index] ,self.y_data[index],
    def __len__(self):
        return self.len



dataset = DiabetesDataset('data/diabetes.csv')
train_loader = DataLoader(
    dataset=dataset,
    batch_size=30360,
    shuffle=True,
    num_workers=0, # 咋这bug还没修复呢,if main 也不行呀
)
print(len(dataset))
class LR(th.nn.Module):
    def __init__(self):
        super(LR,self).__init__()
        self.linear = th.nn.Linear(8,1)

    def forward(self,x):
        return th.sigmoid(self.linear(x))

#%%

lr = 0.1
model = LR()
model = th.nn.DataParallel(model)
model = model.cuda()
criterion = th.nn.BCELoss()
optimizer = th.optim.SGD(model.parameters(),lr=lr)
li = []
acc = []

for x,y in train_loader:
    x = x.cuda()
    y = y.cuda()
    for epoch in range(5000):
        y_hat = model(x)
        loss = criterion(y_hat,y)
        optimizer.zero_grad()
        loss.backward()
        li.append(loss.item())
        optimizer.step()

plt.plot(li,label=str(lr))
plt.legend()

x_test = th.Tensor(data[-1000:,:-1]).cuda()
y_test = th.Tensor(data[-1000:,-1:]).cuda()
print(sum((model(x_test) > 0.5) == (y_test == 1)) / y_test.shape[0])

另外修复画图卡死问题:
import os
os.environ['KMP_DUPLICATE_LIB_OK']='True'

posted @ 2021-01-26 09:11  aminor  阅读(197)  评论(0)    收藏  举报
/**/ /**/