【项目实训】项目工作日志(六)

项目工作日志(六)

引言

在前一部分的工作中,我们完成了数据预处理和巡航模型的定义。接下来,我们将集中在模型的训练与评估上,确保我们的巡航系统能够准确有效地识别道路和障碍物。本部分记录了模型训练和评估的详细步骤和代码示例。

模型训练

模型训练是整个项目的核心步骤,通过训练,我们可以得到一个能够识别道路和障碍物的巡航模型。以下是训练模型的步骤:

  1. 导入所需库
    首先,我们需要导入PaddlePaddle及相关库:
# 导入paddle相关库
import paddle
from paddle.io import DataLoader
from paddle.vision.transforms import Compose, Resize, Normalize, ToTensor

# 导入自定义的数据集类
from my_dataset import MyDataSet
  1. 配置路径和获取函数
    配置训练和评估的路径,定义获取数据路径和模型路径的函数:
import cv2, os, glob

# 配置相关和获取函数
train_cfg = {
    "train_paths": [["./data/image_set","data.json"], ],
    "eval_paths": [["./data/image_set","data.json"], ],
    "num_workers": 0,
    "infer_dir": "./model/cnn23/inference",
    "model_save_dir": "./model/cnn23/dymic",
    "model_params_name": "cnn_lane.pdparams",
    "model_opt_name": "cnn_lane.pdopt",
    "model_checkpoint_name": "cnn_lane.pkl",
    "train_batch_size": 256,
    "eval_batch_size": 256,
    "lr": 0.001,
    "epochs": 100,
    "input_size": [128, 128],
}

def get_data_paths():
    # 数据集路径
    train_paths = train_cfg["train_paths"]
    eval_paths = train_cfg["eval_paths"]
    return train_paths, eval_paths

def get_last_model_name():
    import glob
    model_save_dir = train_cfg["model_save_dir"]
    models_list = glob.glob(model_save_dir + "/*")
    models_list.sort()
    if len(models_list) == 0:
        raise RuntimeError("no model to infer, at " + model_save_dir)
    last_name = os.path.split(models_list[-1])[-1]
    return last_name

def get_model_path(file_name):
    # 模型保存路径
    model_save_dir = train_cfg["model_save_dir"]
    model_params_path = os.path.join(model_save_dir, file_name, train_cfg["model_params_name"])
    model_opt_path = os.path.join(model_save_dir, file_name, train_cfg["model_opt_name"])
    checkpoint_path = os.path.join(model_save_dir, file_name, train_cfg["model_checkpoint_name"])
    return model_params_path, model_opt_path, checkpoint_path

def get_infer_path(file_name):
    # 模型保存路径
    infer_save_dir = train_cfg["infer_dir"]
    infer_save_path = os.path.join(infer_save_dir, file_name, "cnn_lane")
    return infer_save_path

3.模型定义
在数据预处理完成后,我们需要定义巡航模型。以下是模型定义的示例代码:

# 导入paddle相关库
import paddle
from paddle import nn

# 定义巡航模型
class CnnModel(nn.Layer):
    # 定义模型
    def __init__(self):
        super(CnnModel, self).__init__()
        self.features = nn.Sequential(
            nn.Conv2D(3, 32, 5, stride=2),
            nn.ReLU(),
            nn.MaxPool2D(2, 2),
            nn.Conv2D(32, 64, 5, stride=2),
            nn.ReLU(),
            nn.MaxPool2D(2, 2),
            nn.Conv2D(64, 128, 5, stride=2),
            nn.ReLU(),
            nn.MaxPool2D(2, 2)
        )
        self.fc = nn.Sequential(
            nn.Linear(128 * 6 * 6, 256),
            nn.ReLU(),
            nn.Dropout(0.5),
            nn.Linear(256, 128),
            nn.ReLU(),
            nn.Dropout(0.5),
            nn.Linear(128, 10)
        )

    def forward(self, x):
        x = self.features(x)
        x = x.flatten(start_axis=1)
        x = self.fc(x)
        return x

4.总结
通过以上步骤,我们完成了数据预处理和巡航模型的定义。接下来,我们将进行模型的训练和评估,以确保模型的有效性和准确性。
5.下一步
在下一篇博客中,我们将详细记录模型的训练过程和评估方法,确保模型在训练数据和验证数据上都能够取得良好的表现。敬请期待更多详细内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

弈yi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值