百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

大模型训练之增量预训练参数说明

ztj100 2025-03-11 23:55 35 浏览 0 评论

在增量预训练过程中通常需要设置三类或四类参数,模型参数,数据参数,训练参数,额外参数。

下面分别针对这四种参数进行说明。

模型参数

  1. model_type

模型类型,例如bloom,llama,baichuan,qwen等。

  1. model_name_or_path

模型名称或者路径。

  1. tokenizer_name_or_path

分词器名称或者路径。如果进行了词表扩充或裁剪,则tokenizer_name_or_pathmodel_name_or_path不同。

  1. load_in_8bit

是否以8bit加载模型。

  1. load_in_4bit

是否以4bit加载模型。

  1. use_fast_tokenizer

是否使用快速分词器。

  1. torch_dtype

张量数值类型

  1. device_map

设置指定设备(也就是在哪张显卡上)

数据参数

  1. dataset_name

数据集的名称,使用datasets库中的数据。

  1. dataset_config_name

数据集的配置名称,对应于dataset_name参数。

  1. train_file_dir

训练文件目录(本地)。

  1. validation_file_dir

验证文件目录(本地)。

  1. max_train_samples

最大训练样本数。

6.max_eval_samples

最大评估样本数。

  1. streaming

设置是否流式输出模式。

  1. block_size

块大小

  1. overwrite_cache

是否覆盖缓存

  1. validation_split_percentage

验证划分比例。若没有指定验证集,需要从训练集中划分。

  1. preprocessing_num_workers

预处理的线程数。

  1. keep_linebreaks

是否保留换行符。

额外参数

额外参数是指使用不同的高效微调方法需要进行调整的参数。

  1. use_peft

是否使用peft。

  1. target_modules

训练的目标模块。

  1. lora_rank

lora方法中的秩。

  1. lora_dropout

lora方法中的dropout参数。

  1. lora_alpha

lora方法中的缩放系数。

  1. modules_to_save

保存的其他模块。主要是在词表扩展后使用,设置为’embed_tokens,lm_head‘

  1. peft_path

lora包的路径。

  1. qlora

是否使用qlora微调方法。

训练参数

训练参数来自于transformers.TrainingArguments,训练参数特别多,下面一一介绍。

  1. output_dir (str):

模型预测和检查点输出的目录

  1. overwrite_output_dir (bool, optional, defaults to False)

如果该参数为True,在输出目录output_dir已经存在的情况下将删除该目录并重新创建。默认值是False

  1. do_train (bool, optional, defaults to False)

是否进行训练。

  1. do_eval (bool, optional)

是否对验证集进行评估。

  1. do_predict (bool, optional, defaults to False)

是否在测试集上进行预测。

  1. evaluation_strategy (str or [~trainer_utils.IntervalStrategy], optional, defaults to "no"):

训练期间采用的评估策略,可选的值有:

  • "no":训练期间不进行评估
  • "steps":每一个eval_steps阶段之后都进行评估
  • "epoch":每一个epoch之后进行评估
  1. prediction_loss_only (bool, optional, defaults to False):

当执行评估和预测的时候,是否仅仅返回损失。

  1. per_device_train_batch_size (int, optional, defaults to 8):

每一个GPU/TPU 或者CPU核心训练的批次大小。

  1. per_device_eval_batch_size (int, optional, defaults to 8):

每一个GPU/TPU 或者CPU核心评估的批次大小。

  1. gradient_accumulation_steps (int, optional, defaults to 1):

在执行向后/更新过程之前,用于累积梯度的更新步骤数。

  1. eval_accumulation_steps (int, optional):

在将结果移动到CPU之前,累积输出张量的预测步骤数。如果如果未设置,则在移动到CPU之前,整个预测都会在GPU/TPU上累积(速度更快需要更多的内存)。

  1. eval_delay (float, optional):

在执行第一次评估之前要等待的epoch或step,具体取决于evaluation_strategy。

  1. learning_rate (float, optional, defaults to 5e-5):

AdamW优化器初始化的学习率。

  1. weight_decay (float, optional, defaults to 0):

AdamW优化器中,除了bias和LayerNorm权重,如果weight_decay不是零,则应用于所有层。

  1. adam_beta1 (float, optional, defaults to 0.9):

AdamW优化器的beta1超参。

  1. adam_beta2 (float, optional, defaults to 0.999):

AdamW优化器的beta2超参。

  1. adam_epsilon (float, optional, defaults to 1e-8):

AdamW优化器的epsilon超参。

  1. max_grad_norm (float, optional, defaults to 1.0):

最大梯度范数(用于梯度剪裁)。

  1. num_train_epochs(float, optional, defaults to 3.0):

要执行的训练epoch的次数(如果不是整数,将执行停止训练前的最后一个epoch的小数部分百分比)。

  1. max_steps (int, optional, defaults to -1):

如果设置为正数,则表示要执行的训练step的次数。覆盖num_train_epochs。在使用有限可迭代数据集的情况下,训练可能在所有数据还没训练完成时因达到设定的步数而停止

  1. lr_scheduler_type (str or [SchedulerType], optional, defaults to "linear"):

选择什么类型的学习率调度器来更新模型的学习率。可选的值有:

  • "linear"
  • "cosine"
  • "cosine_with_restarts"
  • "polynomial"
  • "constant"
  • "constant_with_warmup"
  1. warmup_ratio (float, optional, defaults to 0.0):

线性预热从0达到learning_rate时,每步学习率的增长率。

  1. warmup_steps (int, optional, defaults to 0):

线性预热从0达到learning_rate时,预热阶段的步数,它会覆盖warmup_ratio的设置。

  1. log_level (str, optional, defaults to passive):

设置主进程上使用的日志级别。可选择的值:

  • 'debug'
  • 'info'
  • 'warning'
  • 'error'
  • 'critical'
  • 'passive'
  1. log_level_replica (str, optional, defaults to passive):

控制训练过程中副本节点的日志级别,设置参数和log_level一样。

  1. log_on_each_node (bool, optional, defaults to True):

在多节点分布式训练中,是每个节点使用“log_level”进行一次日志记录,还是仅在主节点。

  1. logging_dir (str, optional):

日志目录,默认记录在:output_dir/runs/CURRENT_DATETIME_HOSTNAME。

  1. logging_strategy (str or [~trainer_utils.IntervalStrategy], optional, defaults to "steps"):

训练期间采用的日志策略,可选的值有:

  • "no":训练期间不记录日志
  • "steps":每一个logging_steps阶段之后都记录日志
  • "epoch":每一个epoch之后记录日志
  1. logging_first_step (bool, optional, defaults to False):

global_step 表示训练的全局步数。当训练开始时,global_step 被初始化为 0,每次更新模型时,global_step 会自动递增。是否打印日志和评估第一个global_step

  1. logging_steps (int, optional, defaults to 500):

如果 logging_strategy="steps",则两个日志中更新step的数量。

  1. logging_nan_inf_filter (bool, optional, defaults to True):

是否在日志中过滤掉 naninf 损失,如果设置为 True,每步的损失如果是 nan或者inf将会被过滤,将会使用平均损失记录在日志当中。

  1. save_strategy (str or [~trainer_utils.IntervalStrategy], optional, defaults to "steps"):

训练过程中,checkpoint的保存策略,可选择的值有:

  • "no":训练过程中,不保存checkpoint
  • "epoch":每个epoch完成之后保存checkpoint
  • "steps":每个save_steps完成之后checkpoint
  1. save_steps (int, optional, defaults to 500):

如果save_strategy="steps",则两个checkpoint 保存的更新步骤数

  1. save_total_limit (int, optional):

如果设置了值,则将限制checkpoint的总数量,output_dir里面超过数量的老的checkpoint将会被删掉。

  1. save_on_each_node (bool, optional, defaults to False):

当进行多节点分布式训练,是否在每个节点上保存模型和checkpoint还是仅仅在主节点上保存。当不同节点使用相同的存储时,不应激活此选项,因为文件将以相同的名称保存到每个节点

  1. no_cuda (bool, optional, defaults to False):

当有CUDA可以使用时,是否不使用CUDA

37、seed (int, optional, defaults to 42):

训练开始时设置的随机种子,为了确保整个运行的可再现性,可使用~Trainer.model_init函数来初始化模型的随机初始化参数。

  1. data_seed (int, optional):

数据采样器的随机种子,它将用于数据采样器的可重现性,其独立于模型种子。

  1. jit_mode_eval (bool, optional, defaults to False):

是否使用PyTorch jit trace来进行推理。

  1. use_ipex (bool, optional, defaults to False):

当PyTorch 的intel扩展可用时,是否使用。

  1. bf16 (bool, optional, defaults to False):

是否使用bf16 16位 (mixed) 精度训练替代32位训练. 要求Ampere或者更高的NVIDIA架构,或者使用CPU训练。

  1. fp16 (bool, optional, defaults to False):

是否使用bf16 16位 (mixed) 精度训练替代32位训练。

  1. fp16_opt_level (str, optional, defaults to 'O1'):

fp16训练时, Apex AMP 优化级别选择,可选择的值有: ['O0', 'O1', 'O2', 'O3']Apex 是 NVIDIA 开发的一个混合精度训练和优化工具库,主要用于加速深度学习模型的训练过程。

  1. fp16_backend (str, optional, defaults to "auto"):

此参数已经废弃,使用half_precision_backend替代。

  1. half_precision_backend (str, optional, defaults to "auto"):

半精度计算的后端实现,必须是这几个值:

  • "auto":具体是使用CPU/CUDA AMP 还是APEX依赖于PyTorch版本检测
  • "cuda_amp"
  • "apex"
  • "cpu_amp"
  1. bf16_full_eval (bool, optional, defaults to False):

是否使用完整的bfloat16评估而不是32位。这将更快并节省内存,但可能会造成指标的损伤。

  1. fp16_full_eval (bool, optional, defaults to False):

是否使用完整的float16评估而不是32位。这将更快并节省内存,但可能会造成指标的损伤。

  1. tf32 (bool, optional):

是否启用TF32 模式,可以在Ampere 和更新的GPU架构上使用,默认值依赖于PyTorch的torch.backends.cuda.matmul.allow_tf32的默认值。

  1. local_rank (int, optional, defaults to -1):

分布式训练中进程的编号。在分布式训练中,每个进程(一般对应支持多线程的 GPU 卡)都会有一个特定的 local_rank,用于标识该进程对应的 GPU 编号。local_rank 的起始编号为 0,后续的编号依次递增。

  1. xpu_backend (str, optional):

xpu分布式训练中的后端,只能是 "mpi" 或者 "ccl"其中之一。

  1. tpu_num_cores (int, optional):

当使用TPU训练时,TPU核心数 (自动通过启动脚本传递)。

  1. dataloader_drop_last (bool, optional, defaults to False):

是否删除最后一个不完整的批次(如果数据集的长度不能被批次大小整除)。

  1. eval_steps (int, optional):

如果 evaluation_strategy="steps",两个评估之间更新step的数量Number of update steps,如果没有设置,则使用与 logging_steps一样的值。

  1. dataloader_num_workers (int, optional, defaults to 0):

数据加载的子进程数量(用于PyTorch ). 0表示数据由主进程加载

55、past_index (int, optional, defaults to -1):

有些模型比如[TransformerXL](../model_doc/transformerxl)或者[XLNet](../model_doc/xlnet)使用过去隐藏状态进行预测。如果这个参数设置为正数,则 Trainer使用相应的输出(通常是索引2)作为过去的状态,并将其作为 mems参数提供给模型的下一个训练step。

  1. run_name (str, optional):

运行描述符。通常用于[wandb](https://www.wandb.com/)以及[mlflow](https://www.mlflow.org/)日志记录。

  1. disable_tqdm (bool, optional):

是否禁用在Jupyter Notebooks中由~notebook.NotebookTrainingTracker生成的tqdm进度条和指标表格。如果日志级别设置为warn或者更低的基本则默认值为True,否则为False

  1. remove_unused_columns (bool, optional, defaults to True):

是否自动删除模型forward方法不使用的列 (TFTrainer暂时还没有实现该功能)。

  1. label_names (List[str], optional):

我们的输入字典的key列表相一致的标签,最终都将默认为["labels"],除非使用XxxForQuestionAnswering系列的模型,该系列的模型最终默认为["start_positions", "end_positions"]

  1. load_best_model_at_end (bool, optional, defaults to False):

是否在训练结束时加载训练期间发现的最佳模型。当设置为“True”时,参数“save_strategy”需要与“evaluation_strategy”相同,并且在这种情况下, "steps"和 save_steps 必须是eval_steps的整数倍.

  1. metric_for_best_model (str, optional):

load_best_model_at_end一起使用,指定用于比较两个不同模型。必须是评估返回的度量的名称,带或不带前缀“eval_”。如果没有设定且load_best_model_at_end=True,则默认使用 "loss",如果我们设置了这个值,则greater_is_better需要设置为 True。如果我们的度量在较低时更好,请不要忘记将其设置为“False”。

  1. greater_is_better (bool, optional):

load_best_model_at_endmetric_for_best_model一起使用,说明好的模型是否应该有更好的度量值。

默认值:True:如果metric_for_best_model设置了值,并且该值不是loss 或者 eval_loss;否则,False:如果metric_for_best_model没有设置值,或者该值是"loss"或者 "eval_loss".

  1. ignore_data_skip (bool, optional, defaults to False):

当恢复训练时,是否跳过之前训练时epoch和batch加载的数据,如果设置为True, 训练将会更快的开始,但是也不会产生与中断训练生成的相同的结果。

64、sharded_ddp (bool, str or list of [~trainer_utils.ShardedDDPOption], optional, defaults to False):

是否启用分片式分布式数据并行(Sharded Distributed Data Parallel,简称ShardedDDP),以加快训练速度和效率。可选项有:

  • "simple":
  • "zero_dp_2"
  • "zero_dp_3"
  • "offload"

如果入参是字符串,它将会使用空格进行分隔,如果入参是了bool,它将被转换为空“False”的列表和["simple"]的“True”列表。

  1. fsdp (bool, str or list of [~trainer_utils.FSDPOption], optional, defaults to False):

使用PyTorch 分布式并行训练(仅仅用在分布式训练)。可选项:

  • full_shard
  • shard_grad_op
  • offload
  • auto_wrap:使用 default_auto_wrap_policy自动递归
  1. fsdp_min_num_params (int, optional, defaults to 0):

用于指定使用 Fully Sharded Data Parallel (FSDP)时,最小可分片的参数数量。(仅在传递“fsdp”字段时有用)

  1. deepspeed (str or dict, optional):

使用Deepspeed。这是一个实验性功能,其API可能在未来发展。该值可以是DeepSpeed JSON配置文件的位置(例如,ds_config.json),也可以是已加载的JSON文件,作为一个dict。

  1. label_smoothing_factor (float, optional, defaults to 0.0):

要使用的标签平滑因子。它的取值范围在 0 到 1 之间。当 label_smoothing_factor 的值为 0 时,表示不使用标签平滑技术,此时模型接受到完整的 one-hot 标签,当 label_smoothing_factor 的值大于 0 时,表示使用标签平滑技术,此时真实标签将是一个加权平均值,其中每个标签的概率都等于 (1-label_smoothing_factor)/num_classes,其中 num_classes 表示标签的数量。

  1. debug (str or list of [~debug_utils.DebugOption], optional, defaults to ""):

启用一个或多个调试功能。这是一个实验特性。可选项有:

  • underflow_overflow:检测模型的输入/输出中的溢出,并报告导致事件的最后一帧
  • tpu_metrics_debug:在TPU上打印度量 这些选项通过空格进行分隔。
  1. optim (str or [training_args.OptimizerNames], optional, defaults to "adamw_hf"):

可以使用的优化器:

  • adamw_hf
  • adamw_torch
  • adamw_apex_fused
  • adafactor
  1. adafactor (bool, optional, defaults to False):

此参数已经废弃,使用 --optim adafactor 替代

  1. group_by_length (bool, optional, defaults to False):

是否将训练数据集中长度大致相同的样本分组在一起(以最大限度地减少所应用的填充并提高效率)。仅在应用动态填充时有用。

  1. length_column_name (str, optional, defaults to "length"):

预计算列名的长度,如果列存在,则在按长度分组时使用这些值,而不是在训练启动时计算这些值。例外情况是:group_by_length设置为true,且数据集是Dataset的实例

  1. report_to (str or List[str], optional, defaults to "all"):

报告结果和日志的integration列表,支持的平台有:"azure_ml", "comet_ml", "mlflow", "tensorboard""wandb". 使用 "all"则报告到所有安装的integration,配置为"none"则不报报告到任何的integration。

  1. ddp_find_unused_parameters (bool, optional):

使用分布式训练时,通过find_unused_parameters把该值传递给DistributedDataParallel。如果使用梯度gradient checkpoint,则默认为false,否则为true。

  1. ddp_bucket_cap_mb (int, optional):

使用分布式训练时,传递给“DistributedDataParallel”的标志“bucket_cap_mb”的值。

  1. dataloader_pin_memory (bool, optional, defaults to True):

当设置为True 时,在数据加载过程中,batch 数据会被放入 CUDA 中固定的固定内存,从而避免了从主内存到 GPU 内存的冗余拷贝开销,提升了数据读取的效率。

  1. skip_memory_metrics (bool, optional, defaults to True):

是否跳过将内存探查器报告添加到度量中。默认情况下会跳过此操作,因为它会降低训练和评估速度。

  1. push_to_hub (bool, optional, defaults to False):

每次当模型保存的时候,是否把模型推送到Hub。

80、resume_from_checkpoint (str, optional):

一个包含模型有效检查点的文件夹路径。这个参数不会被[Trainer]直接使用,而是打算由你的训练/评估脚本来使用。

  1. hub_model_id (str, optional):

与本地的 output_dir保持同步的仓库名称。它可以是将会推送到我们的命名空间里的一个非常简单的模型ID . 否则它将需要完整的仓库名称,比如 "user_name/model",它允许我们推送到一个我们是一个组织的成员之一("organization_name/model")的仓库。默认设置为user_name/output_dir_name,其中output_dir_nameoutput_dir的值.

  1. hub_strategy (str or [~trainer_utils.HubStrategy], optional, defaults to "every_save"):

定义推送到hub的内容的范围以及何时推送到hub,可能的值有:

  • end:当~Trainer.save_model方法被调用的时候,会推送模型,推送它的配置、tokenizer(如果传给了Trainer)和model card 的草稿。
  • every_save:在每次模型保存的时候,都会推送,推送它的配置、tokenizer(如果传给了Trainer)和model card 的草稿。推送是异步的,不会影响模型的训练,如果模型保存的非常频繁,则新的推送只会在旧的推送完成之后进行推送,最后的一个推送是在模型训练完成之后
  • checkpoint:类似于 "every_save",只是最后一个 checkpoint会被推送到名字为 last-checkpoint的子目录,它将方便我们使用 trainer.train(resume_from_checkpoint="last-checkpoint")重新开始训练。
  • all_checkpoints: 类似于 "checkpoint" ,只是所有的checkpoints都推送,就像它们出现在输出目录一样 (这样你就可以在最终的仓库里面获取每一个checkpoint)
  1. hub_token (str, optional):

用于将模型推送到Hub的token。默认将使用huggingface-cli login获得的缓存文件夹中的令牌。

  1. hub_private_repo (bool, optional, defaults to False):

如果为True, Hub repo将会被设置为私有的。

  1. gradient_checkpointing (bool, optional, defaults to False):

如果为True,则使用梯度检查点以节省内存为代价降低向后传递速度。

  1. include_inputs_for_metrics (bool, optional, defaults to False):

是否将输入传递给“compute_metrics”函数。这适用于需要在Metric类中进行评分计算的输入、预测和参考的度量。

  1. auto_find_batch_size (bool, optional, defaults to False)

是否通过指数衰减自动找到适合内存的batch size,避免CUDA内存不足错误.需要安装 accelerate (pip install accelerate)。

  1. full_determinism (bool, optional, defaults to False)

如果为 True,则使用enable_full_determinism替代set_seed来确保在分布式训练下获得可重复的结果。

  1. torchdynamo (str, optional):

用于设置TorchDynamo后端编译器的token。可能的选择是[“eager”,“nvfuser]。这是一个实验性API,可能会更改。

  1. ray_scope (str, optional, defaults to "last"):

Ray Tune 是一个开元的分布式超参数优化库,可以用于自动搜索最佳的超参数配置,以及并行化训练作业。使用Ray进行超参搜索的范围。

常用参数

  • model_type
  • model_name_or_path
  • train_file_dir
  • validation_file_dir
  • per_device_train_batch_size
  • per_device_eval_batch_size
  • do_train
  • do_eval
  • modules_to_save
  • deepspeed
  • use_peft
  • qlora
  • peft_path
  • resume_from_checkpoint
  • load_in_8bit
  • load_in_4bit
  • seed
  • fp16
  • max_train_samples
  • max_eval_samples
  • num_train_epochs
  • learning_rate
  • warmup_ratio
  • weight_decay
  • logging_strategy
  • logging_steps
  • eval_steps
  • evaluation_strategy
  • save_steps
  • save_strategy
  • save_total_limit
  • gradient_accumulation_steps
  • preprocessing_num_workers
  • block_size
  • output_dir
  • overwrite_output_dir
  • ddp_timeout
  • logging_first_step
  • target_modules
  • lora_rank
  • lora_alpha
  • lora_dropout
  • torch_dtype
  • device_map
  • report_to
  • ddp_find_unused_parameters
  • gradient_checkpointing
  • cache_dir

参考

[1] https://github.com/huggingface/transformers/blob/06343b06335a1f8417bd32d3ffc7cf2cca9a24ac/src/transformers/training_args.py

[2] https://github.com/shibing624/MedicalGPT/tree/main

[3] https://blog.csdn.net/duzm200542901104/article/details/132762582

相关推荐

其实TensorFlow真的很水无非就这30篇熬夜练

好的!以下是TensorFlow需要掌握的核心内容,用列表形式呈现,简洁清晰(含表情符号,<300字):1.基础概念与环境TensorFlow架构(计算图、会话->EagerE...

交叉验证和超参数调整:如何优化你的机器学习模型

准确预测Fitbit的睡眠得分在本文的前两部分中,我获取了Fitbit的睡眠数据并对其进行预处理,将这些数据分为训练集、验证集和测试集,除此之外,我还训练了三种不同的机器学习模型并比较了它们的性能。在...

机器学习交叉验证全指南:原理、类型与实战技巧

机器学习模型常常需要大量数据,但它们如何与实时新数据协同工作也同样关键。交叉验证是一种通过将数据集分成若干部分、在部分数据上训练模型、在其余数据上测试模型的方法,用来检验模型的表现。这有助于发现过拟合...

深度学习中的类别激活热图可视化

作者:ValentinaAlto编译:ronghuaiyang导读使用Keras实现图像分类中的激活热图的可视化,帮助更有针对性...

超强,必会的机器学习评估指标

大侠幸会,在下全网同名[算法金]0基础转AI上岸,多个算法赛Top[日更万日,让更多人享受智能乐趣]构建机器学习模型的关键步骤是检查其性能,这是通过使用验证指标来完成的。选择正确的验证指...

机器学习入门教程-第六课:监督学习与非监督学习

1.回顾与引入上节课我们谈到了机器学习的一些实战技巧,比如如何处理数据、选择模型以及调整参数。今天,我们将更深入地探讨机器学习的两大类:监督学习和非监督学习。2.监督学习监督学习就像是有老师的教学...

Python教程(三十八):机器学习基础

...

Python 模型部署不用愁!容器化实战,5 分钟搞定环境配置

你是不是也遇到过这种糟心事:花了好几天训练出的Python模型,在自己电脑上跑得顺顺当当,一放到服务器就各种报错。要么是Python版本不对,要么是依赖库冲突,折腾半天还是用不了。别再喊“我...

超全面讲透一个算法模型,高斯核!!

...

神经网络与传统统计方法的简单对比

传统的统计方法如...

AI 基础知识从0.1到0.2——用“房价预测”入门机器学习全流程

...

自回归滞后模型进行多变量时间序列预测

下图显示了关于不同类型葡萄酒销量的月度多元时间序列。每种葡萄酒类型都是时间序列中的一个变量。假设要预测其中一个变量。比如,sparklingwine。如何建立一个模型来进行预测呢?一种常见的方...

苹果AI策略:慢哲学——科技行业的“长期主义”试金石

苹果AI策略的深度原创分析,结合技术伦理、商业逻辑与行业博弈,揭示其“慢哲学”背后的战略智慧:一、反常之举:AI狂潮中的“逆行者”当科技巨头深陷AI军备竞赛,苹果的克制显得格格不入:功能延期:App...

时间序列预测全攻略,6大模型代码实操

如果你对数据分析感兴趣,希望学习更多的方法论,希望听听经验分享,欢迎移步宝藏公众号...

AI 基础知识从 0.4 到 0.5—— 计算机视觉之光 CNN

...

取消回复欢迎 发表评论: