Torch 基础
Troch 输入输出
创建一个 tensor 变量
1 | x = torch.tensor([1, 2, 3]) |
转换类型
1 | x = x.float() |
并使用 cuda() 函数将变量转移到 GPU 上。
1 | x = x.cuda() |
同样,我们可以使用 cpu() 函数将变量转移到 CPU 上。
1 | x = x.cpu() |
完整的代码如下:
1 | import torch |
输出结果如下:
1 | Before cuda |
构建网络结构
使用 torch.nn 构建网络结构。
1 | import torch.nn as nn |
使用类的形式构建网络结构。
1 | class myNet(nn.Module): |
上面两种方式都可以,但是第二种方式更加灵活,可以自定义网络结构。但是,它们都使用 CPU 计算,如果需要使用 GPU 计算,需要在构建网络结构的时候加上 .cuda()。
1 | class myNet(nn.Module): |
优化器与损失函数
使用 torch.optim 构建优化器。
这里使用了随机梯度下降法(SGD)。还有其他的优化器,如 Adam、RMSProp 等。参考:torch.optim
1 | import torch.optim as optim |
使用 torch.nn 构建损失函数。
1 | import torch.nn as nn |
保存与加载模型
保存模型
1 | # 这种方式只保存模型的参数 |
加载模型
1 | myNet.load_state_dict(torch.load('myNet.pth')) |
训练一个简单的网络学习 XOR
1 | import torch |
测试模型
1 | import torch |
这个例子中,我们使用了 torch.nn 构建了一个网络结构,使用了 torch.optim 构建了一个优化器,使用了 torch.nn 构建了一个损失函数,使用了 torch.save 保存了模型,使用了 torch.load 加载了模型。
并且使用的是 CPU 计算,如果需要使用 GPU 计算,需要在构建网络结构的时候加上 .cuda()。
最后 print 时,将结果cpu化,即 print(net(x).cpu())。这样才能在 CPU 上打印出结果。
参考
PyTorch官方文档
PyTorch中文文档
⟪Python 神经网络入门与实战⟫ ———— 王凯编著,北京大学出版社,2020年11月第1版