实例代码逐行解读
这些参数是通过 `argparse` 模块定义的命令行参数,通常用于控制深度学习模型训练的各种设置。以下是每个参数的详细说明:
1. **`--train_setting_flow`**: 整数类型,控制训练流程的设置。
- 0: 从左到右(基本)
- 1: 从右到左(基本)
- 2: 双向(Twin)从左到右
- 3: 双向(Twin)从右到左
- 默认值为0。
2. **`--simple_model`**: 整数类型,选择模型的复杂度。
- 0: 基础网络模型 复杂,计算量大
- 1: 简单网络模型
- 默认值为0。
3. **`--shared_model`**: 整数类型,控制模型共享设置(双向模型)。
- 0: 共享模型
- 1: 不共享
- 2: 转移单支路学习
- 默认值为0。
shared_model
参数选项的具体含义:
-
0
= 共享模型(Shared model):- 共享模型:两个分支共享相同的权重和结构。这样做的好处是减少参数数量,防止模型过拟合,也有助于将两个输入的相似性或差异直接映射到相同的特征空间。
- 适用场景:当两个输入的特征或模式相似且希望它们共享相同的特征提取方式时,使用共享模型。
-
1
= 不共享模型(False):- 独立模型:两个分支拥有各自的权重和结构,不进行参数共享。这意味着每个分支会独立学习自己的特征,允许每个输入具有更加独立的特征提取过程。
- 适用场景:当两个输入的模式或特征差异较大时,选择不共享模型可以让每个分支独立地学习和提取适合各自输入的特征。
-
2
= 单支路迁移学习(Transfer Single Branches Learning):- 单支路迁移学习:两个分支的某些层可能共享,或者一个分支的学习结果用于另一个分支。这种设置通常用于迁移学习场景,即将已经在一个任务上训练好的模型部分迁移到另一个任务中。
- 适用场景:当一个分支已经在相关任务中训练好,另一分支需要通过迁移学习从第一个分支的知识中受益时,可以使用这种方式。
4. **`--exp_name`**: 字符串类型,实验的名称,默认值为 `"Experiment0Marconi100"`。
5. **`--input_height`**: 整数类型,输入图像的高度,默认值为192。
6. **`--input_width`**: 整数类型,输入图像的宽度,默认值为384。
7. **`--batch_size`**: 整数类型,训练时的批量大小,默认值为30。
8. **`--num_epochs`**: 整数类型,训练的轮次(epochs),默认值为100。
batch_size
和 num_epochs
是在深度学习中常见的超参数,决定了模型训练时的数据处理方式。它们在训练过程中的作用如下:
. batch_size
(批量大小)
batch_size
是指在一次前向传播和反向传播过程中,神经网络处理的样本数量。
- 定义:在每次模型参数更新之前,神经网络使用的样本数量。
- 常见值:
batch_size
可以是任意正整数,但常见的选择是 16、32、64、128 等。 - 工作原理:
- 数据集被分割成小批量(batch)来训练,而不是整个数据集一次性训练。
- 在每个批次(batch)上执行前向传播和反向传播,以更新模型参数。
优点:
- 小的
batch_size
(如 32 或 64)可以减少内存使用,适合大型数据集或资源有限的硬件(如 GPU)。 - 大的
batch_size
(如 128 或 256)可以提高并行计算效率,加快训练速度,但可能需要更多内存。
权衡:
- 小的 batch size:更多参数更新步骤,训练更加精细,但收敛速度可能较慢。
- 大的 batch size:更快的训练速度,但参数更新较粗糙,可能会导致训练不稳定或需要更高的学习率。
num_epochs
(训练轮数)
num_epochs
指模型完整地遍历整个训练数据集的次数。
- 定义:模型对整个训练数据集进行一次训练称为一个 epoch。
- 工作原理:
- 数据集被分割成多个批次(batch)。
- 在一个 epoch 中,所有批次的样本都会被训练一次。
- 通常需要多个 epoch 才能让模型收敛,找到合适的参数。
优点:
- 较少的 epoch 数量:训练时间短,但可能模型还没有充分学习到数据特征。
- 较多的 epoch 数量:允许模型充分训练,可以提高模型的泛化能力,但训练时间较长,且可能出现过拟合问题。
权衡:
- 过少的 epoch:模型可能未完全学习到数据的特征,导致欠拟合。
- 过多的 epoch:模型可能过拟合训练数据,导致泛化能力下降。
总结:
batch_size
决定了每次参数更新时使用的数据量,影响训练速度和资源使用。num_epochs
决定了模型完整地看多少遍数据,影响模型训练的程度和效果。
9. **`--lr`**: 浮点类型,初始学习率,默认值为0.01。
10. **`--train_size_set`**: 整数类型,训练集的大小,默认值为34240。
11. **`--test_size_set`**: 整数类型,测试集的大小,默认值为7191。
12. **`--k1`**: 整数类型,基本的k值,默认值为32。
13. **`--d1`**: 整数类型,基础的稠密神经元数量,默认值为300。
14. **`--alpha1`**: 浮点类型,超参数α1,默认值为0.2。
15. **`--alpha2`**: 浮点类型,超参数α2,默认值为0.7。
16. **`--alpha3`**: 浮点类型,超参数α3,默认值为0.1。
17. **`--learning_rate_decay`**: 整数类型,是否启用学习率衰减。
- 1: 启用
- 0: 不启用
- 默认值为0。
18. **`--learning_rate_plateau`**: 整数类型,是否在监控损失时减少学习率。
- 1: 启用
- 0: 不启用
- 默认值为0。
19. **`--decay_factor_lr`**: 浮点类型,学习率衰减因子,默认值为0.9。
20. **`--patience_decay`**: 整数类型,学习率衰减的耐心值,默认值为5。
21. **`--selected_imgs`**: 整数类型,控制选定的图像深度。
- 1: 选定图像
- 0: 整个数据集
- 默认值为0。
22. **`--continue_fit`**: 字符串类型,控制是否继续训练。
- 0: 不继续
- 其他值:继续训练,指定检查点的名称(例如030)
- 默认值为'0'。
23. **`--gpus`**: 整数类型,使用的GPU数量,默认值为1。
24. **`--gpuids`**: 字符串类型,使用的GPU ID,默认值为'0'(可以是多个ID,如0,1,2,3等)。
这些参数可以帮助用户在命令行中灵活地配置模型训练的各项设置。