试图从code snippets 和 pytorch 源代码 去理解深度学习概念与技巧
视频笔记是按时间循序更新的,越往下越新
大部分视频争取控制在5-8分钟以内,极少数时间在10分钟以上。
pytorch 官方tutorials
tutorials 01-03
- nn.Module, nn.Functional, forward, num_flat_features, inherit, overwrite
- net.parameters, loss.grad_fn.next_functions0, net.zero_grad
- criterion = nn.MSELoss(), loss = criterion(output, target)
- optimizer = optim.SGD(net.parameters(), lr=0.01), optimizer.zero_grad, optimizer.step
net.zero_grad() == 效用== optimizer.zero_grad()
- net.parameters() == 效用== optimizer.param_groups0
net 与optimizer调取parameters方式不同
- net.parameters() 生成 generator; 用for in loop调取所有参数
- optimizer.param_groups 生成list, 然后optimizer.param_groups[0]是dict, 然后optimizer.param_groups0调取所有参数
- lst = list(net.parameters()) 将generator转化为list, 但必须赋值
- p.data.add_(-group[‘lr’], d_p)
如何调用net.conv1内部的method, attributes
- net.conv1.weight, net.conv2.bias.grad, net.fc1.zero_grad
- optimizer.param_groups[0].keys()
pytorch如何借用THNN计算MSELoss, 核实是否是THNN在工作
- nn.MSELoss, nn._Loss, nn.module.Module, THNN,
- pytorch/torch/lib/THNN/generic/MSECriterion.c, THNN_(MSECriterion_updateOutput)
- super(Net, self).__init__(), 在运行super class init中,同时继承了所有的methods
- Net overwrite init(), forward() write a new func num_flat_features() for itself
- self._modules.keys(), self.dict.keys()
- lst = list(self._buffers.keys()), sorted(keys)
- nn.Conv2d -> nn._ConvND -> nn.Module
- nn._ConvND: init, reset_parameters
- ConvNd = torch.C.functions.ConvNd
self.conv1(x) 先运行getattr再运行call
如何安装gdb从而能一路debug from python to C/C++
- 安装求助
- C/C++ gdb 问题基本解决 部分解决
- gdb python 有待解决 no module libpython 似乎解决了
- 剩下can’t read symbols 的warning 没有真正解决
- MSELoss -> _Loss -> Module
- 包含init, forward, pre_forward_hooks, forward_hooks, backward_hooks
- functions.thnn.MSELoss.apply(input, target, size_average) 调用torch.C 中的用于计算mseloss函数
- ctx == _ContextMethodMixin, 至于是如何调用的,不清楚过程
- 尝试理解这种方法的广泛性
- init: 将params, defaults(包含超参数dict)重新打包到self.param_groups里面
- 方便zero_grad和step 使用
全流程梳理pytorch普通建模 代码
- part1 part2 part3 part4 part5 part6 part7 part8 part9
- backend1: 从pytorch ConvNd 到Torch.csrc.autograd.functions….ConvForward
- 从pytorch.relu通过backend到torch.Threshold
- 从pytorch.maxpool2d通过backend到torch.C.spatialDilatedMaxPooling
- 从pytorch.MSELoss通过backend到Torch.mseloss
全流程梳理pytorch 多分类建模 代码
二元分类问题的Loss设定的注意事项:代码3
- 如果用BCEWithLogitsLoss
- features, targets的type 要统一为torch.FloatTensor
- targets的size要规范为(-1,1)
- 如果用CrossEntryLoss
- targets的type一定要是torch.LongTensor
- 摸索过程:真实发现错误和寻找解决方案的过程
- part1, part2, part3
探索keras内部 冗长解读
- 查看keras内部主要的modules 0:00-7:50
- keras.models.Sequential内部结构 –13:38
- keras.legacy.interfaces…wrapper 让keras1与keras2互通 — 15:36
- keras.models.add –22.10
为什么pytorch对beginner更友好 解读
看看debug方式阅读keras代码是不是比较困难
用pytorch构建自己的数据class 代码文档 part1, part2, part3, part4, 总结版
存储自己的数据,transform,batch,shuffle
transfer_learning_tutorial
ImageFolder如何将图片folder转化成模型数据格式
Deep Learning for NLP with Pytorch
如何设置random seed 方便数据repetition?但是用在哪里呢?
如何用list 构建torch.Tensor (Vector, Matrix, 3D-tensor)? 如何构建random normal 2D 数据?如何连接2-3个2D tensor(row-bind, col-bind)? 如何在pytorch做reshape?
如何将list变成可以做gradient的Variable?如何从Variable中提取Tensor, gradient, 以及grad_fn? 如何求运算多次之后的值y相对于x(可求导的Variable)的导数?
Variable如何保持原来的记忆?
训练模型识别西班牙和英文句子,内在参数能识别单词是英文还是西文?
# 49 如何构建一个Linear object, lin? 如何让input data 的shape与lin保持协调,然后用lin调用input data完成计算?
#98 F.relu是如何使用数据来完成计算的?F.softmax, F.log_softmax 内在的计算流程是怎样的?
#238 如何准备英西翻译数据?list of tuples(list, str)
#248 如何将所有句子中的独特(不重复)单词附上序号,存在dict里?
#259 回顾一下如何定义自己的模型?overwrite Module class; 为什么特征数 = vocab_size, 输出值数 = num_labels?
#283 如何写一个函数来计数每一个独特字(在一句话中的频率),返回1-row tensor (1, vocab_length)?
#290 如何用函数将label转化为idx,返回long tensor?
#302 如何打印看看每一层layer的weight, bias?
# 343 模型的唯一层的参数(2,num_vocab) 是对每个词的学习,训练来认知是(spanish, english)?
# 345 如何构建一个negative log loss object?
# 380 creo 之前的tensor (0.14, 0.13), 之后的tensor(0.53, -0.25)