『paddle』paddleseg 学习笔记:模型训练


模型训练

我们可以通过 PaddleSeg 提供的脚本对模型进行训练,请确保完成了 PaddleSeg 的安装工作,并且位于 PaddleSeg 目录下,执行以下脚本:

export CUDA_VISIBLE_DEVICES=0 	# 设置 1 张可用的卡
# set CUDA_VISIBLE_DEVICES=0	# windows下请执行此命令
python train.py \
       --config configs/quick_start/bisenet_optic_disc_512x512_1k.yml \
       --do_eval \
       --use_vdl \
       --save_interval 500 \
       --save_dir output

训练参数解释

参数名用途是否必选项默认值
iters训练迭代次数配置文件中指定值
batch_size单卡batch size配置文件中指定值
learning_rate初始学习率配置文件中指定值
config配置文件-
save_dir模型和visualdl日志文件的保存根路径output
num_workers用于异步读取数据的进程数量, 大于等于1时开启子进程读取数据0
use_vdl是否开启visualdl记录训练数据
save_interval_iters模型保存的间隔步数1000
do_eval是否在保存模型时启动评估, 启动时将会根据mIoU保存最佳模型至best_model
log_iters打印日志的间隔步数10
resume_model恢复训练模型路径,如:output/iter_1000None

注意:如果想要使用多卡训练的话,需要将环境变量 CUDA_VISIBLE_DEVICES 指定为多卡(不指定时默认使用所有的gpu),并使用 paddle.distributed.launch 启动训练脚本(windows下由于不支持nccl,无法使用多卡训练):

export CUDA_VISIBLE_DEVICES=0,1,2,3 	# 设置 4 张可用的卡
python -m paddle.distributed.launch train.py \
       --config configs/quick_start/bisenet_optic_disc_512x512_1k.yml \
       --do_eval \
       --use_vdl \
       --save_interval 500 \
       --save_dir output

恢复训练:

python train.py \
       --config configs/quick_start/bisenet_optic_disc_512x512_1k.yml \
       --resume_model output/iter_500 \
       --do_eval \
       --use_vdl \
       --save_interval 500 \
       --save_dir output

训练可视化

PaddleSeg 会将训练过程中的数据写入 VisualDL 文件,并实时的查看训练过程中的日志,记录的数据包括:

  1. loss 变化趋势
  2. 学习率变化趋势
  3. 训练时间
  4. 数据读取时间
  5. mean IoU 变化趋势(当打开了 do_eval 开关后生效)
  6. mean pixel Accuracy 变化趋势(当打开了 do_eval 开关后生效)

使用如下命令启动 VisualDL 查看日志

# 下述命令会在127.0.0.1上启动一个服务,支持通过前端 web 页面查看,可以通过 --host 这个参数指定实际 ip 地址
visualdl --logdir output/

在浏览器输入提示的网址,效果如下:

### 使用 PaddleHub 进行机器学习分类任务 #### 背景概述 在大数据环境中,新闻文本分类是一项重要任务,其准确性直接影响到诸如信息检索和个人化推荐等应用的表现。为了提升这一过程的效果和效率,可以借助 PaddlePaddle 的模块——PaddleHub 和 ERNIE 预训练模型完成优化工作[^2]。 #### 工具简介 PaddleHub 是一个基于飞桨 (PaddlePaddle) 开发的预训练模型应用工具库,支持多种常见任务如图像分类、目标检测以及自然语言处理中的文本生成等。对于文本分类任务而言,ERNIE 模型因其强大的语义理解能力而成为理想的选择之一[^3]。 #### 环境搭建与依赖安装 在开始实际操作前,需确保已正确设置好 Python 环境并更新至最新版 PaddleHub: ```bash pip install --upgrade paddlehub -i https://pypi.tuna.tsinghua.edu.cn/simple ``` 如果项目有特定版本需求,则可指定安装相应版本号: ```bash pip install paddlehub==1.6.2 -i https://pypi.tuna.tsinghua.edu.cn/simple ``` #### 实战教程:构建新闻文本分类器 以下是具体实现步骤: 1. **加载数据集** 假设已有标注好的新闻数据集合 `news_dataset.csv` 文件,其中包含两列分别为文章内容 (`content`) 及类别标签 (`label`)。 2. **定义输入特征转换函数** 将原始字符串转化为适合喂入神经网络的形式。 ```python import pandas as pd def preprocess_data(df): texts = df['content'].tolist() labels = df['label'].astype(int).values.tolist() return texts, labels dataset_df = pd.read_csv('./data/news_dataset.csv') train_texts, train_labels = preprocess_data(dataset_df[:int(len(dataset_df)*0.8)]) val_texts, val_labels = preprocess_data(dataset_df[int(len(dataset_df)*0.8):]) ``` 3. **引入ERNIE模型作为基础架构** 利用 PaddleHub 提供的功能快速获取所需 NLP 模型实例。 ```python import paddlehub as hub module = hub.Module(name="ernie_tiny") # 更轻量化的变体适用于资源受限场景下实验验证 inputs, outputs, program = module.context(trainable=True) pooled_output = outputs["pooled_output"] ``` 4. **设计下游任务结构** 构建全连接层用于映射高层抽象表示向最终输出空间转变。 ```python from paddle.fluid.layers import fc num_classes = max(val_labels)+1 cls_fc = fc(input=pooled_output, size=num_classes, act='softmax', param_attr=fluid.ParamAttr(initializer=fluid.initializer.TruncatedNormal(scale=0.02)), bias_attr=fluid.ParamAttr(initializer=fluid.initializer.Constant(value=0.))) ``` 5. **设定损失计算方式及评估指标** 对于多类别的监督学习问题通常采用交叉熵衡量差异程度;同时可通过精确率(Precision),召回率(Recall) 或 F1-Score 来综合考量整体表现效果。 ```python label_holder = fluid.data(name="label", shape=[None], dtype="int64") cost = fluid.layers.cross_entropy(input=cls_fc, label=label_holder) avg_cost = fluid.layers.mean(x=cost) acc = fluid.layers.accuracy(input=cls_fc, label=label_holder) ``` 6. **执行训练流程** 结合上述组件编写完整的程序逻辑控制循环迭代直至收敛满足预期条件为止。 ```python optimizer = fluid.optimizer.AdamOptimizer(learning_rate=5e-5) optimizer.minimize(avg_cost) exe.run(fluid.default_startup_program()) feeder = fluid.DataFeeder(place=place, feed_list=[inputs["input_ids"], inputs["position_ids"], inputs["segment_ids"], inputs["attention_mask"], label_holder]) for epoch_id in range(num_epochs): ... ``` 7. **保存最佳权重参数文件以便后续部署调用** --- 通过以上方法即可顺利完成一次典型的基于深度学习框架下的文本分类案例实践[^1]。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

libo-coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值