1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| import torch import numpy as np from torch.utils.data import DataLoader, Dataset import matplotlib.pyplot as plt
class DiabetesDataset(Dataset): def __init__(self, filepath): xy = np.loadtxt(filepath, delimiter=',', dtype=np.float32) self.len = xy.shape[0] self.x_data = torch.from_numpy(xy[:, :-1]) self.y_data = torch.from_numpy(xy[:, [-1]]) def __len__(self): return self.len def __getitem__(self, index): return self.x_data[index], self.y_data[index]
dataset = DiabetesDataset('diabetes.csv.gz') train_loader = DataLoader(dataset=dataset, shuffle=True, batch_size=30, num_workers=0)
class Model(torch.nn.Module): def __init__(self): super(Model, self).__init__() self.linear1 = torch.nn.Linear(8, 6) self.linear2 = torch.nn.Linear(6, 4) self.linear3 = torch.nn.Linear(4, 1) self.sigmoid = torch.nn.Sigmoid() def forward(self, x): x = self.sigmoid(self.linear1(x)) x = self.sigmoid(self.linear2(x)) x = self.sigmoid(self.linear3(x)) return x
model = Model() criterion = torch.nn.BCELoss(reduction='mean') optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
epoch_list = [] loss_list = []
if __name__ == '__main__': for epoch in range(1, 100): epoch_loss = 0.0 for i, data in enumerate(train_loader, 0): inputs, labels = data outputs = model(inputs) loss = criterion(outputs, labels) optimizer.zero_grad() loss.backward() optimizer.step()
epoch_loss += loss.item() avg_loss = epoch_loss / len(train_loader) epoch_list.append(epoch) loss_list.append(avg_loss) print(f'Epoch [{epoch}], Loss: {avg_loss:.4f}')
plt.plot(epoch_list, loss_list, label='Training Loss') plt.xlabel('Epoch') plt.ylabel('Loss') plt.title('Training Loss Curve') plt.legend() plt.show()
|