Colab使用
Colab工作于Google Drive,创建完成colab notebook后可以根据修改-笔记本设置-硬件加速来选择GPU加速。
在shell指令前添加!就可以在Ipython中运行任何命令行指令。
可以把colab挂载到google drive从而就可以从云端硬盘中读取文件加载到Colab运行,但是每一次新建笔记本后都要配置挂载。
1 | from google.colab import drive |
Python OS 文件/目录方法
读取某一个路径下的文件夹目录image_dir = sorted(os.listdir(path)) 。
文件夹中的文件数目用(len(image_dir)表示。
遍历该文件夹下的每一个文件for i, file in enumerate(image_dir): img = cv2.imread(os.path.join(path, file))
合并路径os.path.join
定义数据预处理函数
数据预处理分训练集和测试集。使用包import torchvision.transforms as transforms。
数据增强是为了防止过拟合的现象,用于数据较少的训练集。通常transforms.Compose将transforms组合在一起构成多次图形变化。
基本步骤
- 将Tensor类转换为PILImage类
transforms.ToPILImage(), - 开始多个图片的翻转、旋转等操作。此步骤对训练集不需要
- 将PILImage类转换回Tensor类
transforms.ToTensor()。
自定义数据集
先用重写Dataset类对数据封装,重写初始化、长度和索引的函数,结合数据预处理的transform。再读入数据,用DataLoader类。
Dataset
一个自定义Datasets的基本框架,初始化放在__init__()中,其中__getitem__()和__len__()两个方法是必须重写的。
基本结构如下
1 | class CustomDataset(data.Dataset):#需要继承data.Dataset |
DataLoader
实现分批次读取数据、随机读取数据、并行加载数据。
常用操作有:batch_size(每个batch的大小), shuffle(是否进行shuffle操作), num_workers(加载数据的时候使用几个子进程)。
Dataloader这个类并不需要我们自己设计代码,我们只需要利用DataLoader类读取我们设计好的Dataset子类即可:
1 | loader = DataLoader(train_dataset, batch_size=16, num_workers=4, shuffle=True) |
自定义神经网络
Torch.nn是专门为神经网络设计的模块化接口,需要重新实现构造函数__init__构造函数和forward这两个方法。
自定义神经网络的模版
1 | class Classifier(nn.Module): # 自定义神经网络需要继承nn.Module类 |
技巧
一般把网络中具有可学习参数的层(如全连接层、卷积层等)放在构造函数init()中,当然也可以把不具有参数的层也放在里面。
一般把不具有可学习参数的层(如ReLU、dropout、BatchNormanation层)可放在构造函数中,也可不放在构造函数中,如果不放在构造函数init里面,则在forward方法里面可以使用nn.functional来代替。
forward方法是必须要重写的,它是实现模型的功能,实现各个层之间的连接关系的核心。
训练模型
定义参数如模型、损失函数、梯度下降的方法、epoch的次数。
1 | model = Classifier().cuda() |
for循环每一个epoch,记录每一个epoch的时间,损失,正确率等都要清零。
训练每一笔data的for循环之前一定要开启model.train() 保证自动backpropagation且参数更新。
1 | for epoch in range(num_epoch): |
测试模型
测试每一笔validation set或者testing set的data之前一定要开启model.eval() 保证不会自动backpropagation参数更新。
1 | for epoch in range(num_epoch): |
参考
- 本文标题:MLHW3-tips
- 本文作者:徐徐
- 创建时间:2020-11-11 11:07:25
- 本文链接:https://machacroissant.github.io/2020/11/11/MLHW3-tips/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!