pytorch dataloader笔记

学习https://pytorch.org/tutorials/beginner/data_loading_tutorial.html
pytorch官方教程之二 dataloader的笔记


Dataset类

继承Dataset类,重写__len__与__getitem__方法
len :外部调用len(dataset)时,返回dataset的长度

show_landmarks(**sample):
解释一下这里的“**”是什么意思
首先,sample = face_dataset[i]
face_dataset[i]会调用face_dataset的__getitem__方法,返回sample
根据重写的__getitem__方法,返回的sample是一个dict

而show_landmarks()的参数应该是两个才对,def show_landmarks(image, landmarks):
这里直接传入一个dict,即需要对dict解包
解包
一般来说,用*对list解包,用**对dict解包,解完包后再传入函数

plt笔记

(1)plt.figure()建立画布
(2)当没有显示设备时,在开头写上plt.switch_backend(‘agg’)
(3)ax = plt.subplot(nrows,nclos,index)
建立子图
注意:子图index是从1开始
表示接下来的plt有几行几列,这是第index个子图
(4)plt.tight_layout()
自动调整子图参数,填充整个区域
(5)ax.axis(‘off’)取消坐标轴

计算图像均值与方差

如何随机选取n张图片?
=》只要找到所有图片的地址,shuffle,然后取前n个就好了

with open(train_txt_path, 'r') as f:
    lines = f.readlines()
    random.shuffle(lines) 


由于在训练时会对图像做处理,所以这里也要先做减均值之前的同样操作再算均值与方差(比如resize与归一化)
如何算均值与方差
这里作者的实现是把所有图片叠起来,然后遍历每个通道,用np.mean算均值

imgs = np.zeros([img_w, img_h, 3, 1])
***
img = img[:, :, :, np.newaxis]
imgs = np.concatenate((imgs, img), axis=3)
#把已有的图片和现在的图片叠起来,由于要初始化,只能拿0初始化,相当于多了一张全为0的图,不过总共2000张图的话应该影响不大
***
for i in range(3):
    pixels = imgs[:,:,i,:].ravel()  # 按通道拉成一行, ravel()相当于原来的引用,而flatten()重新开辟内存
    means.append(np.mean(pixels))
    stdevs.append(np.std(pixels))

模型搭建与初始化

模型定义
继承nn.Module类,在__init__中定义需要用到的组件,在forward()中搭积木,其他的函数用来实现各种组件
初始化
定义的类中,父类中定义好的方法:self.modules()返回一个迭代器,遍历可以依次返回模型的每一层

def modules(self):
	for name, module in self.named_modules():
	yield module

可以用

for m in self.modules():
	if isinstance(m, nn.Conv2d):

来判断每一层是不是某种层,从而对不同层采用不同的初始化方法

finetune

这里就要讲到python的几个基础函数了
map()
map(function, iterable, …)
将function函数应用到iterable对象的每个值,也就是说将iterable的每个值分别传入function,得到的返回值组成一个list(python3.是组成一个iterable,可以用list(iterable)把它变成list)
filter()
filter(function, iterable)
将iterable的每个值依次传入function,function返回True或False,把传入后返回True的值组成一个list(python3.为组成iterable)
id()
id([object])
返回对象的内存地址
可以与lambda,filter组合使用,返回内存地址有效的对象:

base_params = filter(lambda p: id(p) not in ignored_params, net.parameters())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值