文章目录
Deep Learning
Basic
Metric
Accuracy 和 Precision
Ref: https://www.youtube.com/watch?v=hRAFPdDppzs
Ref: https://blog.csdn.net/hlzgood/article/details/110916942
accuracy 是准确率。是指 How close you can get to the correct result.测量值(或预测值)和实际值有多相近。通过计算测量值和实际值的误差函数,如计算均方根误差,均方根误差越接近 0,说明准度越高。换言之–准不准
precision 是精确度。是指 How consistent you can get that result.多个测量值(或预测值)互相之间有多相近。在所有预测出来的结果中,预测结果为正类的比例。通过计算测量值的离散程度,如计算测量值的标准差,标准差越小,说明测量值越集中,精度也就越高。换言之–稳不稳
batchsize
Ref: https://www.zhihu.com/question/32673260
当batch size比较小的情况下收敛变慢的主要原因是样本之间的局部variance增大,那么在保证variance reduction的情况下,其收敛率大大加快,理论上等价于一定范围内的更大batch size(一般为2个order以内),题主有没有考虑这种情况?另外batch size增大的情况下达到相同的精度所需epoch更多,是指相同学习率?除去内存开销以及分布式学习的开销以外,从最优化角度是可以在不同学习率下处理epoch找到等价解的。
切 patch
问下医学图像切patch的大致策略是什么?
Ref:https://www.zhihu.com/question/436498354
也就是用一个滑动窗口将二维或是三维的图像切分成许多大小一致的小块作为训练数据。这样一来图像大小得到了统一,并且小的patch相当于对图像局部的放大,降低显存并且大大丰富了数据集。
归纳偏置
我的理解:就像加入了先验,所以 CNN 的归纳偏置会更高,而 Transformer 低一些,那么对于场景变化适应性会更强,相当于对模型约束减小了。
Ref: https://blog.csdn.net/qq_39478403/article/details/121107057
在机器学习中,很多学习算法经常会对学习的问题做一些关于目标函数的必要假设,称为 归纳偏置 (Inductive Bias)。
归纳 (Induction) 是自然科学中常用的两大方法之一 (归纳与演绎,Induction & Deduction),指从一些例子中寻找共性、泛化,形成一个较通用的规则的过程。偏置 (Bias) 则是指对模型的偏好。
- 通俗理解:归纳偏置可以理解为,从现实生活中观察到的现象中归纳出一定的规则 (heuristics),然后对模型做一定的约束,从而可以起到 “模型选择” 的作用,类似贝叶斯学习中的 “先验”。
- 西瓜书解释:机器学习算法在学习过程中对某种类型假设的偏好,称为归纳偏好,简称偏好。归纳偏好可以看作学习算法自身在一个庞大的假设空间中对假设进行选择的启发式或 “价值观”。
- 维基百科解释:如果学习器需要去预测 “其未遇到过的输入” 的结果时,则需要一些假设来帮助它做出选择。
- 广义解释:归纳偏置会促使学习算法优先考虑具有某些属性的解。
CNN、RNN 和 attention
- CNN 的 Inductive Bias 是 局部性 (Locality) 和 空间不变性 (Spatial Invariance) / 平移等效性 (Translation Equivariance),即空间位置上的元素 (Grid Elements) 的联系/相关性近大远小,以及空间 平移的不变性 (Kernel 权重共享) (但也有证伪的 证伪:CNN中的图片平移不变性 – 知乎,CNN为什么丢失了平移不变性?怎么保持? – 知乎)。
- RNN 的 Inductive Bias 是 序列性 (Sequentiality) 和 时间不变性 (Time Invariance),即序列顺序上的时间步 (Timesteps) 有联系,以及时间变换的不变性 (RNN 权重共享)。
- 注意力机制,也是基于从人的直觉、生活经验归纳得到的规则。
pytorch 模型 cpu 和 gpu load–相互转换
load 模型的时候,会有将模型加载到 cpu 还是 gpu 内存的区别。
会遇到这种问题。
RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False. If you are running on a CPU-only machine, please use torch.load with map_location='cpu' to map your storages to the CPU.
- cpu -> cpu 或 gpu -> gpu:
model.load_state_dict(torch.load('model.pth'))
- cpu -> gpu
torch.load('model.pth', map_location= lambda storage, loc: storage.cuda(0)).
- gpu 0 -> gpu 1
torch.load('model.pth', map_location={'cuda:0' : 'cuda:1'})
- gpu -> cpu
torch.load('model.pth', map_location= lambda storage, loc: storage)