import numpy as np
import torch
from torch.utils.data import Dataset
from torch.utils.data import DataLoader
# 加载数据集
class DiabetsDataset(Dataset):
def __init__(self, filepath):
xy = np.loadtxt(filepath, delimiter=',', dtype=np.float32) # 意思是用逗号分隔,数据类型为float32
self.len = xy.shape[0] # 行数
self.x_data = torch.from_numpy(xy[:, :-1]) # 除最后一列的所有列
self.y_data = torch.from_numpy(xy[:, [-1]]) # 最后一列
def __getitem__(self, index): # 获取数据集中的某个样本
return self.x_data[index], self.y_data[index] # 返回的是tensor
def __len__(self):
return self.len # 返回数据集的长度
dataset = DiabetsDataset('diabetes.csv.gz')
train_loader = DataLoader(dataset=dataset, batch_size=32, shuffle=True,
num_workers=2) # batch_size=32,每次读取32个样本,shuffle=True,打乱顺序,num_workers=2,使用两个子进程来加载数据
# 创建模型
class Model(torch.nn.Module):
def __init__(self):
super(Model, self).__init__() # 调用父类的构造函数
self.linear1 = torch.nn.Linear(8, 6) # 输入8个特征,输出6个特征
self.linear2 = torch.nn.Linear(6, 4) # 输入6个特征,输出4个特征
self.linear3 = torch.nn.Linear(4, 1) # 输入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') # 二分类交叉熵损失函数 reduction='mean'表示求均值
optimizer = torch.optim.SGD(model.parameters(), lr=0.01) # 随机梯度下降优化器
# 训练模型
if __name__ == '__main__':
for epoch in range(100): # 训练100次
for i, data in enumerate(train_loader, 0): # 从train_loader中读取数据 i是索引,data是数据
# 1. Prepare data
inputs, labels = data # 读取数据
# 2. Forward
y_pred = model(inputs) # 前向传播
loss = criterion(y_pred, labels) # 计算损失
# print(epoch, i, loss.item())
# 3. Backward
optimizer.zero_grad() # 梯度清零
loss.backward()
# 4. Update
optimizer.step() # 更新参数
pytorch深度学习dataloader
最新推荐文章于 2023-11-08 14:34:08 发布
该代码示例展示了如何在PyTorch中加载糖尿病数据集,定义一个具有多层线性层和Sigmoid激活的神经网络模型,使用BCELoss作为损失函数,以及应用随机梯度下降进行训练。数据被批量加载并随机打乱,模型训练迭代100次。
摘要由CSDN通过智能技术生成