B站刘二大人-数据集及数据加载 Lecture 8


系列文章:

《PyTorch深度学习实践》完结合集-B站刘二大人

Pytorch代码注意的细节,容易敲错的地方

B站刘二大人-线性回归及梯度下降 Lecture3

B站刘二大人-反向传播Lecture4

B站刘二大人-线性回归 Pytorch实现 Lecture 5

B站刘二大人-多元逻辑回归 Lecture 7

B站刘二大人-数据集及数据加载 Lecture 8

B站刘二大人-Softmx分类器及MNIST实现-Lecture 9


文章目录


y_pred = model(x_data)是 使用所有的数据
想进行批处理,了解几个概念
B站刘二大人-数据集及数据加载 Lecture 8_第1张图片
import torch
from torch.utils.data import Dataset #Dataset抽象子类,需要继承
from torch.utils.data import DataLoader #DataLoade用来加载数据

B站刘二大人-数据集及数据加载 Lecture 8_第2张图片
def getitem(self, index):

def len(self): 返回数据集长度
dataset = DiabetesDataset() 构造DiabetesDataset对象
train_loader = DataLoader(dataset=dataset,
batch_size=32,
shuffle=True,
num_workers=2) 初始化参数

import numpy as np
import torch
import matplotlib.pyplot as plt
# Dataset是抽象类
from  torch.utils.data import  Dataset
# DataLoader 是抽象类
from  torch.utils.data import DataLoader

class LogisticRegressionModel(torch.nn.Module):
    def __init__(self):
        super(LogisticRegressionModel, self).__init__()
        # 输入维度8输出维度6
        self.lay1 = torch.nn.Linear(8,6)
        self.lay2 = torch.nn.Linear(6,4)
        self.lay3 = torch.nn.Linear(4,1)
        self.sigmod = torch.nn.Sigmoid()

    def forward(self,x):
        x = self.sigmod(self.lay1(x))
        x = self.sigmod(self.lay2(x))
        x = self.sigmod(self.lay3(x))
        return  x

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 __getitem__(self, index):
        return self.x_data[index], self.y_data[index]

    def __len__(self):
        return  self.len


dataset = DiabetesDataset("./datasets/diabetes.csv.gz")
train_loader = DataLoader(dataset=dataset, batch_size=32, shuffle=True)
model = LogisticRegressionModel()
criterion = torch.nn.BCELoss(reduction='mean')
optimizer = torch.optim.SGD(model.parameters(), lr=0.005)
epoch_list = []
loss_list = []
for epoch in range(100):
    for i, data in enumerate(train_loader, 0):
#         1-加载数据
        inputs, label = data
#         2-forward
        y_pred = model(inputs)
        loss = criterion(y_pred, label)
        epoch_list.append(epoch)
        loss_list.append(loss.item())
        optimizer.zero_grad()
        # 3-反向传播
        loss.backward()
        # Update
        optimizer.step()

plt.plot(epoch_list, loss_list)
plt.xlabel("epoch")
plt.ylabel("loss")
plt.show()

B站刘二大人-数据集及数据加载 Lecture 8_第3张图片
MNIST数据集导入

import torch
from  torch.utils.data import  DataLoader,Dataset
from torchvision import datasets,transforms

train_dataset = datasets.MNIST(root='./datasets/mnist', train=True,
                               transform=transforms.ToTensor(),
                               download=True)
test_dataset = datasets.MNIST(root='./datasets/mnist', train=False,
                              transform=transforms.ToTensor(),
                              download=True)
train_loader = DataLoader(dataset=datasets, batch_size=32,
                          shuffle=True)

test_loader = DataLoader(dataset=test_dataset, batch_size=32,
                         shuffle=False)
for batch_idx, (inouts, target) in enumerate(test_loader):
    pass

你可能感兴趣的:(PyTorch使用,深度学习,pytorch,python)