本来是只用Tenorflow的,但是因为TF有些Numpy特性并不支持,比如对数组使用列表进行切片,所以只能转战Pytorch了(pytorch是支持的)。还好Pytorch比较容易上手,几乎完美复制了Numpy的特性(但还有一些特性不支持),怪不得热度上升得这么快。 1 模型定义 和TF很像,Pytorch也通过继承父类来搭建自定义模型,同样也是实现两个方法。在TF中是__init__()和call(),在Pytorch中则是__init__()和forward()。功能类似,都分别是初始化模型内部结构和进行推理。其它功能比如计算loss和训练函数,你也可以继承在里面,当然这是可选的 在PyTorch中构建模型的过程与TensorFlow有相似之处,但也有一些关键的差异。PyTorch以其灵活性和直观性著称,尤其是对于那些熟悉Numpy的开发者来说,它提供了更接近于Numpy的编程体验。以下是你需要了解的关于使用PyTorch搭建模型的详细步骤: 1. **模型定义**: - 在PyTorch中,模型通常是通过继承`nn.Module`类来创建的。这类似于TensorFlow中的定义图的方式,但在PyTorch中,模型的结构更加灵活。 - `__init__()`方法用于初始化模型的各个组件。在这个例子中,定义了几个顺序模块(Sequential)来代表不同的网络层。`nn.Sequential`是一个容器,可以包含多个神经网络层,如`nn.Flatten`, `nn.Linear`, `nn.ReLU`等。 - `forward()`方法则类似于TensorFlow中的`call()`方法,负责执行前向传播,即输入数据通过网络并得到输出。 2. **设备管理**: - PyTorch允许在CPU和GPU之间移动张量。在本例中,`torch.device('cuda')`被用来指定使用GPU。如果GPU可用,模型和数据会被自动转移到GPU上以利用其计算能力。若无GPU,模型将默认在CPU上运行。 3. **模型层的定义**: - 层的定义使用`nn.Module`的子类,如`nn.Sequential`,它允许你将多个层组合在一起。在`__init__`方法中,我们定义了四个顺序模块,每个模块包含了不同数量的线性层(`nn.Linear`)和激活函数(`nn.ReLU`)。 4. **模型优化器**: - PyTorch使用`optim`模块来定义优化器,如`optim.SGD`。优化器需要知道哪些参数需要更新,这通常通过`self.parameters()`来传递,它返回一个迭代器,遍历模型的所有参数。 5. **损失函数**: - 为了计算损失,可以自定义一个`get_loss`函数。在这个例子中,使用了交叉熵损失(Cross Entropy Loss),适用于多分类问题。`-true_labels * torch.log(predicts)`计算的是对数损失,然后通过`torch.mean(loss)`计算平均值。 6. **训练过程**: - 训练模型时,首先在`train`方法中计算预测输出(`predicts`)和损失(`loss`)。 - `self.opt.zero_grad()`将所有参数的梯度清零,准备进行反向传播。 - `loss.backward()`执行反向传播,计算梯度。 - `self.opt.step()`根据梯度更新模型的参数。 7. **模型总结**: - 使用`torchsummary`库的`summary`函数可以提供模型的概览,包括每一层的形状、参数数量等,这对于理解和调试模型非常有用。 在PyTorch中,模型的构建和训练是非常动态的,你可以随时修改模型结构、调整参数或优化器设置,这种灵活性使得PyTorch在研究和实验中特别受欢迎。同时,由于其Numpy般的API,对于熟悉数组操作的开发者来说,学习曲线相对较平缓。
- 粉丝: 3
- 资源: 931
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
评论0