pytorch深度学习dataloader

  • Post author:
  • Post category:其他


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()  # 更新参数



版权声明:本文为zyzyzz原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。