Pytorch是一个Python机器学习框架,优点是可以使用GPU进行高维的矩阵运算,而且方便梯度计算。
对于数据的加载(Load),有Dataset和DataLoader两个库可以调用,参数shuffle用于设置是否打乱数据。
Tensor是Pytorch的数据组织格式,dim(维)和numpy中的axis含义相似。其创建可以分为两类方式:
(1)基于数据创建(list或ndarray):
x = torch.tensor([[1,-1],[1,-1]])
x = torch.from_numpy(np.array([[1,-1],[1,-1]]))
(2)0矩阵或单位阵,括号内定义了shape
x = torch.zeros([2,2])
x = torch.ones([1,2,5])
tensor有加减乘等运算,也有求和sum()和求平均mean()等函数,另外还有transpose、squeeze、unsqueeze、cat等对维度操作的函数。
可以对tensor x进行操作,使之在合适的设备上进行计算:
x = x.to('cpu')
x = x.to('cuda')
如何查看自己的电脑有没有gpu?使用下面一句话:
torch.cuda.is_available()
有时显卡可能有多个,需要代码具体化是要用哪个gpu。下面的例子演示了梯度的计算。
接下来介绍如何定义神经网络。
torch.nn.Linear
函数是 PyTorch 的常用模块,用于实现一个全连接线性层。
一个简单的example方便理解。
PyTorch 中,torch.nn.Sequential
是一个类,用于构建神经网络模型的容器。它允许用户按顺序地将多个网络层组合成一个整体的网络模型,下面是一个例子。
Pytorch中定义了常见的Loss Function可供调用:
torch.optim.SGD
是 PyTorch 中的一个优化器,用于实现随机梯度下降(Stochastic Gradient Descent, SGD)优化算法,它在每次训练中,都要完成梯度清零、反向传播以及更新参数的步骤,写一个简单的例子:
常规的网络训练流程:
在进行validation和testing的时候,要把梯度关掉,目的是为了避免验证集或测试集干扰模型参数。在训练过程中,要注意及时保存模型。