# deep_learning **Repository Path**: LingJianCode/deep_learning ## Basic Information - **Project Name**: deep_learning - **Description**: study dl. - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-04-22 - **Last Updated**: 2025-08-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TODO - [ ] 模型蒸馏 - [ ] [《动手学深度学习》 — 动手学深度学习 2.0.0 documentation (d2l.ai)](https://zh-v2.d2l.ai/) - [ ] [跟李沐学AI](https://space.bilibili.com/1567748478/channel/collectiondetail?sid=32744) - [ ] [NLP相关](https://space.bilibili.com/81480422/channel/collectiondetail?sid=74798&spm_id_from=333.788.0.0) - [x] [Transformer、GPT、BERT,预训练语言模型的前世今生(目录) - B站-水论文的程序猿 - 博客园 (cnblogs.com)](https://www.cnblogs.com/nickchen121/p/15105048.html) # 注意 1. 要注意pytorch计算交叉熵误差的函数自带softmax,训练时模型里面不要添加softmax 2. 取消命令行默认进入conda ```shell conda config --set auto_activate_base false ``` # jupyter-notebook服务端启动命令 ```shell jupyter notebook ``` # 深度学习理论与应用 教材代码在mengzuqiang_example目录下,需要对其中的代码进行添加 # 卷积 ## 计算 输入矩阵和卷积核(weight)做矩阵运算(对应相乘相加) ![conv](./md_img/th.jpg) ## padding 虚线方格为卷积的padding(图中为padding=2,默认填充的0)参数,图片的(步长)stride=1。添加padding后,输出的tensor尺寸会变大 ![padding](./md_img/R-C.gif) ## 卷积输入输出形状计算公式 代码文件:[6_calc_padding.py](study_tudui/6_calc_padding.py) ![conv_formule](./md_img/input_output_shape_formule.png) # 最大池化 选择kernel矩阵中输入矩阵里的最大值作为输出
一张图片经过最大池化,图片变模糊了,尺寸变小
大大减少神经网络的计算量 ![maxpool](./md_img/maxpool.png) # 非线性变换 给模型提供非线性特征,更容易泛化,而不是一条直线
常用函数:ReLU()、Sigmoid() # 正则化层Norm 用的少,用于加上训练 # 批量规范化BatchNorm 标准化输入特征,使其平均值为0,方差为1。这种标准化可以很好地与我们的优化器配合使用,因为它可以将参数的量级进行统一。 # 线性层 图片要线性处理则需要将矩阵摊平(flatten)变成一维,然后在进入linear层进行计算 ![nn_linear](./md_img/nn_linear.png) # Dropout层 防止过拟合 # Sequential 搭建CIFAR10数据集分类模型,并学习Sequential
**需要注意计算卷积层的padding** [9_study_sequential.py](./study_tudui/9_study_sequential_cifar10.py) ![model_structure](./md_img/Structure-of-CIFAR10-quick-model.png) # 修改现有的模型1 vgg16的输出有1000类,如果我们需要将vgg16应用到CIFAR10上则需要对vgg16进行修改,让模型最终的输出只有10类。方法有两种: 1. 手写vgg16,修改最后的线性层输出 2. 在vgg16最后再加一层线性层,Linear(in_features=1000, out_features=10, bias=True)。这样就不需要手写vgg16模型。 ```python vgg16_true.classifier.add_module('add_linear', nn.Linear(in_features=1000, out_features=10)) ``` - 修改前 ![vgg16_output](./md_img/vgg16_output.png) - 修改后 ![vgg16_add_module_output](./md_img/vgg16_add_module_output.png) # 修改现有的模型2 不想在模型后面添加模块,直接对模型的某层进行修改。 ```python vgg16_true.classifier[6] = nn.Linear(in_features=4096, out_features=10) ``` ![vgg16_modify_module](./md_img/vgg16_modify_module.png) # argmax与正确率 ![argmax](./md_img/argmx_accuracy.png) # 注意 关注模型里有没有特殊的层
[模板代码](./tudui/train.py) ```python tudui.train() tudui.eval() ``` # GPU训练 ```python device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu') ``` 1. 模型 ```python mymod.to(device) ``` 2. 损失函数 ```python loss.to(device) ``` 3. 数据 ```python imgs.to(device) target.to(device) ``` # colab 运行命令 ```shell !nvidia-smi ``` ![colab_cmd](./md_img/colab_cmd.png) # 模型使用 [use_module](./tudui/test.py)