pytorch深度学习dataloader

该代码示例展示了如何在PyTorch中加载糖尿病数据集,定义一个具有多层线性层和Sigmoid激活的神经网络模型,使用BCELoss作为损失函数,以及应用随机梯度下降进行训练。数据被批量加载并随机打乱,模型训练迭代100次。
摘要由CSDN通过智能技术生成
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()  # 更新参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值