神经网络数据集基本设定与迁移学习

dataset&dataloader

对于model.fit()中使用的数据集的话,继承Dataset类

其中必要的是init 与 getitem。

init主要是针对创建数据集所需输入的参数和一些类内参数的定义。

getitem主要目的是返回img与label,当然也可以定义其他的自定义函数在类中。

通常也会有__len__之类这就代表,输入len(dataset_name)会给与设定的反馈。

Dataloader设置:

Collate_fn:

相当于是否要对dataloader输出的batch进行自己想要的处理。

如果默认就以组的形式输出

就假设batch为8 默认输出一个列表

你可以在collatefn上设置比如输出一个元祖或者直接合并等操作

迁移学习

迁移学习是在Backbone中导入已训练好的权重使网络更好收敛。

最基本操作如下图。

其中的条件有:

  1. 首先得到权重文件

  1. 已知该权重文件对应的网络机构,必须一一对应才能导入。

而后通过load操作得到了一个参数字典,包含各层的所有参数。

之后通过load_state_dict方法将权重导入网络中。

因为参数字典其并非以层作为最小单元,故通常操作是先导入权重,而后对网络进行提取,提取需要的部分。

通过net.children()方法可以分割网络。其结果如下所示:

可看到虽然同为resnet,可官方实现是将各个重复Block层都以Sequential来包含划分为一层,如果不这样实现则导入不了参数。

如果我只想要获得07的输出,之后都不需要。即提取00-07的网络。可如下所示,并且调整了细部的参数。

的*list其实就是将list中所有内容列出,这样将得到了以Sequential为主体的Backbone,如需要调整与所导入参数无关的值,可如上所示。上方代码即首先获取Backbone最后一层(一个Sequential)的第一层(一个Basic block),而后将这个Block中卷积层与下采样层的步距进行调整。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值