# 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)做矩阵运算(对应相乘相加)

## padding
虚线方格为卷积的padding(图中为padding=2,默认填充的0)参数,图片的(步长)stride=1。添加padding后,输出的tensor尺寸会变大

## 卷积输入输出形状计算公式
代码文件:[6_calc_padding.py](study_tudui/6_calc_padding.py)

# 最大池化
选择kernel矩阵中输入矩阵里的最大值作为输出
一张图片经过最大池化,图片变模糊了,尺寸变小
大大减少神经网络的计算量

# 非线性变换
给模型提供非线性特征,更容易泛化,而不是一条直线
常用函数:ReLU()、Sigmoid()
# 正则化层Norm
用的少,用于加上训练
# 批量规范化BatchNorm
标准化输入特征,使其平均值为0,方差为1。这种标准化可以很好地与我们的优化器配合使用,因为它可以将参数的量级进行统一。
# 线性层
图片要线性处理则需要将矩阵摊平(flatten)变成一维,然后在进入linear层进行计算

# Dropout层
防止过拟合
# Sequential
搭建CIFAR10数据集分类模型,并学习Sequential
**需要注意计算卷积层的padding**
[9_study_sequential.py](./study_tudui/9_study_sequential_cifar10.py)

# 修改现有的模型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))
```
- 修改前

- 修改后

# 修改现有的模型2
不想在模型后面添加模块,直接对模型的某层进行修改。
```python
vgg16_true.classifier[6] = nn.Linear(in_features=4096, out_features=10)
```

# argmax与正确率

# 注意
关注模型里有没有特殊的层
[模板代码](./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
```

# 模型使用
[use_module](./tudui/test.py)