YOLO又更新了,已经来到了YOLOv8。
在这里插入图片描述

全部参数表

首先罗列一下官网提供的全部参数。
https://docs.ultralytics.com/modes/train/

KeyValueDescription
modelNonepath to model file, i.e. yolov8n.pt, yolov8n.yaml
dataNonepath to data file, i.e. coco128.yaml
epochs100number of epochs to train for
patience50epochs to wait for no observable improvement for early stopping of training
batch16number of images per batch (-1 for AutoBatch)
imgsz640size of input images as integer or w,h
saveTruesave train checkpoints and predict results
save_period-1Save checkpoint every x epochs (disabled if < 1)
cacheFalseTrue/ram, disk or False. Use cache for data loading
deviceNonedevice to run on, i.e. cuda device=0 or device=0,1,2,3 or device=cpu
workers8number of worker threads for data loading (per RANK if DDP)
projectNoneproject name
nameNoneexperiment name
exist_okFalsewhether to overwrite existing experiment
pretrainedFalsewhether to use a pretrained model
optimizer‘SGD’optimizer to use, choices=[‘SGD’, ‘Adam’, ‘AdamW’, ‘RMSProp’]
verboseFalsewhether to print verbose output
seed0random seed for reproducibility
deterministicTruewhether to enable deterministic mode
single_clsFalsetrain multi-class data as single-class
rectFalserectangular training with each batch collated for minimum padding
cos_lrFalseuse cosine learning rate scheduler
close_mosaic0(int) disable mosaic augmentation for final epochs
resumeFalseresume training from last checkpoint
ampTrueAutomatic Mixed Precision (AMP) training, choices=[True, False]
lr00.01initial learning rate (i.e. SGD=1E-2, Adam=1E-3)
lrf0.01final learning rate (lr0 * lrf)
momentum0.937SGD momentum/Adam beta1
weight_decay0.0005optimizer weight decay 5e-4
warmup_epochs3.0warmup epochs (fractions ok)
warmup_momentum0.8warmup initial momentum
warmup_bias_lr0.1warmup initial bias lr
box7.5box loss gain
cls0.5cls loss gain (scale with pixels)
dfl1.5dfl loss gain
pose12.0pose loss gain (pose-only)
kobj2.0keypoint obj loss gain (pose-only)
label_smoothing0.0label smoothing (fraction)
nbs64nominal batch size
overlap_maskTruemasks should overlap during training (segment train only)
mask_ratio4mask downsample ratio (segment train only)
dropout0.0use dropout regularization (classify train only)
valTruevalidate/test during training

受限于博主能力有限。下文的解释,如有问题,欢迎大家指出。

示例代码

后续讲解的参数都可以像model.train(data=‘coco128.yaml’, epochs=100, imgsz=640)这里一样,例如参数名A,参数值为B,则可以写为
model.train(A=B)

from ultralytics import YOLO

# 加载模型
model = YOLO('yolov8n.yaml')  # 从yaml文件加载
model = YOLO('yolov8n.pt')  # 加载预训练模型 (推荐)
model = YOLO('yolov8n.yaml').load('yolov8n.pt')  # 从 YAML加载 然后再加载权重

# 指定训练参数开始训练
model.train(data='coco128.yaml', epochs=100, imgsz=640)

1. model ✰✰✰✰✰

model: 模型文件的路径。这个参数指定了所使用的模型文件的位置,例如 yolov8n.ptyolov8n.yaml

选择.pt和.yaml的区别
  • .pt类型的文件是从预训练模型的基础上进行训练。若我们选择 yolov8n.pt这种.pt类型的文件,其实里面是包含了模型的结构和训练好的参数的,也就是说拿来就可以用,就已经具备了检测目标的能力了,yolov8n.pt能检测coco中的80个类别。假设你要检测不同种类的狗,那么yolov8n.pt原本可以检测狗的能力对你训练应该是有帮助的,你只需要在此基础上提升其对不同狗的鉴别能力即可。但如果你需要检测的类别不在其中,例如口罩检测,那么就帮助不大。
  • .yaml文件是从零开始训练。采用yolov8n.yaml这种.yaml文件的形式,在文件中指定类别,以及一些别的参数。
模型种类选择,是n,s,m,还是l,x?

像 YOLOv8x 和 YOLOv8x6 这样较大模型几乎在所有情况下都会产生更好的结果,但参数量更大,需要更多的显卡内存来训练,并且运行速度更慢。

在这里插入图片描述

2. data ✰✰✰✰✰

data: 数据文件的路径。该参数指定了数据集文件的位置,例如 coco128.yaml。数据集文件包含了训练和验证所需的图像、标签。

组织数据数据目录

官方给出的coco128.yaml如下,提示我们有三种配置方式。

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/coco128  # dataset root dir
train: images/train2017  # train images (relative to 'path') 128 images
val: images/train2017  # val images (relative to 'path') 128 images
test:  # test images (optional)

# Classes
nc: 80  # number of classes
names: ['person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light',
        'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow',
        'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee',
        'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard',
        'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple',
        'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch',
        'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone',
        'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear',
        'hair drier', 'toothbrush']  # class names
1. 指定训练数据集的图片的文件夹

yaml文件中指定是images的位置,yolo会自动寻找同级目录下labels文件夹中的同名标签,我们需要在labels文件夹中准备好标签文件。

├── shop200
    └── images
        └── train2019
            └── 20180824-13-43-21-401.jpg
            └──*****
            └── 20181025-16-37-47-196.jpg
        └──test2019
    └── labels  
        └── train2019
            └── 20180824-13-43-21-401.txt
            └──*****
            └── 20181025-16-37-47-196.txt
        └──test2019
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: D:/dataset/shop200  # dataset root dir
train: images/train2019  # train images (relative to 'path') 128 images
val: images/test2019  # val images (relative to 'path') 128 images
test:  # test images (optional)

# Classes
nc: 200  # number of classes
names: ['1_puffed_food', '2_puffed_food', '3_puffed_food', '4_puffed_food', '5_puffed_food', '6_puffed_food', '7_puffed_food', '8_puffed_food', '9_puffed_food', '10_puffed_food', '11_puffed_food', '12_puffed_food', '13_dried_fruit', '14_dried_fruit', '15_dried_fruit', '16_dried_fruit', '17_dried_fruit', '18_dried_fruit', '19_dried_fruit', '20_dried_fruit', '21_dried_fruit', '22_dried_food', '23_dried_food', '24_dried_food', '25_dried_food', '26_dried_food', '27_dried_food', '28_dried_food', '29_dried_food', '30_dried_food', '31_instant_drink', '32_instant_drink', '33_instant_drink', '34_instant_drink', '35_instant_drink', '36_instant_drink', '37_instant_drink', '38_instant_drink', '39_instant_drink', '40_instant_drink', '41_instant_drink', '42_instant_noodles', '43_instant_noodles', '44_instant_noodles', '45_instant_noodles', '46_instant_noodles', '47_instant_noodles', '48_instant_noodles', '49_instant_noodles', '50_instant_noodles', '51_instant_noodles', '52_instant_noodles', '53_instant_noodles', '54_dessert', '55_dessert', '56_dessert', '57_dessert', '58_dessert', '59_dessert', '60_dessert', '61_dessert', '62_dessert', '63_dessert', '64_dessert', '65_dessert', '66_dessert', '67_dessert', '68_dessert', '69_dessert', '70_dessert', '71_drink', '72_drink', '73_drink', '74_drink', '75_drink', '76_drink', '77_drink', '78_drink', '79_alcohol', '80_alcohol', '81_drink', '82_drink', '83_drink', '84_drink', '85_drink', '86_drink', '87_drink', '88_alcohol', '89_alcohol', '90_alcohol', '91_alcohol', '92_alcohol', '93_alcohol', '94_alcohol', '95_alcohol', '96_alcohol', '97_milk', '98_milk', '99_milk', '100_milk', '101_milk', '102_milk', '103_milk', '104_milk', '105_milk', '106_milk', '107_milk', '108_canned_food', '109_canned_food', '110_canned_food', '111_canned_food', '112_canned_food', '113_canned_food', '114_canned_food', '115_canned_food', '116_canned_food', '117_canned_food', '118_canned_food', '119_canned_food', '120_canned_food', '121_canned_food', '122_chocolate', '123_chocolate', '124_chocolate', '125_chocolate', '126_chocolate', '127_chocolate', '128_chocolate', '129_chocolate', '130_chocolate', '131_chocolate', '132_chocolate', '133_chocolate', '134_gum', '135_gum', '136_gum', '137_gum', '138_gum', '139_gum', '140_gum', '141_gum', '142_candy', '143_candy', '144_candy', '145_candy', '146_candy', '147_candy', '148_candy', '149_candy', '150_candy', '151_candy', '152_seasoner', '153_seasoner', '154_seasoner', '155_seasoner', '156_seasoner', '157_seasoner', '158_seasoner', '159_seasoner', '160_seasoner', '161_seasoner', '162_seasoner', '163_seasoner', '164_personal_hygiene', '165_personal_hygiene', '166_personal_hygiene', '167_personal_hygiene', '168_personal_hygiene', '169_personal_hygiene', '170_personal_hygiene', '171_personal_hygiene', '172_personal_hygiene', '173_personal_hygiene', '174_tissue', '175_tissue', '176_tissue', '177_tissue', '178_tissue', '179_tissue', '180_tissue', '181_tissue', '182_tissue', '183_tissue', '184_tissue', '185_tissue', '186_tissue', '187_tissue', '188_tissue', '189_tissue', '190_tissue', '191_tissue', '192_tissue', '193_tissue', '194_stationery', '195_stationery', '196_stationery', '197_stationery', '198_stationery', '199_stationery', '200_stationery']
 # class names

在这里插入图片描述
在这里插入图片描述

2. 指定训练数据集的图片的文件
train: /home/wzh/data/hat/trainval.txt
val: /home/wzh/data/hat/valid.txt
nc: 2
names: ['hat','person']

此文件中描述了数据集图片的位置。我这里是把标签直接放在image同目录下,也可以像上述方法一样同级目录下labels文件夹中的同名标签
在这里插入图片描述
在这里插入图片描述

3. 指定训练数据集的图片的文件夹集合

与方法1类似,只是指定的是多个文件夹。

3. epochs ✰✰✰

epochs: 训练的轮数。这个参数确定了模型将会被训练多少次,每一轮都遍历整个训练数据集。训练的轮数越多,模型对数据的学习就越充分,但也增加了训练时间。

选取策略

默认是100轮数。但一般对于新数据集,我们还不知道这个数据集学习的难易程度,可以加大轮数,例如300,来找到更佳性能。

4. patience

patience: 早停的等待轮数。在训练过程中,如果在一定的轮数内没有观察到模型性能的明显提升,就会停止训练。这个参数确定了等待的轮数,如果超过该轮数仍没有改进,则停止训练。

早停

早停能减少过拟合。过拟合(overfitting)指的是只能拟合训练数据, 但不能很好地拟合不包含在训练数据中的其他数据的状态。

5. batch ✰✰✰✰✰

batch: 每个批次中的图像数量。在训练过程中,数据被分成多个批次进行处理,每个批次包含一定数量的图像。这个参数确定了每个批次中包含的图像数量。特殊的是,如果设置为**-1**,则会自动调整批次大小,至你的显卡能容纳的最多图像数量。

选取策略

一般认为batch越大越好。因为我们的batch越大我们选择的这个batch中的图片更有可能代表整个数据集的分布,从而帮助模型学习。但batch越大占用的显卡显存空间越多,所以还是有上限的。

6. imgsz ✰✰✰✰✰

  • imgsz: 输入图像的尺寸。这个参数确定了输入图像的大小。可以指定一个整数值表示图像的边长,也可以指定宽度和高度的组合。例如640表示图像的宽度和高度均为640像素。
选取策略

如果数据集中存在大量小对象,增大输入图像的尺寸imgsz可以使得这些小对象从高分辨率中受益,更好的被检测出。从官网放出的性能表也可以看出。
在这里插入图片描述

7. save、save_period ✰✰✰

  • save: 是否保存训练的检查点和预测结果。当训练过程中保存检查点时,模型的权重和训练状态会被保存下来,以便在需要时进行恢复或继续训练。预测结果也可以被保存下来以供后续分析和评估。

  • save_period: 保存检查点的间隔。这个参数确定了保存检查点的频率,例如设置为10表示每隔10个训练轮数保存一次检查点。如果设置为负数(如-1),则禁用保存检查点功能。

和resume配合

和resume配合可以在训练不稳定中断后再进行接着训练。例如大家白嫖Colab这个平台训练网络时,一般是有时间限制,会出现时间到了我们还没训练完的情况。通过save然后再resume重新启动可以进行接着训练。

8. cache

  • cache: 数据加载时是否使用缓存。这个参数控制是否将数据加载到缓存中,以加快训练过程中的数据读取速度。可以选择在 RAM 内存中缓存数据(True/ram)、在磁盘上缓存数据(disk)或不使用缓存(False)。

9. device ✰✰✰✰✰

device: 训练运行的设备。该参数指定了模型训练所使用的设备,例如使用 GPU 运行可以指定为 cuda device=0,或者使用多个 GPU 运行可以指定为 device=0,1,2,3,如果没有可用的 GPU,可以指定为 device=cpu 使用 CPU 进行训练。

注意别选择错了。

10. workers ✰✰✰

  • workers: 数据加载时的工作线程数。在数据加载过程中,可以使用多个线程并行地加载数据,以提高数据读取速度。这个参数确定了加载数据时使用的线程数,具体的最佳值取决于硬件和数据集的大小。
windows系统注意设置为0

windows系统下需设置为0,否则会报错
RuntimeError: An attempt has been made to start a new process before the current process has finished its bootstrapping phase。这是因为在linux系统中可以使用多个子进程加载数据,而在windows系统中不能。

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "D:\anaconda\lib\multiprocessing\spawn.py", line 116, in spawn_main
    exitcode = _main(fd, parent_sentinel)
  File "D:\anaconda\lib\multiprocessing\spawn.py", line 125, in _main
    prepare(preparation_data)
  File "D:\anaconda\lib\multiprocessing\spawn.py", line 236, in prepare
    _fixup_main_from_path(data['init_main_from_path'])
  File "D:\anaconda\lib\multiprocessing\spawn.py", line 287, in _fixup_main_from_path
    main_content = runpy.run_path(main_path,
  File "D:\anaconda\lib\runpy.py", line 288, in run_path
    return _run_module_code(code, init_globals, run_name,
  File "D:\anaconda\lib\runpy.py", line 97, in _run_module_code
    _run_code(code, mod_globals, init_globals,
  File "D:\anaconda\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "D:\code\pycharm\yolov8\mytrain.py", line 8, in <module>
    model.train(data="shop200.yaml")
  File "D:\anaconda\lib\site-packages\ultralytics\yolo\engine\model.py", line 370, in train
    self.trainer.train()
  File "D:\anaconda\lib\site-packages\ultralytics\yolo\engine\trainer.py", line 191, in train
    self._do_train(world_size)
  File "D:\anaconda\lib\site-packages\ultralytics\yolo\engine\trainer.py", line 268, in _do_train
    self._setup_train(world_size)
  File "D:\anaconda\lib\site-packages\ultralytics\yolo\engine\trainer.py", line 250, in _setup_train
    self.train_loader = self.get_dataloader(self.trainset, batch_size=batch_size, rank=RANK, mode='train')
  File "D:\anaconda\lib\site-packages\ultralytics\yolo\v8\detect\train.py", line 65, in get_dataloader
    return build_dataloader(dataset, batch_size, workers, shuffle, rank)  # return dataloader
  File "D:\anaconda\lib\site-packages\ultralytics\yolo\data\build.py", line 100, in build_dataloader
    return InfiniteDataLoader(dataset=dataset,
  File "D:\anaconda\lib\site-packages\ultralytics\yolo\data\build.py", line 29, in __init__
    self.iterator = super().__iter__()
  File "D:\anaconda\lib\site-packages\torch\utils\data\dataloader.py", line 359, in __iter__
    return self._get_iterator()
  File "D:\anaconda\lib\site-packages\torch\utils\data\dataloader.py", line 305, in _get_iterator
    return _MultiProcessingDataLoaderIter(self)
  File "D:\anaconda\lib\site-packages\torch\utils\data\dataloader.py", line 918, in __init__
    w.start()
  File "D:\anaconda\lib\multiprocessing\process.py", line 121, in start
    self._popen = self._Popen(self)
  File "D:\anaconda\lib\multiprocessing\context.py", line 224, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
  File "D:\anaconda\lib\multiprocessing\context.py", line 327, in _Popen
    return Popen(process_obj)
  File "D:\anaconda\lib\multiprocessing\popen_spawn_win32.py", line 45, in __init__
    prep_data = spawn.get_preparation_data(process_obj._name)
  File "D:\anaconda\lib\multiprocessing\spawn.py", line 154, in get_preparation_data
    _check_not_importing_main()
  File "D:\anaconda\lib\multiprocessing\spawn.py", line 134, in _check_not_importing_main
    raise RuntimeError('''
RuntimeError: 
        An attempt has been made to start a new process before the
        current process has finished its bootstrapping phase.

        This probably means that you are not using fork to start your
        child processes and you have forgotten to use the proper idiom
        in the main module:

            if __name__ == '__main__':
                freeze_support()
                ...

        The "freeze_support()" line can be omitted if the program
        is not going to be frozen to produce an executable.

11. project

  • project: 项目名称。这个参数用于标识当前训练任务所属的项目,方便管理和组织多个训练任务。

12. name

  • name: 实验名称。该参数为当前训练任务指定一个名称,以便于标识和区分不同的实验。

13. exist_ok

  • exist_ok: 是否覆盖现有的实验。如果设置为 True,当实验名称已经存在时,将会覆盖现有实验。默认为 False。

14. pretrained

  • pretrained: 是否使用预训练模型。如果设置为 True,将加载预训练的模型权重进行训练,这有助于加快训练过程和提高模型性能。

15. optimizer

  • optimizer: 选择要使用的优化器。优化器是深度学习中用于调整模型参数以最小化损失函数的算法。可以选择不同的优化器,如 ‘SGD’、‘Adam’、‘AdamW’、‘RMSProp’,根据任务需求选择适合的优化器。

16. verbose

  • verbose: 是否打印详细输出。如果设置为 True,训练过程中会输出更详细的信息和日志。如果设置为 False,只会输出关键信息和结果。

17. seed

  • seed: 随机种子,用于实现可重复性。通过设置相同的随机种子,可以使得每次运行时的随机过程保持一致,以便于结果的复现。

18. deterministic

  • deterministic: 是否启用确定性模式。启用确定性模式后,保证在相同的输入下,每次运行的结果是确定的,不会受到随机性的影响。

19. single_cls

  • single_cls: 将多类数据训练为单类。如果设置为 True,将会将多类数据视为单一类别进行训练。

20. rect

  • rect: 使用矩形训练,每个批次进行最小填充。设置为 True 后,训练过程中使用矩形形状的图像批次,并进行最小化填充。

21. cos_lr

  • cos_lr: 使用余弦学习率调度器。如果设置为 True,将使用余弦函数调整学习率的变化情况。

22. close_mosaic

  • close_mosaic: 禁用mosaic增强的最后第几个轮次。可以指定一个整数值,表示在训练的最后第几个轮次中禁用mosaic增强。
mosaic是什么

Mosaic数据增强方法是YOLOV4论文中提出来的,主要思想是将四张图片进行随机裁剪,再拼接到一张图上作为训练数据。这样做的好处是丰富了图片的背景,并且四张图片拼接在一起变相地提高了batch_size,在进行batch normalization的时候也会计算四张图片,所以对本身batch_size不是很依赖,单块GPU就可以训练YOLOV4。
在这里插入图片描述

YOLOV4论文YOLOv4: Optimal Speed and Accuracy of Object Detection 链接https://arxiv.org/pdf/2004.10934.pdf

23. resume

  • resume: 从最后一个检查点恢复训练。如果设置为 True,将从最后一个检查点的状态继续训练。

24. amp

  • amp: 是否使用自动混合精度(Automatic Mixed Precision,AMP)训练。AMP 是一种深度学习训练技术,利用半精度浮点数加速训练过程,可以减少显存占用。

25. lr0

  • lr0: 初始学习率。学习率是控制模型参数更新步幅的超参数,初始学习率确定了训练开始时的参数更新速度。

26. lrf

  • lrf: 最终学习率。最终学习率是通过初始学习率乘以一个比例系数得到的,用于控制训练过程中学习率的衰减。

注意lrf其实是系数,最终学习率相较于初始学习率的系数。

27. momentum

  • momentum: SGD 优化器的动量/Adam 优化器的 beta1。动量是一种加速梯度下降过程的技术,用于增加参数更新的稳定性。

28. weight_decay

  • weight_decay: 优化器的权重衰减(weight decay)。权重衰减是一种正则化技术,用于减小模型复杂度,防止过拟合。

29. warmup_epochs

  • warmup_epochs: 热身阶段的轮数。热身阶段是训练过程中初始阶段的一部分,在此阶段内,学习率和动量等参数逐渐增加,以帮助模型更好地适应训练数据。

30. warmup_momentum

  • warmup_momentum: 热身阶段的初始动量。在热身阶段开始时,动量的初始值。

31. warmup_bias_lr

  • warmup_bias_lr: 热身阶段的初始偏置学习率。在热身阶段开始时,偏置学习率的初始值。

32. box、cls

  • box: 边界框损失权重。用于调整边界框损失的权重,以控制其在总损失中的贡献程度。
  • cls: 类别损失权重。用于调整类别损失的权重,以控制其在总损失中的贡献程度(按像素进行缩放)。
调整策略

如果你想更强调一些分类也就是更精准的类别判断你可以增加cls的值;如果你想更强调一些边界框的定位你可以增加box的值。

这个两个权重我认为也可以根据你目前训练输出的边界框损失数值和分类损失数值来判断。

33. dfl

  • dfl: DFL(Distribution Focal Loss)损失权重。用于调整 DFL 损失的权重,以控制其在总损失中的贡献程度。

34. pose

  • pose: 姿态损失权重(仅姿态)。用于调整姿态损失的权重,以控制其在总损失中的贡献程度(仅应用于姿态相关任务)。

35. kobj

  • kobj: 关键点目标损失权重(仅姿态)。用于调整关键点目标损失的权重,以控制其在总损失中的贡献程度(仅应用于姿态相关任务)。

36. label_smoothing

  • label_smoothing: 标签平滑(label smoothing)。标签平滑是一种正则化技术,用于减少模型对训练数据的过拟合程度。
标签平滑

label smoothing就是把原来的one-hot表示的标签,在每一维上都添加了一个随机噪音。
具体可以参考这篇文章标签平滑Label Smoothing

在这里插入图片描述

37. nbs

  • nbs: 标准批次大小(nominal batch size)。指定训练过程中每个批次的大小。

38. overlap_mask

  • overlap_mask: 训练时是否要求蒙版重叠(仅用于分割训练)。如果设置为 True,要求训练过程中的蒙版(mask)重叠。

39. mask_ratio

  • mask_ratio: 蒙版下采样比例(仅用于分割训练)。用于控制蒙版下采样的比例。

40. dropout

  • dropout: 是否使用丢弃正则化(dropout regularization)(仅用于分类训练)。如果设置为非零值,则在训练过程中使用丢弃正则化来减少模型的过拟合。

41. val

  • val: 是否在训练过程中进行验证/测试。如果设置为 True,将在训练过程中进行验证或测试,以评估模型的性能。
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐