DataLoader
1.数据预处理
在将数据提供给模型之前,DataLoader需要对数据进行预处理。预处理可以包括数据增强、归一化、裁剪、缩放等操作。这些操作可以提高模型的性能和准确度。在处理点云数据时,可以通过最远点下采样到固定的点数。
2.读取标签文件
我 1 2 3
爱 45 6
python
matrix_file = open("D:\py_code\w123.txt", 'r', encoding='utf-8') # 打开文件
lines = matrix_file.readlines() # 读取文件中的所有行
print(lines)
print(len(lines))
结果:
['我 1 2 3\n', '爱 45 6\n', 'python']
3
3.数据集的划分
生成数据集的训练集、测试集和全部数据集的文件列表并保存为txt文件,训练集的比例可以自行设置
4.加载数据类
MyDataset(Dataset)类包含__init__(),__len__(),__getitem__()等函数
Dataset:父类,所有开发人员训练、测试使用的所有数据集的一个模板或者抽象,该类是一个抽象类,所有的数据集想要在数据与标签之间建立映射,都需要继承这个类,所有的子类都需要重写__getitem__方法,该方法根据索引值获取每一个数据并且获取其对应的Label,子类也可以重写__len__方法,返回数据集的size大小
MyDataset:子类,是一个具体的数据集,继承父类的所有方法和属性
如何重写Dataset?
【深度学习】PyTorch Dataset类的使用与实例分析 - 知乎 (zhihu.com)
在明确如何组装路径、获取路径中的文件名以及获取具体数据对象后,重写方法
__init()存储数据目录下的所有文件名
__len__获取数据集的长度
__getitem__()返回的是数据项并非整个数据集,可以让索引与数据集中的具体数据对应起来
from torch.utils.data import Dataset
class MyDataset(Dataset):
def __init__(self):#一个函数中的变量是不能拿到另外一个函数中使用的,self可以当做类中的全局变量
print("1")
def __len__(self):
print("2")
def __getitem__(self,idx):
print("3")
dataset = MyDataset()#会自动调用__init__方法
结果:
1
5.创建数据加载器
data = MyDataset()#实例化
DataLoader = torch.utils.data.DataLoader(data, batch_size=64, shuffle=True)
将样本按照batch_size(每个批次包含的样本数量)进行分批,并在每个epoch(所有样本被遍历一遍)开始时随机打乱数据
Train
def parse_args()
参数包含batch_size/model/epoch/learning_rate/gpu/optimizier/data_path/result_savepath/check_savepath/log_dir/decay_rate等
def valid(model,loader)
在验证集上测试网络模型的性能,返回精度
3.def main(args)
设置在哪个gpu上跑
创建目录
设置日志文件,记录训练过程中的一些信息
加载训练和测试数据
加载模型
修改学习率(6条消息) 【深度学习】学习率 (learning rate)_深度学习的学习速率_JNingWei的博客-优快云博客
训练:每一个epoch训练一次
使用验证集验证:验证集专门用来看看每经过1个epoch的训练之后网络性能如何,可以用测试集代替验证集(7条消息) 测试集可用作验证集;验证集不能来自训练集!(交叉验证,留一法)_验证集可以当测试集吗_doubleslow;的博客-优快云博客
Test
def parse_args()
参数包含batch_size/model/gpu/data_path/save_path/pth_path等
2.def main(args)
创建数据保存目录
加载测试数据
加载模型:训练得到的最优模型