torchnet 是用于 torch 的代码复用和模块化编程的框架:
主要包含4个部分:
- Dataset:各种不同方式处理数据。
- Engine:各种机器学习算法
- Meter:性能度量指标。
L o g : Log: Log:
模块详细分为如下部分: - Datasets:
- BatchDataset
- ListDataset
- ResampleDataset
- ShuffleDataset
- TensorDataset [new]
- TransformDataset
- Meters:
- APMeter
- mAPMeter
- AverageValueMeter
- AUCMeter
- ClassErrorMeter
- ConfusionMeter
- MovingAverageValueMeter
- MSEMeter
- TimeMeter
- Engines
- Engine
- Logger
- Logger
- VisdomLogger
- MeterLogger [new, easy to plot multi-meter via Visdom]
主要用于可视化、数据存储和日志管理。
原本是基于lua-torch的一个库,迁移到python中来,变成pytorch中的一部分。
Dataset部分
抽象类classtorchnet.dataset.dataset.Dataset
传进来的参数是一个可迭代对象即可。
产生 B a t c h Batch Batch形式的数据:
- torchnet.dataset.BatchDataset(dataset, batchsize, perm=<function BatchDataset.>, merge=None, policy=‘include-last’, filter=<function BatchDataset.>)
Parameters:
- **dataset (Dataset): 数据集,这个数据集中的每个元素必须是一个dict,(应该用于multi-task,每个样本由多分类,这时候,存储为item = {‘data’:data , ‘class’:class}会比较方便。
- batchsize (int) : batchsize
- perm (function, optional):洗牌函数(数据随机打乱)
- merge (function, optional) :控制产生 batch 的行为。 在transform.makebatch源码中使用这个函数. Default is None.它的作用是合并数据,直接从 Dataset 得到的一个 batch 是一个 dict 的列表,makebatch 默认行为是将 dict 中的 key 合并的数据合并,合并后使用 merge 进一步处理,默认行为(merge = None)就是将这个dict中的数据按照第一维度拼成一个Tensor(如果可以拼接的话)返回。应该是和torch.utils.data.dataloader中的collate_fn 如果需要pin_memory的话,需要把数据按锁页方式存储
- policy (str, optional) :处理最后一个batch的策略
include-last 包**含最后一个,无论剩几个****
skip-last **最后一个小于 batchsize 的时候丢掉**
divisible-only 数据不能整除batchsize时报错
filter (function, optional) :在产生 batch 之前过滤。 filter(sample) 返回 True 则包含这个数据,False 表示过滤掉,默认 True
拼接 datasets:
torchnet**.dataset.ConcatDataset(datasets)**
Parameters::
datasets:(iterable)一个dataset列表。
产生List形式数据
torchnet.dataset.ListDataset(elem_list, load=<function ListDataset.<lambda>>, path=None)
参数解析
返回一个采样数据集
torchnet.dataset.ResampleDataset(**dataset, sampler=<function ResampleDataset.>, size=None)
也是采样,不过是均匀分布
torchnet.dataset.ShuffleDataset(dataset, size=None, replacement=False)
数据集分割
torchnet.dataset.SplitDataset(dataset, partitions, initial_partition=None)
方便把一个**已经存在的数据变成标准的结构(**在套上一层)
torchnet.dataset.TensorDataset(data)
得到一个变换数据集
torchnet.dataset.TransformDataset(dataset, transforms)
- dataset: (Dataset)
- transforms (function/dict): 一个函数(可以是compose的),或者dict(值是函数),用于样本的变换。
torchnet.transform部分
主要用的是torchnet.transform.compose函数,将transform拼接在一起。
它接收一个transform列表,每个transform是一个函数,接收上一次的输出作为输入。和TransformDataset搭配使用。
- 例如 TransformDataset(ListDataset(class_names), compose([transforms1,transform2]))
TransformDataset
总结
慢慢的会用的时候,将各种的torchnet库都给其搞明白,全部都将其搞彻底都行啦的样子与打算。全部都将其搞彻底都行啦的回事与打算。自己研究透彻,研究彻底都行啦的样子与打算。