pytorch项目怎么跑?

PyTorch基础训练流程:使用PyTorch建立深度学习模型一般有以下几个步骤:

  • 基础配置
  • 数据读入
  • 模型构建
  • 损失函数与优化器
  • 训练
  • 评估

在以下笔记中,会先简单介绍每个步骤的基础内容,然后搭配案例,使用FashionMNIST数据集,通过PyTorch代码实现每一个步骤,最终搭建并训练出一个分类器。

pytorch项目怎么跑?

基本配置

在基础配置中一般需要完成以下三点配置:

导入Python常用包

  • 通过常用包快速实现我们需要的功能

GPU配置

  • 如果后续计算需要用到GPU,这里就预先设置好

统一设置超参数

  • 放在一起,方便后续调试

# 导入Python常用包
import os
import numpy as np
import pandas as pd
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import Dataset

 

# 配置GPU
device = torch.device("cuda:1" if torch.cuda.is_available() else "cpu")

 

# 配置其他超参数
batch_size = 256 # 一个训练batch的大小
num_workers = 1 # 同时工作的cpu线程
lr = 1e-4 # 学习率
epochs = 20 # 训练epochs数

注意,在以下代码中,我们将不会使用GPU计算。

数据读入

数据读入会使用PyTorch的两个类:

Dataset

  • 定义数据的格式,区分samples和它们对应的labels

DataLoader

  • 将Dataset变成iterable,方便之后用iterative的方式读入不同批次的数据

首先,我们使用Dataset来构建子类,在这个子类中,我们需要定义三个函数:

__init__

  • 定义samples和与之对应的labels,同时向类中传入外部参数。

__len__

  • 返回数据集samples数

__getitem__

  • 通过index逐个读取samples集合中的元素,最终返回训练和验证所需数据(如果需要可以在这里对数据进行transformation操作)

现在我们来看实例。由于FashionMNIST数据集存储在csv文件中,我们需要先对其做一些transformation。

# 设置数据变换
from torchvision import transforms

image_size = 28
# 将一连串想要对数据进行的变换打包,以便在之后数据读取时直接使用
data_transform = transforms.Compose([
                                     transforms.ToPILImage(), # convert a tensor or ndarray to PIL image(python image library)
                                     transforms.Resize(image_size), # resize imput image into given size
                                     transforms.ToTensor() # convert a PIL image or ndarray into tensor
])

首先将这些csv中的表格数据转换为Python能识别的PILImage格式,再将它们的size改成我们需要的大小,最后将所有数据转变成模型能识别的tensor格式。

接下来我们就可以开始为这个数据集创造Dataset子类了

# 数据读取方法二: 读入csv格式的数据,自行构建Dataset类
class FMDataset(Dataset):
  # __init__的作用就是1.传入外部参数(transform) 2.定义数据中的samples,labels
  def __init__(self, df, transform=None):
    self.df = df # 数据集
    self.transform = transform # transformation
    self.image = df.iloc[:,1:].values.astype(np.uint8) # 定义数据集中哪些是training set
    self.label = df.iloc[:,0].values # 定义数据集中哪些是testing set
  
  #__len__记录并返回dataset中的samples数
  def __len__(self):
    return len(self.image)

  # __getitem__返回指定index的特定sample。在这里包括图像和他的label
  def __getitem__(self, idx):
    image = self.image[idx].reshape(28,28,1) # 将该sample保存在变量中并设置他的shape以便之后输入模型
    label = int(self.label[idx]) # 将该sample的label保存在变量中
    
    # 确定要不要对数据进行transform操作
    if self.transform is not None:
      image = self.transform(image)
    else:
      image = torch.tensor(image/255, dtype=torch.float) #如果不transform也得将数据转变成tensor的形式,这里/255是为了将数据的每个pixel大小控制在0-1之间,符合模型要求
    label = torch.tensor(label, dtype=torch.long)
    return image, label


# 导入数据
import pandas
import io

# 注意,这里使用的是colab,其他环境运行可能需要微调
train_df = pd.read_csv(io.BytesIO(uploaded['fashion-mnist_train.csv']))
test_df = pd.read_csv(io.BytesIO(uploaded['fashion-mnist_test.csv']))

train_data = FMDataset(train_df, data_transform)
test_data = FMDataset(test_df, data_transform)

在搭建好Dataset后,我们就可以使用DataLoader类来将Dataset变成iterable

# 构建DataLoader类,目的是为了之后训练和测试时加载数据。DataLoader是一个iterable!用next(iter())来返回下一个batch
# 属性介绍
# Dataset: 之前定义好的Dataset
# Batch_size:# sample to load in each batch
# shuffle:根据index load data时要不要打乱顺序使每次load的都不一样
# num_workers: load数据进程数,数越高,速度越快
# drop_last: 当load到最后一个batch,batch的数量不满足batch_size时,drop掉这个batch
train_loader = DataLoader(train_data, batch_size=batch_size, shuffle=True, num_workers=num_workers, drop_last=True)
test_loader = DataLoader(test_data, batch_size=batch_size, shuffle=False, num_workers=num_workers)

通过next(iter(train_loader))我们可以得到一个batch的数据。下面的代码以及可视化我们可以更直观地感受我们可以如何通过DataLoader获取数据。

# 可视化查看sample
import matplotlib.pyplot as plt
image, label = next(iter(train_loader)) # 这里输出的是train_loader中的一个batch。train_loader是一个iterable object,通过iter()得到iterator,用next()可以访问这个iterator的下一个元素
print(image.shape, label.shape)
plt.imshow(image[0][0], cmap='gray') # 展示这个batch中的第0张图。后面那个[0]怎么理解???

pytorch项目怎么跑?_第1张图片

模型构建

通过继承PyTorchnn模块中的Module类来定义我们想要的模型。 在构造模型时,我们一般对Module的两个函数进行重载:

__init__

  • 创建模型参数,以及定义前向计算

forward

模型初始化

损失函数与优化器

训练

评估

免费分享一些我整理的人工智能学习资料给大家,整理了很久,非常全面。包括一些AI常用框架实战视频、图像识别、OpenCV、NLQ、机器学习、pytorch、计算机视觉、深度学习与神经网络等视频、课件源码、国内外知名精华资源、AI热门论文、行业报告等。

为了更好的系统学习AI,推荐大家收藏一份。

下面是部分截图,文末附免费下载方式。

一、人工智能必读书籍

pytorch项目怎么跑?_第2张图片

二、人工智能免费视频课程和项目

pytorch项目怎么跑?_第3张图片

三、人工智能论文合集

pytorch项目怎么跑?_第4张图片

四、人工智能行业报告

pytorch项目怎么跑?_第5张图片

学好人工智能,要多看书,多动手,多实践,要想提高自己的水平,一定要学会沉下心来慢慢的系统学习,最终才能有所收获。

点击下方名片,扫码免费下载文中资料。

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