猛猛玩了一天丝之歌, 好玩确实是好玩, 难也确实是难, 玩了几个小时心力交瘁, 感觉路边随便一个小怪都能一下打我两滴血, 一怒之下做了张图.

昨天晚上发生了一件很扯淡的事, 但我在抢购丝之歌没来得及写, 今天太累了不想写, 有空再说吧.

GitHub链接

低阶 API, 中阶 API, 高阶 API, 登神长阶 API.

低阶 API

线性回归模型

生成随机测试数据.

n = 400
X = 10*torch.rand([n,2])-5.0 # torch.rand是均匀分布
w0 = torch.tensor([[2.0],[-3.0]])
b0 = torch.tensor([[10.0]])
Y = X@w0 + b0 + torch.normal(0.0,2.0,size = [n,1]) # @表示矩阵乘法,增加正态扰动
阅读全文 »

GitHub链接

Pytorch 的动态计算图.

动态计算图

Pytorch 的计算图由节点和边组成, 节点表示张量或者 Function, 边表示张量和 Function 之间的依赖关系.

Pytorch 的计算图是动态图:

  • 计算图的正向传播是立即执行的, 无需等待完整的计算图创建完毕, 每条语句都会在计算图中动态添加节点和边, 并立即执行正向传播得到计算结果.
  • 计算图在反向传播后立即销毁. 如果在程序中使用了 backward 方法执行了反向传播, 或者利用torch.autograd.grad方法计算了梯度, 那么创建的计算图会被立即销毁, 下次调用需要重新创建.
阅读全文 »

GitHub链接

自动微分机制.

神经网络通常依赖反向传播求梯度来更新网络参数, 求梯度过程通常复杂且易出错, 而深度学习框架可以帮我们自动求梯度.

Pytorch 一般通过反向传播方法求梯度, 该方法求得的梯度存在对应自变量张量的 grad 属性下, 也可以调用torch.autograd.grad函数求梯度.

阅读全文 »

终于拿到了心心念念的 Switch2, 也玩上了心心念念的动森.

下一步准备蹲个便宜点的旷野之息卡带, 主机游戏是真的贵啊. 动森想去别人的岛都得开个 VIP, 唉日本人也太坏了.

其实我有点想在这写点类似开荒日志之类的东西, 想想还是算了, 太蠢了.

GitHub链接

张量的基本概念.

数据类型

张量的数据类型 (dtype) 基本和numpy.array一致, 但不支持 str 类型. 包括:

torch.float64(torch.double),
torch.float32(torch.float),
torch.float16,
torch.int64(torch.long),
torch.int32(torch.int),
torch.int16,
torch.int8,
torch.uint8,
torch.bool

一般使用torch.float32类型.

阅读全文 »

GitHub链接

时间序列数据建模.

准备数据

通过继承 torch.utils.data.Dataset 实现自定义时间序列数据集.

torch.utils.data.Dataset 是一个抽象类, 加载自定义数据只需要继承该类并覆写__len__方法返回数据集大小和__getitem__方法返回第 i 个样本即可.

阅读全文 »

GitHub链接

文本数据建模.

配环境配了一上午, gensim 需要scipy<1.14.0,>=1.7.0, 没有对应的 wheel, pip 决定下载源码自己编译, 然后报了个网上搜不到的罕见错误, 升级了两遍我的 MinGW, 从网上下了个 patch.exe, 装了个 MSYS2, 试图装了 pkg-config 和 openblas, 还把之前卸掉的 visual studio 装了回来, 最后还是没搞好.

然后发现是 python 版本不兼容导致没有 wheel, 换到 python3.10 马上就好了. 吃大份去吧.

阅读全文 »

GitHub链接

图片数据建模.

准备数据

cifar2 数据集包含 5000 张飞机 airplane 照片和 5000 张机动车 automobile 照片, 任务目标是训练一个模型区分 airplane 和 automobile 两种图片.

在 Pytorch 中构建图片数据管道通常有两种方法:

  • 使用 torchvision 中的 datasets.ImageFolder 读取图片, 然后用 DataLoader 并行加载
  • 通过继承 torch.utils.data.Dataset 实现用户自定义读取逻辑, 然后用 DataLoader 并行加载

本文介绍第一种方法.

阅读全文 »
0%