pytorch,未完成
pytorch
pytorch官方文档
squeeze和unsqueeze函数
momentum动量
contiguous
view
各种可能会用到的pytorch包
1 | import torch |
import torchvision.transforms as t1
from torchvision import transforms as t2
等价效果,区别主要不在结果,而在加载路径和作用域。
入口不同
import torchvision.transforms as transforms
→ 直接定位到 torchvision.transforms 这个子模块。
from torchvision import transforms
→ 先加载顶层包 torchvision,然后通过它的属性找到 transforms 子模块。
from torchvision import transforms 能工作,是因为 torchvision/init.py 文件里写了类似:
from torchvision import transforms
或者做了 all 暴露。
如果某个包没有在 init.py 里显式暴露子模块,用这种写法就会失败,而 import xxx.yyy 不会。
可读性风格差异
import torchvision.transforms as transforms 明确告诉读者:”我只关心 transforms 子模块”。
from torchvision import transforms 看起来像是”我先拿整个 torchvision,再取里面的 transforms”。device = “cuda:0” if torch.cuda.is_available() else “cpu” device = torch.device(“cuda:0” if torch.cuda.is_available() else “cpu”)
两种写法表面一样,但其实得到的对象类型不一样。
第一种device是字符串 (str)。这种写法是合法的,因为大多数 PyTorch API(如 .to(device)、.to(“cuda:0”))内部会自动识别字符串并转成torch.device,但其本质上不是torch.device对象。
第二种device则是torch.device对象,因为更加规范,所以PyTorch 内部所有地方都保证能识别。
多数情况下都能使用,但第二种更规范更推荐使用。不指定dtype默认使用:torch.get_default_dtype(),一般是 torch.float32
Tesorboard
TensorBoard 可以实时绘制训练损失、验证损失、准确率等多种曲线
计算图:TensorBoard 可以显示模型的计算图(graph),帮助你理解模型的架构和各层之间的关系。
层级结构:不仅可以看到层次结构,还能查看每一层的维度,帮助调试和优化模型。
TensorBoard 可以展示各层的权重、偏置等参数的分布,以及在训练过程中的变化,这有助于分析模型的训练状态。
TensorBoard 支持图像、音频和文本数据的可视化,可以直观展示训练过程中处理的数据样本。
为什么不用 plt 或者 ax2:
虽然 matplotlib(plt 或 ax2)也能绘制图表,但它的功能较为基础,无法直接支持 TensorFlow 的训练过程和模型结构的实时跟踪。TensorBoard 的优势在于它是专为深度学习训练过程设计的工具,能处理大量实时更新的数据,并提供对模型结构、参数和训练过程的深度分析。而 matplotlib 通常用于静态的图表绘制,不适合处理训练过程中的动态更新数据、模型结构和多实验对比。
torch.optim 是一个实现了各种优化算法的包。
使用 torch.optim必须构造一个优化器对象,该对象将保存当前状态并根据计算出的梯度更新参数。构造一个 Optimizer,必须为其提供一个可迭代对象,该对象包含要优化的参数(都应该是 Parameter 类型)或命名参数((str, Parameter) 元组)。然后可以指定优化器特定的选项,例如学习率、权重衰减等。
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9) SGD带动量
所有优化器都实现了一个 step() 方法,该方法用于更新参数。
optimizer.step()是大多数优化器支持的简化版本。该函数可以在使用例如 backward() 计算梯度后调用。
torch.nn(nn)是专门为神经网络设计的模块化接口
class torch.nn.Module(*args, **kwargs),所有神经网络模块的基类。
1 | import torch.nn as nn |
transforms.ToTensor()
将PIL Image或numpy.ndarray转换成张量
