自己找的學習資料

Step-1 能够成功运⾏其他⼈的⽹络模型,并对⾃⼰的图⽚进⾏测试

理解Pytorch环境配置, condas环境配置, 并成功安装pytorch, 理解dataset_loader代码的基础逻辑

參考資料

選 conda 還是 miniconda ?

Miniconda
Miniconda is a minimal installer provided by Anaconda. Use this installer if you want to install most packages yourself.

Anaconda Distribution
Anaconda Distribution is a full featured installer that comes with a suite of packages for data science, as well as Anaconda Navigator, a GUI application for working with conda environments.

我個人比較喜歡按需安裝庫, 所以還是嘗試使用安裝miniconda.

安裝 miniconda

直接來到官網找到最新的安裝包就行.

似乎沒有什麽特別需要注意的, 直接一路next都沒什麽問題.

創建⼀個虛擬環境

通過 conda --version 來驗證 conda已經正確安裝:

1
2
(base) C:\Users\jerry>conda --version
conda 23.11.0

運行以下命令來創建一個名爲 vpteam , python版本為3.8的虛擬環境.

1
conda create -n vpteam python=3.8

運行 conda activate vpteam 來激活這個虛擬環境, 如果提示符的括號中變成虛擬環境名稱就説明已經激活了.

安裝 Pytorch

  1. 確認你的nvidia顯卡支持的cuda版本.
    • 在命令行中输入 nvidia-smi 即可看到你的顯卡信息.
    • 如果沒有nvidia的獨立顯卡略過本條.
  2. 安裝pytorch.
    • 此處找到對應版本的安裝指令, 例如我的是:
    1
    conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia
    • torch的安裝包很大, 可能需要等待一段時間, 如果網絡狀態不好可能還需要挂梯子. (或者自行查找如何配置國内鏡像站)
  3. 驗證安裝, 進入python然後導入 torch 模塊, 通過 torch.cuda.is_available() 驗證cuda是否可用. 例如:
    1
    2
    3
    4
    5
    6
    (vpteam) C:\Users\jerry>python
    Python 3.8.18 (default, Sep 11 2023, 13:39:12) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import torch
    >>> torch.cuda.is_available()
    True

嘗試運行他人的網絡模型

從pytorch預置模型運行

PyTorch 是一个强大的深度学习框架,用于构建、训练和部署神经网络模型。如果你想运行他人已经训练好的网络模型,可以按照以下步骤进行操作:

  1. 导入模型:首先,你需要导入他人提供的预训练模型。这些模型通常在 Torchvision 中提供,包括一些常见的神经网络结构,如 VGGResNetGoogLeNet 等¹²⁴。

  2. 加载权重:使用 torch.load_state_dict() 方法加载预训练模型的权重。这将把模型的参数加载到你的模型中,使其具备相同的结构和参数。

  3. 前向传播:通过调用模型的 forward() 方法,输入你的数据,以获得模型的输出。这是模型的前向传播过程,也就是计算预测结果的步骤。

以下是一个示例,展示如何加载预训练的 VGG16 模型并进行前向传播:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import torch
import torchvision.models as models

# 加载预训练的VGG16模型
vgg16 = models.vgg16(pretrained=True)

# 输入数据(例如图像)
input_data = torch.randn(1, 3, 224, 224) # 假设输入是224x224的RGB图像

# 前向传播
output = vgg16(input_data)

# 输出结果
print(output)

一個可能的輸出結果是:

1
2
3
4
5
6
7
8
9
10
11
c:\Users\jerry\miniconda3\envs\vpteam\lib\site-packages\torchvision\models\_utils.py:208: UserWarning: The parameter 'pretrained' is deprecated since 0.13 and may be removed in the future, please use 'weights' instead.
warnings.warn(
c:\Users\jerry\miniconda3\envs\vpteam\lib\site-packages\torchvision\models\_utils.py:223: UserWarning: Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=VGG16_Weights.IMAGENET1K_V1`. You can also use `weights=VGG16_Weights.DEFAULT` to get the most up-to-date weights.
warnings.warn(msg)
Downloading: "https://download.pytorch.org/models/vgg16-397923af.pth" to C:\Users\jerry/.cache\torch\hub\checkpoints\vgg16-397923af.pth
100.0%
tensor([[-7.8548e-01, 4.8900e+00, -1.3465e-01, -1.0615e+00, 1.3261e+00,
3.2917e+00, 4.0811e+00, -2.8845e-01, -1.0277e+00, -6.6075e-01,
...
-2.5645e-01, -1.4511e-01, 1.2724e+00, 2.2634e+00, 3.0533e+00]],
grad_fn=<AddmmBackward0>)

運行HuggingFace上的模型

nateraw/food這個模型爲例, 打開模型頁面, 點擊右側的 Use in Transformers , 頁面上會彈出相應的Python代碼.

  • [ ] To be finished…

Step-2 能够把论⽂中的⽹络模型和给出的复现代码进⾏⼀⼀对应

初步学会看论⽂的⽹络图,以及理解Pytorch给出的接⼝,理解Pytorch如何表⽰卷积,如何表⽰池化,对代码复⽤层⾯如何处理,对于跳连接级联如何进⾏处理,理解模型的构建与封装,主要是理解Model代码为⽂件
难点是对类中的定义以及foward实际前馈的理解,涉及到部分魔法⽅法的应⽤,需要对类有⼀定理解

Copilot 的解释

  • 论⽂的⽹络图是⼀种⽤来展示神经⽹络结构和参数的图形化⽅式。它可以帮助你理解⽹络的输入、输出、层、激活函数、损失函数等组成部分。
  • Pytorch 给出的接⼝是指 Pytorch 提供的⼀些模块、函数、类等,⽤来构建和训练神经⽹络。
  • Pytorch 如何表⽰卷积,如何表⽰池化,是指 Pytorch 中的卷积层和池化层,它们是神经⽹络中常⽤的层类型,⽤来提取图像或其他类型数据的特征。
  • 代码复⽤层⾯如何处理,是指 Pytorch 中的模块化编程,⽤来将⽹络的不同部分封装成可重⽤的类或函数。这样可以提高代码的可读性和可维护性,也可以避免重复的代码。
  • 跳连接级联如何进⾏处理,是指 Pytorch 中的残差连接,⽤来解决深度神经⽹络的梯度消失或爆炸的问题。它可以将前⾯层的输出直接添加到后⾯层的输入,从⽽增强信息的流动。
  • 模型的构建与封装,是指 Pytorch 中的 nn.Module 类,⽤来定义神经⽹络的结构和⾏为。它可以将⽹络的层、参数、前向传播、后向传播等封装成⼀个对象,⽅便调⽤和管理。
  • Model 代码为⽂件,是指 Pytorch 中的模型保存和加载的⽅式,⽤来将训练好的模型存储为⼀个⽂件,或者从⼀个⽂件中加载模型。这样可以⽅便模型的部署和迁移,也可以避免重复的训练。
  • 类中的定义以及 foward 实际前馈的理解,是指 Pytorch 中的类的编写和调⽤的⽅式,⽤来实现⾃定义的模块或模型。类中的定义是指在类的初始化函数中定义⽹络的层和参数,以及在类的 forward 函数中定义⽹络的前向传播逻辑。foward 实际前馈是指在调⽤类的实例时,会⾃动执⾏ forward 函数,并返回⽹络的输出。
  • 魔法⽅法的应⽤,是指 Pytorch 中的⼀些特殊的函数,⽤来实现⼀些⾼级的功能,如运算符重载、上下⽂管理、迭代器等。它们通常以双下划线开头和结尾,如 __init__ , __call__ , __add__ , __enter__ , __exit__ , __iter__ , __next__ 等。

Step-3 能够把根据需求去更改⽹络,对⽹络结构进⾏修改

通过实操过程中,对于feature map尺⼨的变化有⼀定把握,并且进⼀步理解model的foward和backword过程

Step-4 不仅能够更改⽹络层数,还能为⽹络设计新的算法

能够根据利⽤pytorch进⾏tensor矩阵运算,来进⾏优化算法的设计,部分模型需要有numpy的基础

幾個難點

  • [ ] 數據集從哪裏來
  • [ ] 別人的網絡模型從哪裏找
  • [ ] 論文應該找什麽方向的
  • [ ] 去哪裏找別人的示例代碼

视频学习进度