赞
踩
早年阅读pytorch代码,或者自己写pytorch代码的时候,有不少疑惑。
transforms.Compose函数就是将transforms组合在一起;而每一个transforms都有自己的功能。有点流式编程的意思。
dataloader加载数据的时候,batch size常为64。所返回的dataloader可以看成一个list。
数据通常是(data, label)的格式。
实际操作的时候,通常从训练集中抽0.1做验证集。
互相转化时,可能会共享内存。
numpy更为强大,将tensor转为numpy处理后再转回tensor是常见的做法。
作用就是resize/reshape。行优先。如果想列优先考虑permute()。参数为-1时表示自动推断。
即数据补齐,维数不够的补1,维长不够的延长。两个尺寸不同的tensor运算时会自动broadcast。
epoch,一个epoch要前向+后向完整数据。
epoch内分为多个batch,需要iterations轮循环才能完成一个epoch。
每个batch都会更新一次权重参数。
epoch增加,是欠拟合往过拟合的过程。类别越多,需要的epoch越多。
归一化和标准化是有区别的,代码中的normalize应该翻译成标准化。
归一化让数据在[0,1]:
标准化让数据均值为0,方差为1:
前者的作用是,不同的特征在量纲上有区别,比如年收入是比较大的数字,而家中子女数通常是个位数。如果要让他们地位对等,就需要归一化。但受异常点影响,比如有一个异常大的值,就会导致其它值都挤在一个小区间内。
后者的作用,我认为是让数据集中到0附近。实际使用一般用标准化。
数学中文名 | 模块/函数名 | 场合 |
---|---|---|
均方误差损失 | torch.nn.MSELoss | 逻辑回归 |
交叉熵损失 | torch.nn.BCELoss | 二分类 |
对数交叉熵损失 | torch.nn.BECWithLogitsLoss | 二分类 |
负对数似然函数 | torch.nn.NLLLoss | 多分类 |
交叉熵损失 | torch.nn.CrossEntroyLoss | 多分类 |
定义__call__方法的类可以当作函数调用。nn.Module的call方法中,调用了forward方法。
所以model(data)的意思,其实就是调用了前向传播forward()。
最好了解一下前向传播和反向传播的原理。
通常,我们的参数都是一些常见的结构(卷积、全连接等)里面的计算参数。而当我们的网络有一些其他的设计时,会需要一些额外的参数,同样跟着整个网络的训练进行学习更新,最后得到最优的值,经典的例子有注意力机制中的权重参数、Vision Transformer中的class token和positional embedding等。
torch.nn.Parameter()就可以很好地适应这种应用场景。
可以把这个函数理解为类型转换函数,将一个不可训练的类型Tensor转换成可以训练的类型Parameter并将这个parameter绑定到这个module里面(net.parameter()中就有这个绑定的parameter,所以在参数优化的时候就可以进行优化了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。