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'

浙公网安备 33010602011771号