一、项目全景:回归任务替代分类

整个项目的核心流程如下:

图像数据加载 → 数据增强 → CNN特征提取 → 回归预测(2个连续数值) → 训练/评估/导出

关键区别

  • 上一个是语义分割(逐像素二分类),用 BiSeNetV2

  • 这一个是回归(预测连续值),用自定义的简单 CNN


二、逐模块详解

1. 自定义数据集类 MyDataSet

class MyDataSet(Dataset):
    def __init__(self, data_paths, transform=None):
        # 从 JSON 中读取图片路径和标签
        # 标签格式:label = data["state"],例如 [速度, 转向角]

关键点

  • 标签不是单一类别,而是一个列表 [值1, 值2]

  • 在 __getitem__ 中,取 label[1:] 表示跳过第一个值,只用后续值作为回归目标

  • 支持 load_alldata() 一次性将所有图片加载到内存,加速训练(适合小型数据集)

2. 自定义数据增强函数

代码实现了丰富的图像增强,全部手写,没有依赖任何第三方库:

def apply_hue(img):      # 色调变换(RGB ↔ YIQ 色彩空间转换)
def apply_saturation(img): # 饱和度调整
def apply_contrast(img):   # 对比度调整
def apply_brightness(img): # 亮度调整
def apply_hflip(img):      # 水平翻转(同时标签取反,模拟对称操作)

亮点:水平翻转的标签对称处理

if id==4:  # 水平翻转
    label = 0 - label  # 转向角度取反

这个设计非常巧妙——当图像水平翻转后,原本"左转"的场景就变成了"右转",对应的转向角度应该取反。这体现了数据增强必须与标签同步变换的原则。

3. CNN 模型架构 CnnModel

class CnnModel(nn.Layer):
    def __init__(self):
        self.features = nn.Sequential(
            nn.Conv2D(3, 32, 5, stride=2),   # 128→62
            nn.ReLU(),
            nn.Conv2D(32, 32, 5, stride=2),  # 62→29
            nn.ReLU(),
            nn.Conv2D(32, 64, 5, stride=2),  # 29→13
            nn.ReLU(),
            nn.Conv2D(64, 64, 3, stride=2),  # 13→6
            nn.ReLU(),
            nn.Conv2D(64, 128, 3, stride=1), # 6→4
            nn.ReLU(),
            nn.Dropout(p=0.1),
            nn.Conv2D(128, 128, 3, stride=1),# 4→2
            nn.ReLU(),
            nn.Dropout(p=0.1),
            nn.Flatten(),                    # 128×2×2 = 512
            nn.Linear(512, 128),
            nn.LeakyReLU(),
            nn.Linear(128, 32),
            nn.LeakyReLU(),
            nn.Dropout(p=0.1),
            nn.Linear(32, 2),               # 最终输出2个值
        )

设计特点

  • 纯卷积 + 全连接架构,没有残差连接等复杂设计

  • 输入 128×128 图像,经过6层卷积逐步压缩到 2×2 特征图

  • 通道数逐步增加:3 → 32 → 64 → 128

  • 使用 Dropout 防止过拟合(小数据集尤其重要)

  • 最后全连接层输出 2个值(对应两个回归目标)

  • 使用 LeakyReLU 而不是普通 ReLU,避免"神经元死亡"问题

  • 没有最后的 Tanh 激活(被注释掉了),输出是无界实数

4. 训练函数 train() 的精细设计

def train():
    # 分段学习率衰减
    learning_rate = optimizer.lr.PiecewiseDecay(
        boundaries=[100, 400], 
        values=[0.001, 0.0001, 0.00001]
    )
    opt = optimizer.Adam(learning_rate=learning_rate, parameters=cnn_model.parameters())
    
    # 损失函数
    loss_fn = nn.L1Loss()  # MAE 平均绝对误差

为什么用 L1Loss?

  • L1 Loss(MAE)= 1n∑∣ypred−ytrue∣n1​∑∣ypred​−ytrue​∣

  • 相比 L2 Loss(MSE),L1 对异常值不那么敏感,梯度稳定

  • 适合回归任务,尤其是有噪声的实际传感器数据

分段学习率策略

epoch  0-100:  lr = 0.001
epoch 100-400: lr = 0.0001
epoch 400-200:  lr = 0.00001

这是经典的三段式衰减:先用大学习率快速收敛,再逐步精细化。

训练日志设计

# CSV 日志记录
writer.writerow([epoch_id, 'train', loss_mae, ''])
writer.writerow([epoch_id, 'eval', loss_mae, loss_mse])

每10个epoch在验证集上同时计算 MAE 和 MSE,便于监控过拟合。

5. 动态图转静态图 save_jit()

def save_jit():
    cnn_model.eval()
    layer = jit.to_static(cnn_model, 
        input_spec=[paddle.static.InputSpec(shape=[None, 3, 128, 128], dtype='float32')])
    jit.save(layer, infer_path)

通过 paddle.jit.to_static 将动态图模型转为静态图,导出为推理模型,可部署到生产环境。


三、核心网络知识:回归任务的 CNN

分类 vs 回归

对比维度 分类任务 回归任务
输出 离散类别(如"猫/狗") 连续数值(如"角度30°")
最后一层激活 Softmax 无(或 Linear)
损失函数 CrossEntropyLoss L1Loss / MSELoss
评估指标 准确率 MAE / MSE
典型应用 图像识别 自动驾驶控制

为什么 CNN 可以做回归?

CNN 本质是一个函数逼近器

通过卷积提取图像特征,全连接层将特征映射到目标数值。与分类唯一的不同是最后一层没有 Sigmoid/Softmax,输出直接就是连续值。

这种架构在自动驾驶中的学名

这就是著名的 端到端驾驶(End-to-End Driving) 范式,由 NVIDIA 在2016年首次提出。其核心理念是:

不检测车道线、不识别障碍物,直接从图像映射到控制指令。

他们的模型结构(后来被称为 "NVIDIA CNN")与这段代码非常相似,都是卷积层渐进压缩 + 全连接层输出控制值。


四、训练过程观察

从输出的训练日志来看:

epoch 150, eval avg_mae_loss: 0.0285, avg_mse_loss: 0.0077
epoch 160, eval avg_mae_loss: 0.0293, avg_mse_loss: 0.0085
epoch 170, eval avg_mae_loss: 0.0291, avg_mse_loss: 0.0085
epoch 180, eval avg_mae_loss: 0.0291, avg_mse_loss: 0.0084
epoch 190, eval avg_mae_loss: 0.0289, avg_mse_loss: 0.0084

验证集 MAE 稳定在约 0.029,训练集 MAE 约 0.016~0.017。存在一定 gap,说明模型有轻微的过拟合趋势,但验证损失没有上升,说明 Dropout 正则化起到了作用。


五、总结框图

六、核心源码

{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-04-16T06:19:15.351258Z",
     "iopub.status.busy": "2026-04-16T06:19:15.350703Z",
     "iopub.status.idle": "2026-04-16T06:19:15.663514Z",
     "shell.execute_reply": "2026-04-16T06:19:15.662740Z",
     "shell.execute_reply.started": "2026-04-16T06:19:15.351208Z"
    },
    "scrolled": true,
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data264550  datasets  image_set_lane  image_set_lane_eval  loss_log.csv\r\n"
     ]
    }
   ],
   "source": [
    "# 解压数据\n",
    "! ls ./data\n",
    "# ! unzip -q -o ./data/data264550/image_set.zip -d ./data\n",
    "# ! unzip -q -o /home/aistudio/data/datasets/374495/smart_car_cnn/image_set_lane.zip -d ./data\n",
    "# ! unzip -q -o /home/aistudio/data/datasets/374495/smart_car_cnn/image_set_lane_eval.zip -d ./data\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-04-16T06:19:15.665384Z",
     "iopub.status.busy": "2026-04-16T06:19:15.665057Z",
     "iopub.status.idle": "2026-04-16T06:19:15.672502Z",
     "shell.execute_reply": "2026-04-16T06:19:15.672001Z",
     "shell.execute_reply.started": "2026-04-16T06:19:15.665357Z"
    },
    "jupyter": {
     "outputs_hidden": false
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "import cv2, os, glob\n",
    "# 配置相关和获取函数\n",
    "train_cfg = {\n",
    "    \"train_paths\": [[\"./data/image_set_lane\",\"data.json\"], ],\n",
    "    \"eval_paths\": [[\"./data/image_set_lane_eval\",\"data.json\"], ],\n",
    "    \"num_workers\": 0,\n",
    "    \"infer_dir\": \"./model/cnn23/inference\",\n",
    "    \"model_save_dir\": \"./model/cnn23/dymic\",\n",
    "    \"model_params_name\": \"cnn_lane.pdparams\",\n",
    "    \"model_opt_name\": \"cnn_lane.pdopt\",\n",
    "    \"model_checkpoint_name\": \"cnn_lane.pkl\",\n",
    "    \"train_batch_size\": 256,\n",
    "    \"eval_batch_size\": 256,\n",
    "    \"lr\": 0.001,\n",
    "    \"epochs\": 200,\n",
    "    \"input_size\": [128, 128],\n",
    "}\n",
    "\n",
    "def get_data_paths():\n",
    "    # 数据集路径\n",
    "    train_paths = train_cfg[\"train_paths\"]\n",
    "    eval_paths = train_cfg[\"eval_paths\"]\n",
    "    return train_paths, eval_paths\n",
    "\n",
    "def get_last_model_name():\n",
    "    import glob\n",
    "    model_save_dir = train_cfg[\"model_save_dir\"]\n",
    "    models_list = glob.glob(model_save_dir + \"/*\")\n",
    "    models_list.sort()\n",
    "    if len(models_list) == 0:\n",
    "        raise RuntimeError(\"no model to infer, at \" + model_save_dir)\n",
    "    last_name = os.path.split(models_list[-1])[-1]\n",
    "    return last_name\n",
    "\n",
    "def get_model_path(file_name):\n",
    "    # 模型保存路径\n",
    "    model_save_dir = train_cfg[\"model_save_dir\"]\n",
    "    model_params_path = os.path.join(model_save_dir, file_name, train_cfg[\"model_params_name\"])\n",
    "    model_opt_path = os.path.join(model_save_dir, file_name, train_cfg[\"model_opt_name\"])\n",
    "    checkpoint_path = os.path.join(model_save_dir, file_name, train_cfg[\"model_checkpoint_name\"])\n",
    "    return model_params_path, model_opt_path, checkpoint_path\n",
    "\n",
    "def get_infer_path(file_name):\n",
    "    # 模型保存路径\n",
    "    infer_save_dir = train_cfg[\"infer_dir\"]\n",
    "    infer_save_path = os.path.join(infer_save_dir, file_name, \"cnn_lane\")\n",
    "    return infer_save_path"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-04-16T06:19:15.673349Z",
     "iopub.status.busy": "2026-04-16T06:19:15.673098Z",
     "iopub.status.idle": "2026-04-16T06:19:15.677759Z",
     "shell.execute_reply": "2026-04-16T06:19:15.677288Z",
     "shell.execute_reply.started": "2026-04-16T06:19:15.673329Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "# 导入paddle相关库\n",
    "import paddle\n",
    "from paddle import nn"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-04-16T06:19:15.678875Z",
     "iopub.status.busy": "2026-04-16T06:19:15.678496Z",
     "iopub.status.idle": "2026-04-16T06:19:15.701424Z",
     "shell.execute_reply": "2026-04-16T06:19:15.700929Z",
     "shell.execute_reply.started": "2026-04-16T06:19:15.678854Z"
    },
    "scrolled": true,
    "tags": []
   },
   "outputs": [],
   "source": [
    "# 定义巡航模型\n",
    "class CnnModel(nn.Layer):\n",
    "    # 定义模型\n",
    "    def __init__(self):\n",
    "        super(CnnModel, self).__init__()\n",
    "        self.features = nn.Sequential(\n",
    "            nn.Conv2D(3, 32, 5, stride=2),\n",
    "            nn.ReLU(),\n",
    "            \n",
    "            nn.Conv2D(32, 32, 5, stride=2),\n",
    "            nn.ReLU(),\n",
    "\n",
    "            nn.Conv2D(32, 64, 5, stride=2),\n",
    "            nn.ReLU(),\n",
    "\n",
    "            nn.Conv2D(64, 64, 3, stride=2),\n",
    "            nn.ReLU(),\n",
    "\n",
    "            nn.Conv2D(64, 128, 3, stride=1),\n",
    "            # nn.BatchNorm(32),\n",
    "            nn.ReLU(),\n",
    "\n",
    "            nn.Dropout(p=0.1),\n",
    "\n",
    "            nn.Conv2D(128, 128, 3, stride=1),\n",
    "            nn.ReLU(),\n",
    "            nn.Dropout(p=0.1),\n",
    "\n",
    "            nn.Flatten(),\n",
    "            nn.Linear(512, 128),\n",
    "            nn.LeakyReLU(),\n",
    "            nn.Linear(128, 32),\n",
    "            nn.LeakyReLU(),\n",
    "            nn.Dropout(p=0.1),\n",
    "            nn.Linear(32, 2),\n",
    "            # nn.Tanh()\n",
    "        )\n",
    "\n",
    "    def forward(self, inputs):\n",
    "        x = self.features(inputs)\n",
    "        return x\n",
    "\n",
    "from paddle.io import Dataset, DataLoader, ComposeDataset\n",
    "from paddle import to_tensor\n",
    "import os, json\n",
    "import random\n",
    "import cv2\n",
    "import numpy as np\n",
    "from PIL import Image\n",
    "\n",
    "# 定义数据增强手段\n",
    "def color_filter_autumn(img):\n",
    "    im_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)\n",
    "    im_color = cv2.applyColorMap(im_gray, cv2.COLORMAP_AUTUMN)\n",
    "    return im_color\n",
    "\n",
    "\n",
    "def color_filter_bone(img):\n",
    "    im_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)\n",
    "    im_color = cv2.applyColorMap(im_gray, cv2.COLORMAP_BONE)\n",
    "    return im_color\n",
    "\n",
    "\n",
    "def color_filter_winter(img):\n",
    "    im_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)\n",
    "    im_color = cv2.applyColorMap(im_gray, cv2.COLORMAP_WINTER)\n",
    "    return im_color\n",
    "\n",
    "\n",
    "def apply_hue(img):\n",
    "\n",
    "    low, high, prob = [-18, 18, 0.5]\n",
    "    if np.random.uniform(0., 1.) < prob:\n",
    "        return img\n",
    "\n",
    "\n",
    "    delta = np.random.uniform(low, high)\n",
    "    u = np.cos(delta * np.pi)\n",
    "    w = np.sin(delta * np.pi)\n",
    "    bt = np.array([[1.0, 0.0, 0.0], [0.0, u, -w], [0.0, w, u]])\n",
    "    tyiq = np.array([[0.299, 0.587, 0.114], [0.596, -0.274, -0.321],\n",
    "                     [0.211, -0.523, 0.311]])\n",
    "    ityiq = np.array([[1.0, 0.956, 0.621], [1.0, -0.272, -0.647],\n",
    "                      [1.0, -1.107, 1.705]])\n",
    "    t = np.dot(np.dot(ityiq, bt), tyiq).T\n",
    "    img = np.dot(img, t)\n",
    "    img = np.array(img).astype(np.uint8)\n",
    "    return img\n",
    "\n",
    "\n",
    "def apply_saturation(img):\n",
    "    low, high, prob = [0.5, 1.5, 0.5]\n",
    "    if np.random.uniform(0., 1.) < prob:\n",
    "        return img\n",
    "    delta = np.random.uniform(low, high)\n",
    "\n",
    "    gray = img * np.array([[[0.299, 0.587, 0.114]]], dtype=np.float32)\n",
    "    gray = gray.sum(axis=2, keepdims=True)\n",
    "    gray *= (1.0 - delta)\n",
    "    img *= delta\n",
    "    img += gray\n",
    "    img = np.array(img).astype(np.uint8)\n",
    "    return img\n",
    "\n",
    "\n",
    "def apply_contrast(img):\n",
    "    low, high, prob = [0.5, 1.5, 0.5]\n",
    "    if np.random.uniform(0., 1.) < prob:\n",
    "        return img\n",
    "    delta = np.random.uniform(low, high)\n",
    "\n",
    "    img *= delta\n",
    "    img = np.array(img).astype(np.uint8)\n",
    "    return img\n",
    "\n",
    "\n",
    "def apply_brightness(img):\n",
    "    low, high, prob = [0.5, 1.5, 0.5]\n",
    "    if np.random.uniform(0., 1.) < prob:\n",
    "        return img\n",
    "    delta = np.random.uniform(low, high)\n",
    "\n",
    "    img += delta\n",
    "    img = np.array(img).astype(np.uint8)\n",
    "    return img\n",
    "\n",
    "# 图像水平翻转\n",
    "def apply_hflip(img):\n",
    "    img = cv2.flip(img, 1)\n",
    "    return img\n",
    "\n",
    "color_maps = [\n",
    "    apply_hue,\n",
    "    apply_saturation,\n",
    "    apply_contrast,\n",
    "    apply_brightness,\n",
    "    apply_hflip\n",
    "]\n",
    "\n",
    "def gen_random_ind():\n",
    "    seed = random.random()\n",
    "    if seed < 1 / 5:\n",
    "        return 0\n",
    "    elif seed >= 1 / 5 and seed < 2 / 5:\n",
    "        return 1\n",
    "    elif seed >= 2 / 5 and seed < 3 / 5:\n",
    "        return 2\n",
    "    elif seed >= 3 / 5 and seed < 4 / 5:\n",
    "        return 3\n",
    "    else:\n",
    "        return 4\n",
    "\n",
    "# 定义数据类型\n",
    "class MyDataSet(Dataset):\n",
    "    \"\"\"\n",
    "      步骤一:继承 paddle.io.Dataset 类\n",
    "      \"\"\"\n",
    "\n",
    "    # def __init__(self, data_dir, label_path, transform=None):\n",
    "    def __init__(self, data_paths, transform=None):\n",
    "        \"\"\"\n",
    "        步骤二:实现 __init__ 函数,初始化数据集,将样本和标签映射到列表中\n",
    "        \"\"\"\n",
    "        super(MyDataSet, self).__init__()\n",
    "        self.data_list = []\n",
    "        self.data = []\n",
    "        for data_dir, label_path in data_paths:\n",
    "            # data_dir = os.path.join(data_dir, label_path)\n",
    "            # self.data_list.append([data_dir, label_path])\n",
    "            label_path = os.path.join(data_dir, label_path)\n",
    "            \n",
    "            with open(label_path, encoding='utf-8') as f:\n",
    "                \n",
    "                data_set = json.loads(f.read())\n",
    "                for data in data_set:\n",
    "                    # print(data)\n",
    "                    image_name = data[\"img_path\"]\n",
    "                    label = data[\"state\"]\n",
    "                    image_path = os.path.join(data_dir, image_name)\n",
    "                    self.data_list.append([image_path, label])\n",
    "        # print(self.data_list)\n",
    "        # 传入定义好的数据处理方法,作为自定义数据集类的一个属性\n",
    "        self.transform = transform\n",
    "        self.flag_load_all = False\n",
    "\n",
    "    # 一次读入所有数据到内存\n",
    "    def load_alldata(self):\n",
    "        if not self.flag_load_all:\n",
    "            for image_path, label in self.data_list:\n",
    "                img = Image.open(image_path)\n",
    "                if img.mode != 'RGB':\n",
    "                    img = img.convert('RGB')\n",
    "                image = img.resize((128, 128), Image.Resampling.LANCZOS)\n",
    "                image = np.array(image).astype(np.float32)\n",
    "                self.data.append([image, label])\n",
    "            self.flag_load_all = True\n",
    "\n",
    "    def __getitem__(self, index):\n",
    "        \"\"\"\n",
    "        步骤三:实现 __getitem__ 函数,定义指定 index 时如何获取数据,并返回单条数据(样本数据、对应的标签)\n",
    "        \"\"\"\n",
    "        image = None\n",
    "        label = None\n",
    "        if self.flag_load_all:\n",
    "            image, label = self.data[index]\n",
    "            \n",
    "        else:\n",
    "            # 根据索引,从列表中取出一个图像\n",
    "            image_path, label = self.data_list[index]\n",
    "            # image = train_mapper(image_path)\n",
    "            image = Image.open(image_path)\n",
    "            # # cv2.imshow(\"temp\", image)\n",
    "            # # cv2.waitKey(0)\n",
    "            if image.mode != 'RGB':\n",
    "                image = image.convert('RGB')\n",
    "            image = image.resize((128, 128), Image.Resampling.LANCZOS)\n",
    "\n",
    "            image = np.array(image).astype(np.float32)\n",
    "            \n",
    "\n",
    "        # 随机图像增强\n",
    "        id = gen_random_ind()\n",
    "        image = color_maps[id](image)\n",
    "\n",
    "        # 应用数据处理方法到图像上\n",
    "        if self.transform is not None:\n",
    "            image = self.transform(image)\n",
    "        label = np.array(label[1:])\n",
    "        if id==4:\n",
    "            label = 0-label\n",
    "        label = to_tensor(label, dtype=\"float32\")\n",
    "        # 返回图像和对应标签\n",
    "        return image, label\n",
    "\n",
    "    def __len__(self):\n",
    "        \"\"\"\n",
    "        步骤四:实现 __len__ 函数,返回数据集的样本总数\n",
    "        \"\"\"\n",
    "        return len(self.data_list)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-04-16T06:19:15.702871Z",
     "iopub.status.busy": "2026-04-16T06:19:15.702614Z",
     "iopub.status.idle": "2026-04-16T06:19:15.706567Z",
     "shell.execute_reply": "2026-04-16T06:19:15.706087Z",
     "shell.execute_reply.started": "2026-04-16T06:19:15.702850Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "def get_dataset():\n",
    "    # 图像数据处理方法: ['BaseTransform', 'Compose', 'Resize', 'RandomResizedCrop', 'CenterCrop', 'RandomHorizontalFlip', 'RandomVerticalFlip', 'Transpose', 'Normalize', 'BrightnessTransform', 'SaturationTransform', 'ContrastTransform', 'HueTransform', 'ColorJitter', 'RandomCrop', 'Pad', 'RandomRotation', 'Grayscale', 'ToTensor', 'to_tensor', 'hflip', 'vflip', 'resize', 'pad', 'rotate', 'to_grayscale', 'crop', 'center_crop', 'adjust_brightness', 'adjust_contrast', 'adjust_hue', 'normalize']\n",
    "    transform1 = Compose([Normalize(mean=[127.5], std=[127.5]),  ToTensor()])  #\n",
    "    # path1 = [\"data_set\\image_set1201\",\"data.json\"]\n",
    "    # path2 = [\"data_set\\image_set1206\",\"data.json\"]\n",
    "    # path3 = [\"data_set\\image_set1208\",\"data.json\"]\n",
    "    path3 = [\"data_set\\image_set\",\"data.json\"]\n",
    "    data_paths = [path3]\n",
    "    train_custom_dataset = MyDataSet(data_paths, transform=transform1)\n",
    "    print(\"read all data to memory\")\n",
    "    train_custom_dataset.load_alldata()\n",
    "    return train_custom_dataset\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-04-16T06:19:15.707657Z",
     "iopub.status.busy": "2026-04-16T06:19:15.707446Z",
     "iopub.status.idle": "2026-04-16T06:19:15.726918Z",
     "shell.execute_reply": "2026-04-16T06:19:15.726296Z",
     "shell.execute_reply.started": "2026-04-16T06:19:15.707638Z"
    },
    "jupyter": {
     "outputs_hidden": false
    },
    "scrolled": true,
    "tags": []
   },
   "outputs": [],
   "source": [
    "from paddle import optimizer\n",
    "from paddle.io import DataLoader\n",
    "from paddle.vision.transforms import Resize, Compose, ColorJitter, Normalize, ToTensor\n",
    "import paddle.nn.functional as F\n",
    "import datetime, json\n",
    "import csv\n",
    "import os\n",
    "\n",
    "def get_dataset(data_paths):\n",
    "    # 图像数据处理方法: ['BaseTransform', 'Compose', 'Resize', 'RandomResizedCrop', 'CenterCrop', 'RandomHorizontalFlip', 'RandomVerticalFlip', 'Transpose', 'Normalize', 'BrightnessTransform', 'SaturationTransform', 'ContrastTransform', 'HueTransform', 'ColorJitter', 'RandomCrop', 'Pad', 'RandomRotation', 'Grayscale', 'ToTensor', 'to_tensor', 'hflip', 'vflip', 'resize', 'pad', 'rotate', 'to_grayscale', 'crop', 'center_crop', 'adjust_brightness', 'adjust_contrast', 'adjust_hue', 'normalize']\n",
    "    transform4data = Compose([Normalize(mean=[127.5], std=[127.5]),  ToTensor()])  #\n",
    "    train_custom_dataset = MyDataSet(data_paths, transform=transform4data)\n",
    "    print(\"read all data to memory\")\n",
    "    train_custom_dataset.load_alldata()\n",
    "    return train_custom_dataset\n",
    "\n",
    "def train():\n",
    "    # 按照 年月日_小时 时间格式定义模型保存路径\n",
    "    time_str = datetime.datetime.now().strftime(\"%Y%m%d_%H\")\n",
    "    model_parmas_path, model_opt_path, checkpoint_path = get_model_path(time_str)\n",
    "    \n",
    "    # 准备日志文件路径\n",
    "    log_dir = \"./data\"\n",
    "    os.makedirs(log_dir, exist_ok=True)\n",
    "    log_file = os.path.join(log_dir, \"loss_log.csv\")\n",
    "    \n",
    "    # 打开日志文件(写入模式,先写表头)\n",
    "    with open(log_file, 'w', newline='', encoding='utf-8') as f:\n",
    "        writer = csv.writer(f)\n",
    "        writer.writerow(['epoch', 'type', 'loss_mae', 'loss_mse'])  # loss_mse 仅在 eval 时有值\n",
    "    # 定义模型\n",
    "    cnn_model = CnnModel()\n",
    "    # 获取数据,并把数据转为 paddle 数据格式\n",
    "    train_paths, eval_paths = get_data_paths()\n",
    "    train_custom_dataset = get_dataset(train_paths)\n",
    "    eval_custom_dataset = get_dataset(eval_paths)\n",
    "    print(\"read ok\")\n",
    "    # 定义数据加载器\n",
    "    train_loader = DataLoader(train_custom_dataset, batch_size=256, shuffle=True, drop_last=False, num_workers=0)\n",
    "    test_loader = DataLoader(eval_custom_dataset, batch_size=256, shuffle=False, drop_last=False, num_workers=0)\n",
    "    print(\"--------------------------\")\n",
    "    \n",
    "    \n",
    "    # 定义保存最后一次训练的检查点\n",
    "    final_checkpoint = dict()\n",
    "    # 定义优化器\n",
    "    learning_rate = optimizer.lr.PiecewiseDecay(boundaries=[100, 400], values=[0.001, 0.0001, 0.00001])\n",
    "    # 模型训练的配置准备,准备损失函数,优化器和评价指标\n",
    "    opt = optimizer.Adam(learning_rate=learning_rate, parameters=cnn_model.parameters())\n",
    "    # 绝对误差 MAE\n",
    "    loss_fn = nn.L1Loss()\n",
    "    # 模型训练\n",
    "    print(\"start...\")\n",
    "    epoch_num = train_cfg[\"epochs\"]\n",
    "\n",
    "    for epoch_id in range(epoch_num):\n",
    "        start_time = datetime.datetime.now()\n",
    "        print(\"epoch {}, start time:{}\".format(epoch_id,datetime.datetime.now()))\n",
    "        # 将模型及其所有子层设置为训练模式。这只会影响某些模块,如Dropout和BatchNorm。\n",
    "        cnn_model.train()\n",
    "        loss_sum = 0\n",
    "        # print()\n",
    "        count = 0\n",
    "        for batch_id, data in enumerate(train_loader()):\n",
    "            \n",
    "            # 训练数据获取输入输出\n",
    "            x_data, y_data = data\n",
    "            predicts = cnn_model(x_data)\n",
    "            # print(predicts.shape)\n",
    "            # 计算损失 等价于 prepare 中loss的设置\n",
    "            loss = loss_fn(predicts, label=y_data)\n",
    "            # loss = F.l1_loss(predicts, y_data)\n",
    "\n",
    "            print(\"\\tbatch {}, loss mae is: {}\".format( batch_id, float(loss)))\n",
    "            # 反向传播\n",
    "            loss.backward()\n",
    "            # 更新参数\n",
    "            opt.step()\n",
    "            # 清除梯度\n",
    "            opt.clear_grad()\n",
    "\n",
    "            final_checkpoint[\"loss\"] = loss\n",
    "            # 用于计算平均损失\n",
    "            loss_sum = loss_sum + float(loss)\n",
    "            count += 1\n",
    "\n",
    "        print(\"train cost time:{}, avg_mae_loss:{}\\n\".format(datetime.datetime.now() - start_time, loss_sum/count))\n",
    "                \n",
    "        # 记录训练平均损失到日志文件\n",
    "        with open(log_file, 'a', newline='', encoding='utf-8') as f:\n",
    "            writer = csv.writer(f)\n",
    "            writer.writerow([epoch_id, 'train', loss_sum/count, ''])\n",
    "\n",
    "        # 10个epoch进行一次评估\n",
    "        if epoch_id !=0 and epoch_id % 10 == 0:\n",
    "            print(\"eval epoch {}, start time:{}\".format(epoch_id,datetime.datetime.now()))\n",
    "            cnn_model.eval()\n",
    "            loss_mse_sum = 0\n",
    "            loss_mae_sum = 0\n",
    "            count = 0\n",
    "            for batch_id, data in enumerate(test_loader()):\n",
    "                x_data, y_data = data\n",
    "                predicts = cnn_model(x_data)\n",
    "                # 计算损失,绝对误差和平方误差\n",
    "                loss_mae = F.l1_loss(predicts, y_data)\n",
    "                loss_mse = F.mse_loss(predicts, y_data)\n",
    "                print(\"\\tbatch {}, loss mae is: {}, mse is: {}\".format( batch_id, float(loss_mae), float(loss_mse)))\n",
    "                loss_mae_sum = loss_mae_sum + float(loss_mae)\n",
    "                loss_mse_sum = loss_mse_sum + float(loss_mse)\n",
    "                count += 1\n",
    "            print(\"eval cost time:{}, avg_mae_loss:{}, avg_mse_loss:{}\\n\".format(datetime.datetime.now() - start_time, loss_mae_sum/count, loss_mse_sum/count))\n",
    "                        \n",
    "            # 记录评估损失到日志文件\n",
    "            with open(log_file, 'a', newline='', encoding='utf-8') as f:\n",
    "                writer = csv.writer(f)\n",
    "                writer.writerow([epoch_id, 'eval', loss_mae_sum/count, loss_mse_sum/count])\n",
    "\n",
    "            # 保存Layer参数\n",
    "        paddle.save(cnn_model.state_dict(), model_parmas_path)\n",
    "        # paddle.static.save_inference_model(cnn_model.state_dict, \"model/cnn23/dymic/cnn_lane.\")\n",
    "\n",
    "    # 保存Layer参数\n",
    "    paddle.save(cnn_model.state_dict(), model_parmas_path)\n",
    "    # 保存优化器参数\n",
    "    paddle.save(opt.state_dict(), model_opt_path)\n",
    "    # 保存检查点checkpoint信息\n",
    "    paddle.save(final_checkpoint, checkpoint_path)\n",
    "\n",
    "def save_jit():\n",
    "    from paddle import jit\n",
    "    cnn_model = CnnModel()\n",
    "    # 如果保存模型用于推理部署,则需切换 eval()模式\n",
    "    cnn_model.eval()\n",
    "    last_name = get_last_model_name()\n",
    "    infer_path = get_infer_path(last_name)\n",
    "    # 载入模型参数、优化器参数和最后一个epoch保存的检查点\n",
    "    model_params_path, _, _ = get_model_path(last_name)\n",
    "    # 载入模型参数、优化器参数和最后一个epoch保存的检查点\n",
    "    layer_state_dict = paddle.load(model_params_path)\n",
    "    cnn_model.set_state_dict(layer_state_dict)\n",
    "\n",
    "    layer = jit.to_static(cnn_model, input_spec=[paddle.static.InputSpec(shape=[None, 3, 128, 128], dtype='float32')]) # <----通过函数式调用 paddle.jit.to_static(layer) 一键实现动转静\n",
    "    jit.save(layer, infer_path)\n",
    "\n",
    "def infer_test():\n",
    "    import time\n",
    "    import numpy as np\n",
    "    # imagenet上的归一化值\n",
    "    transform1 = Compose([Resize((128,128)),Normalize(mean=[127.5], std=[127.5]), ToTensor(\"CHW\")])  #    print(\"read data to memory\")\n",
    "    cnn_model = CnnModel()\n",
    "    # 如果保存模型用于推理部署,则需切换 eval()模式\n",
    "    cnn_model.eval()\n",
    "\n",
    "    last_name = get_last_model_name()\n",
    "    model_save_path, model_parmas_path, model_opt_path = get_model_path(last_name)\n",
    "    # 载入模型参数、优化器参数和最后一个epoch保存的检查点\n",
    "    layer_state_dict = paddle.load(model_save_path)\n",
    "\n",
    "    # 将load后的参数与模型关联起来\n",
    "    cnn_model.set_state_dict(layer_state_dict)\n",
    "\n",
    "    train_custom_dataset = MyDataSet(\"train_data\", \"train.txt\", transform=transform1)\n",
    "    # 图像数据处理方法: ['BaseTransform', 'Compose', 'Resize', 'RandomResizedCrop', 'CenterCrop', 'RandomHorizontalFlip', 'RandomVerticalFlip', 'Transpose', 'Normalize', 'BrightnessTransform', 'SaturationTransform', 'ContrastTransform', 'HueTransform', 'ColorJitter', 'RandomCrop', 'Pad', 'RandomRotation', 'Grayscale', 'ToTensor', 'to_tensor', 'hflip', 'vflip', 'resize', 'pad', 'rotate', 'to_grayscale', 'crop', 'center_crop', 'adjust_brightness', 'adjust_contrast', 'adjust_hue', 'normalize']\n",
    "\n",
    "    train_loader = DataLoader(train_custom_dataset, batch_size=16, shuffle=True, drop_last=False)\n",
    "    \n",
    "    cnn_model.train()\n",
    "    for batch_id, data in enumerate(train_loader()):\n",
    "            x_data, y_data = data\n",
    "            predicts = cnn_model(x_data)\n",
    "            print(predicts.numpy()[0][0])\n",
    "            print(y_data.numpy()[0][0])\n",
    "            time.sleep(3)\n",
    "\n",
    "    print(\"start...\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-04-16T06:19:15.727890Z",
     "iopub.status.busy": "2026-04-16T06:19:15.727606Z",
     "iopub.status.idle": "2026-04-16T06:27:26.805515Z",
     "shell.execute_reply": "2026-04-16T06:27:26.804467Z",
     "shell.execute_reply.started": "2026-04-16T06:19:15.727867Z"
    },
    "jupyter": {
     "outputs_hidden": false
    },
    "scrolled": true,
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\tbatch 1, loss mae is: 0.03390732407569885, mse is: 0.006658968050032854\r\n",
      "\tbatch 2, loss mae is: 0.02843805029988289, mse is: 0.003714042017236352\r\n",
      "\tbatch 3, loss mae is: 0.028708957135677338, mse is: 0.008733252994716167\r\n",
      "\tbatch 4, loss mae is: 0.0167335607111454, mse is: 0.0033754026517271996\r\n",
      "\tbatch 5, loss mae is: 0.01813434809446335, mse is: 0.004496535751968622\r\n",
      "\tbatch 6, loss mae is: 0.01603740267455578, mse is: 0.0031514973379671574\r\n",
      "\tbatch 7, loss mae is: 0.07058249413967133, mse is: 0.022585440427064896\r\n",
      "\tbatch 8, loss mae is: 0.006749517284333706, mse is: 0.0008914698846638203\r\n",
      "\tbatch 9, loss mae is: 0.01705060340464115, mse is: 0.0014661984751001\r\n",
      "\tbatch 10, loss mae is: 0.05257698893547058, mse is: 0.02503032796084881\r\n",
      "eval cost time:0:00:03.754577, avg_mae_loss:0.0285732460800897, avg_mse_loss:0.00767975460356948\r\n",
      "\r\n",
      "epoch 151, start time:2026-04-16 14:25:31.539564\r\n",
      "\tbatch 0, loss mae is: 0.017840269953012466\r\n",
      "\tbatch 1, loss mae is: 0.01784147322177887\r\n",
      "\tbatch 2, loss mae is: 0.017979901283979416\r\n",
      "\tbatch 3, loss mae is: 0.012351453304290771\r\n",
      "\tbatch 4, loss mae is: 0.018248548731207848\r\n",
      "\tbatch 5, loss mae is: 0.01596374250948429\r\n",
      "\tbatch 6, loss mae is: 0.01464750524610281\r\n",
      "\tbatch 7, loss mae is: 0.02058885619044304\r\n",
      "\tbatch 8, loss mae is: 0.016470130532979965\r\n",
      "\tbatch 9, loss mae is: 0.01880781352519989\r\n",
      "\tbatch 10, loss mae is: 0.01797414943575859\r\n",
      "\tbatch 11, loss mae is: 0.017656078562140465\r\n",
      "\tbatch 12, loss mae is: 0.020500408485531807\r\n",
      "\tbatch 13, loss mae is: 0.01922684535384178\r\n",
      "\tbatch 14, loss mae is: 0.018184561282396317\r\n",
      "\tbatch 15, loss mae is: 0.0190512053668499\r\n",
      "train cost time:0:00:02.237497, avg_mae_loss:0.01770830893656239\r\n",
      "\r\n",
      "epoch 152, start time:2026-04-16 14:25:33.783231\r\n",
      "\tbatch 0, loss mae is: 0.020039359107613564\r\n",
      "\tbatch 1, loss mae is: 0.02021777257323265\r\n",
      "\tbatch 2, loss mae is: 0.015304568223655224\r\n",
      "\tbatch 3, loss mae is: 0.01885533705353737\r\n",
      "\tbatch 4, loss mae is: 0.01647283509373665\r\n",
      "\tbatch 5, loss mae is: 0.01910916343331337\r\n",
      "\tbatch 6, loss mae is: 0.020816903561353683\r\n",
      "\tbatch 7, loss mae is: 0.016873521730303764\r\n",
      "\tbatch 8, loss mae is: 0.016931967809796333\r\n",
      "\tbatch 9, loss mae is: 0.019495636224746704\r\n",
      "\tbatch 10, loss mae is: 0.015449934639036655\r\n",
      "\tbatch 11, loss mae is: 0.016723062843084335\r\n",
      "\tbatch 12, loss mae is: 0.019246725365519524\r\n",
      "\tbatch 13, loss mae is: 0.01929873786866665\r\n",
      "\tbatch 14, loss mae is: 0.01636766642332077\r\n",
      "\tbatch 15, loss mae is: 0.01618240214884281\r\n",
      "train cost time:0:00:02.114013, avg_mae_loss:0.017961599631235003\r\n",
      "\r\n",
      "epoch 153, start time:2026-04-16 14:25:35.903881\r\n",
      "\tbatch 0, loss mae is: 0.018115561455488205\r\n",
      "\tbatch 1, loss mae is: 0.020076077431440353\r\n",
      "\tbatch 2, loss mae is: 0.017328040674328804\r\n",
      "\tbatch 3, loss mae is: 0.015203726477921009\r\n",
      "\tbatch 4, loss mae is: 0.020756609737873077\r\n",
      "\tbatch 5, loss mae is: 0.019726380705833435\r\n",
      "\tbatch 6, loss mae is: 0.017476240172982216\r\n",
      "\tbatch 7, loss mae is: 0.016043646261096\r\n",
      "\tbatch 8, loss mae is: 0.018670614808797836\r\n",
      "\tbatch 9, loss mae is: 0.019354844465851784\r\n",
      "\tbatch 10, loss mae is: 0.017951983958482742\r\n",
      "\tbatch 11, loss mae is: 0.020001715049147606\r\n",
      "\tbatch 12, loss mae is: 0.016074594110250473\r\n",
      "\tbatch 13, loss mae is: 0.012938028201460838\r\n",
      "\tbatch 14, loss mae is: 0.014614865183830261\r\n",
      "\tbatch 15, loss mae is: 0.014443663880228996\r\n",
      "train cost time:0:00:02.340097, avg_mae_loss:0.017423537035938352\r\n",
      "\r\n",
      "epoch 154, start time:2026-04-16 14:25:38.250427\r\n",
      "\tbatch 0, loss mae is: 0.019575119018554688\r\n",
      "\tbatch 1, loss mae is: 0.016552463173866272\r\n",
      "\tbatch 2, loss mae is: 0.01720389723777771\r\n",
      "\tbatch 3, loss mae is: 0.015364810824394226\r\n",
      "\tbatch 4, loss mae is: 0.0148613341152668\r\n",
      "\tbatch 5, loss mae is: 0.01654059626162052\r\n",
      "\tbatch 6, loss mae is: 0.019159801304340363\r\n",
      "\tbatch 7, loss mae is: 0.01425614207983017\r\n",
      "\tbatch 8, loss mae is: 0.016628079116344452\r\n",
      "\tbatch 9, loss mae is: 0.022309385240077972\r\n",
      "\tbatch 10, loss mae is: 0.018372870981693268\r\n",
      "\tbatch 11, loss mae is: 0.02030606009066105\r\n",
      "\tbatch 12, loss mae is: 0.018093034625053406\r\n",
      "\tbatch 13, loss mae is: 0.019001003354787827\r\n",
      "\tbatch 14, loss mae is: 0.01977558061480522\r\n",
      "\tbatch 15, loss mae is: 0.01842237263917923\r\n",
      "train cost time:0:00:02.229599, avg_mae_loss:0.017901409417390823\r\n",
      "\r\n",
      "epoch 155, start time:2026-04-16 14:25:40.486030\r\n",
      "\tbatch 0, loss mae is: 0.017139321193099022\r\n",
      "\tbatch 1, loss mae is: 0.019062703475356102\r\n",
      "\tbatch 2, loss mae is: 0.015811434015631676\r\n",
      "\tbatch 3, loss mae is: 0.023916587233543396\r\n",
      "\tbatch 4, loss mae is: 0.0213333610445261\r\n",
      "\tbatch 5, loss mae is: 0.018289227038621902\r\n",
      "\tbatch 6, loss mae is: 0.021816397085785866\r\n",
      "\tbatch 7, loss mae is: 0.01727720908820629\r\n",
      "\tbatch 8, loss mae is: 0.01627260632812977\r\n",
      "\tbatch 9, loss mae is: 0.017258189618587494\r\n",
      "\tbatch 10, loss mae is: 0.018695740029215813\r\n",
      "\tbatch 11, loss mae is: 0.017824657261371613\r\n",
      "\tbatch 12, loss mae is: 0.015618354082107544\r\n",
      "\tbatch 13, loss mae is: 0.016103988513350487\r\n",
      "\tbatch 14, loss mae is: 0.018025841563940048\r\n",
      "\tbatch 15, loss mae is: 0.018098648637533188\r\n",
      "train cost time:0:00:02.387613, avg_mae_loss:0.018284016638062894\r\n",
      "\r\n",
      "epoch 156, start time:2026-04-16 14:25:42.880470\r\n",
      "\tbatch 0, loss mae is: 0.017190342769026756\r\n",
      "\tbatch 1, loss mae is: 0.015322782099246979\r\n",
      "\tbatch 2, loss mae is: 0.017582092434167862\r\n",
      "\tbatch 3, loss mae is: 0.014979726634919643\r\n",
      "\tbatch 4, loss mae is: 0.01874101348221302\r\n",
      "\tbatch 5, loss mae is: 0.017562901601195335\r\n",
      "\tbatch 6, loss mae is: 0.025321831926703453\r\n",
      "\tbatch 7, loss mae is: 0.01990349031984806\r\n",
      "\tbatch 8, loss mae is: 0.017501510679721832\r\n",
      "\tbatch 9, loss mae is: 0.015813136473298073\r\n",
      "\tbatch 10, loss mae is: 0.015712620690464973\r\n",
      "\tbatch 11, loss mae is: 0.01855498179793358\r\n",
      "\tbatch 12, loss mae is: 0.015452515333890915\r\n",
      "\tbatch 13, loss mae is: 0.01715485192835331\r\n",
      "\tbatch 14, loss mae is: 0.017737818881869316\r\n",
      "\tbatch 15, loss mae is: 0.01730014570057392\r\n",
      "train cost time:0:00:02.346747, avg_mae_loss:0.01761448517208919\r\n",
      "\r\n",
      "epoch 157, start time:2026-04-16 14:25:45.233451\r\n",
      "\tbatch 0, loss mae is: 0.02037477307021618\r\n",
      "\tbatch 1, loss mae is: 0.022505145519971848\r\n",
      "\tbatch 2, loss mae is: 0.019597703590989113\r\n",
      "\tbatch 3, loss mae is: 0.017524924129247665\r\n",
      "\tbatch 4, loss mae is: 0.01840618997812271\r\n",
      "\tbatch 5, loss mae is: 0.020119326189160347\r\n",
      "\tbatch 6, loss mae is: 0.014639776200056076\r\n",
      "\tbatch 7, loss mae is: 0.016526447609066963\r\n",
      "\tbatch 8, loss mae is: 0.020084556192159653\r\n",
      "\tbatch 9, loss mae is: 0.015348532237112522\r\n",
      "\tbatch 10, loss mae is: 0.018458953127264977\r\n",
      "\tbatch 11, loss mae is: 0.01568383164703846\r\n",
      "\tbatch 12, loss mae is: 0.017176354303956032\r\n",
      "\tbatch 13, loss mae is: 0.01800740510225296\r\n",
      "\tbatch 14, loss mae is: 0.017166271805763245\r\n",
      "\tbatch 15, loss mae is: 0.017940517514944077\r\n",
      "train cost time:0:00:02.232366, avg_mae_loss:0.018097544263582677\r\n",
      "\r\n",
      "epoch 158, start time:2026-04-16 14:25:47.474741\r\n",
      "\tbatch 0, loss mae is: 0.011978548020124435\r\n",
      "\tbatch 1, loss mae is: 0.02309175208210945\r\n",
      "\tbatch 2, loss mae is: 0.016310319304466248\r\n",
      "\tbatch 3, loss mae is: 0.015860287472605705\r\n",
      "\tbatch 4, loss mae is: 0.017792312428355217\r\n",
      "\tbatch 5, loss mae is: 0.02263105846941471\r\n",
      "\tbatch 6, loss mae is: 0.020319301635026932\r\n",
      "\tbatch 7, loss mae is: 0.01950090005993843\r\n",
      "\tbatch 8, loss mae is: 0.017178257927298546\r\n",
      "\tbatch 9, loss mae is: 0.015757489949464798\r\n",
      "\tbatch 10, loss mae is: 0.015138630755245686\r\n",
      "\tbatch 11, loss mae is: 0.01782635971903801\r\n",
      "\tbatch 12, loss mae is: 0.018314875662326813\r\n",
      "\tbatch 13, loss mae is: 0.014520113356411457\r\n",
      "\tbatch 14, loss mae is: 0.015402715653181076\r\n",
      "\tbatch 15, loss mae is: 0.014437681995332241\r\n",
      "train cost time:0:00:02.394282, avg_mae_loss:0.017253787780646235\r\n",
      "\r\n",
      "epoch 159, start time:2026-04-16 14:25:49.875114\r\n",
      "\tbatch 0, loss mae is: 0.019436785951256752\r\n",
      "\tbatch 1, loss mae is: 0.0153009919449687\r\n",
      "\tbatch 2, loss mae is: 0.022110680118203163\r\n",
      "\tbatch 3, loss mae is: 0.016946149989962578\r\n",
      "\tbatch 4, loss mae is: 0.017731044441461563\r\n",
      "\tbatch 5, loss mae is: 0.016102636232972145\r\n",
      "\tbatch 6, loss mae is: 0.014373734593391418\r\n",
      "\tbatch 7, loss mae is: 0.017915954813361168\r\n",
      "\tbatch 8, loss mae is: 0.01749834604561329\r\n",
      "\tbatch 9, loss mae is: 0.014450563117861748\r\n",
      "\tbatch 10, loss mae is: 0.021079502999782562\r\n",
      "\tbatch 11, loss mae is: 0.01690027490258217\r\n",
      "\tbatch 12, loss mae is: 0.02280270867049694\r\n",
      "\tbatch 13, loss mae is: 0.01513795554637909\r\n",
      "\tbatch 14, loss mae is: 0.018972154706716537\r\n",
      "\tbatch 15, loss mae is: 0.016187213361263275\r\n",
      "train cost time:0:00:02.244998, avg_mae_loss:0.01768416858976707\r\n",
      "\r\n",
      "epoch 160, start time:2026-04-16 14:25:52.127510\r\n",
      "\tbatch 0, loss mae is: 0.015261264517903328\r\n",
      "\tbatch 1, loss mae is: 0.01506507582962513\r\n",
      "\tbatch 2, loss mae is: 0.013931531459093094\r\n",
      "\tbatch 3, loss mae is: 0.017573298886418343\r\n",
      "\tbatch 4, loss mae is: 0.015906382352113724\r\n",
      "\tbatch 5, loss mae is: 0.018666008487343788\r\n",
      "\tbatch 6, loss mae is: 0.019596848636865616\r\n",
      "\tbatch 7, loss mae is: 0.020368393510580063\r\n",
      "\tbatch 8, loss mae is: 0.018020160496234894\r\n",
      "\tbatch 9, loss mae is: 0.01264009065926075\r\n",
      "\tbatch 10, loss mae is: 0.021553803235292435\r\n",
      "\tbatch 11, loss mae is: 0.01840357296168804\r\n",
      "\tbatch 12, loss mae is: 0.02144494093954563\r\n",
      "\tbatch 13, loss mae is: 0.01799580454826355\r\n",
      "\tbatch 14, loss mae is: 0.018573541194200516\r\n",
      "\tbatch 15, loss mae is: 0.01499529741704464\r\n",
      "train cost time:0:00:02.164232, avg_mae_loss:0.017499750945717096\r\n",
      "\r\n",
      "eval epoch 160, start time:2026-04-16 14:25:54.291908\r\n",
      "\tbatch 0, loss mae is: 0.025005025789141655, mse is: 0.004525739699602127\r\n",
      "\tbatch 1, loss mae is: 0.03273487091064453, mse is: 0.006233349908143282\r\n",
      "\tbatch 2, loss mae is: 0.027712251991033554, mse is: 0.004410479683429003\r\n",
      "\tbatch 3, loss mae is: 0.03263044357299805, mse is: 0.011437313631176949\r\n",
      "\tbatch 4, loss mae is: 0.021431047469377518, mse is: 0.004993940703570843\r\n",
      "\tbatch 5, loss mae is: 0.018660349771380424, mse is: 0.004618366714566946\r\n",
      "\tbatch 6, loss mae is: 0.01674387976527214, mse is: 0.0033558951690793037\r\n",
      "\tbatch 7, loss mae is: 0.061743877828121185, mse is: 0.017056789249181747\r\n",
      "\tbatch 8, loss mae is: 0.009310068562626839, mse is: 0.0018250350840389729\r\n",
      "\tbatch 9, loss mae is: 0.01699730008840561, mse is: 0.0015808758325874805\r\n",
      "\tbatch 10, loss mae is: 0.05930888652801514, mse is: 0.030486905947327614\r\n",
      "eval cost time:0:00:03.606060, avg_mae_loss:0.029298000207001514, avg_mse_loss:0.008229517420245842\r\n",
      "\r\n",
      "epoch 161, start time:2026-04-16 14:25:55.739741\r\n",
      "\tbatch 0, loss mae is: 0.014827915467321873\r\n",
      "\tbatch 1, loss mae is: 0.01536356657743454\r\n",
      "\tbatch 2, loss mae is: 0.022216545417904854\r\n",
      "\tbatch 3, loss mae is: 0.019767040386795998\r\n",
      "\tbatch 4, loss mae is: 0.021295765414834023\r\n",
      "\tbatch 5, loss mae is: 0.016530515626072884\r\n",
      "\tbatch 6, loss mae is: 0.01798887364566326\r\n",
      "\tbatch 7, loss mae is: 0.01783253252506256\r\n",
      "\tbatch 8, loss mae is: 0.015706196427345276\r\n",
      "\tbatch 9, loss mae is: 0.017920929938554764\r\n",
      "\tbatch 10, loss mae is: 0.02218233421444893\r\n",
      "\tbatch 11, loss mae is: 0.01959935948252678\r\n",
      "\tbatch 12, loss mae is: 0.01771174557507038\r\n",
      "\tbatch 13, loss mae is: 0.021659469231963158\r\n",
      "\tbatch 14, loss mae is: 0.01858696900308132\r\n",
      "\tbatch 15, loss mae is: 0.015553552657365799\r\n",
      "train cost time:0:00:02.141034, avg_mae_loss:0.0184214569744654\r\n",
      "\r\n",
      "epoch 162, start time:2026-04-16 14:25:57.886876\r\n",
      "\tbatch 0, loss mae is: 0.01872057095170021\r\n",
      "\tbatch 1, loss mae is: 0.013886958360671997\r\n",
      "\tbatch 2, loss mae is: 0.014053021557629108\r\n",
      "\tbatch 3, loss mae is: 0.020620787516236305\r\n",
      "\tbatch 4, loss mae is: 0.01765245571732521\r\n",
      "\tbatch 5, loss mae is: 0.017455877736210823\r\n",
      "\tbatch 6, loss mae is: 0.01677091047167778\r\n",
      "\tbatch 7, loss mae is: 0.018014907836914062\r\n",
      "\tbatch 8, loss mae is: 0.018309224396944046\r\n",
      "\tbatch 9, loss mae is: 0.017642149701714516\r\n",
      "\tbatch 10, loss mae is: 0.016560543328523636\r\n",
      "\tbatch 11, loss mae is: 0.020724723115563393\r\n",
      "\tbatch 12, loss mae is: 0.016812337562441826\r\n",
      "\tbatch 13, loss mae is: 0.014639368280768394\r\n",
      "\tbatch 14, loss mae is: 0.017317837104201317\r\n",
      "\tbatch 15, loss mae is: 0.018072061240673065\r\n",
      "train cost time:0:00:02.176847, avg_mae_loss:0.01732835842994973\r\n",
      "\r\n",
      "epoch 163, start time:2026-04-16 14:26:00.069744\r\n",
      "\tbatch 0, loss mae is: 0.01774205081164837\r\n",
      "\tbatch 1, loss mae is: 0.01751886121928692\r\n",
      "\tbatch 2, loss mae is: 0.018956024199724197\r\n",
      "\tbatch 3, loss mae is: 0.018470637500286102\r\n",
      "\tbatch 4, loss mae is: 0.01795739307999611\r\n",
      "\tbatch 5, loss mae is: 0.018415069207549095\r\n",
      "\tbatch 6, loss mae is: 0.016222180798649788\r\n",
      "\tbatch 7, loss mae is: 0.01753856986761093\r\n",
      "\tbatch 8, loss mae is: 0.018771106377243996\r\n",
      "\tbatch 9, loss mae is: 0.01843525469303131\r\n",
      "\tbatch 10, loss mae is: 0.018114618957042694\r\n",
      "\tbatch 11, loss mae is: 0.01955392397940159\r\n",
      "\tbatch 12, loss mae is: 0.01692206785082817\r\n",
      "\tbatch 13, loss mae is: 0.026060564443469048\r\n",
      "\tbatch 14, loss mae is: 0.019856639206409454\r\n",
      "\tbatch 15, loss mae is: 0.025038478896021843\r\n",
      "train cost time:0:00:02.207566, avg_mae_loss:0.019098340068012476\r\n",
      "\r\n",
      "epoch 164, start time:2026-04-16 14:26:02.284213\r\n",
      "\tbatch 0, loss mae is: 0.024758264422416687\r\n",
      "\tbatch 1, loss mae is: 0.025021687150001526\r\n",
      "\tbatch 2, loss mae is: 0.024163629859685898\r\n",
      "\tbatch 3, loss mae is: 0.024267688393592834\r\n",
      "\tbatch 4, loss mae is: 0.03307729586958885\r\n",
      "\tbatch 5, loss mae is: 0.02976488135755062\r\n",
      "\tbatch 6, loss mae is: 0.029826849699020386\r\n",
      "\tbatch 7, loss mae is: 0.02225314825773239\r\n",
      "\tbatch 8, loss mae is: 0.025329865515232086\r\n",
      "\tbatch 9, loss mae is: 0.024525199085474014\r\n",
      "\tbatch 10, loss mae is: 0.027314942330121994\r\n",
      "\tbatch 11, loss mae is: 0.028803277760744095\r\n",
      "\tbatch 12, loss mae is: 0.018150044605135918\r\n",
      "\tbatch 13, loss mae is: 0.022247223183512688\r\n",
      "\tbatch 14, loss mae is: 0.023131348192691803\r\n",
      "\tbatch 15, loss mae is: 0.02277681976556778\r\n",
      "train cost time:0:00:02.145792, avg_mae_loss:0.02533826034050435\r\n",
      "\r\n",
      "epoch 165, start time:2026-04-16 14:26:04.436824\r\n",
      "\tbatch 0, loss mae is: 0.026154980063438416\r\n",
      "\tbatch 1, loss mae is: 0.030325517058372498\r\n",
      "\tbatch 2, loss mae is: 0.022151686251163483\r\n",
      "\tbatch 3, loss mae is: 0.02363745868206024\r\n",
      "\tbatch 4, loss mae is: 0.016928397119045258\r\n",
      "\tbatch 5, loss mae is: 0.02573595568537712\r\n",
      "\tbatch 6, loss mae is: 0.027966313064098358\r\n",
      "\tbatch 7, loss mae is: 0.029617033898830414\r\n",
      "\tbatch 8, loss mae is: 0.026052188128232956\r\n",
      "\tbatch 9, loss mae is: 0.022648973390460014\r\n",
      "\tbatch 10, loss mae is: 0.03232389688491821\r\n",
      "\tbatch 11, loss mae is: 0.022210873663425446\r\n",
      "\tbatch 12, loss mae is: 0.032656487077474594\r\n",
      "\tbatch 13, loss mae is: 0.0207075048238039\r\n",
      "\tbatch 14, loss mae is: 0.02375056967139244\r\n",
      "\tbatch 15, loss mae is: 0.02453962340950966\r\n",
      "train cost time:0:00:02.189719, avg_mae_loss:0.025462966179475188\r\n",
      "\r\n",
      "epoch 166, start time:2026-04-16 14:26:06.632801\r\n",
      "\tbatch 0, loss mae is: 0.01848234049975872\r\n",
      "\tbatch 1, loss mae is: 0.016022494062781334\r\n",
      "\tbatch 2, loss mae is: 0.020452946424484253\r\n",
      "\tbatch 3, loss mae is: 0.025270432233810425\r\n",
      "\tbatch 4, loss mae is: 0.022536534816026688\r\n",
      "\tbatch 5, loss mae is: 0.018461892381310463\r\n",
      "\tbatch 6, loss mae is: 0.01681707799434662\r\n",
      "\tbatch 7, loss mae is: 0.02012544684112072\r\n",
      "\tbatch 8, loss mae is: 0.015181341208517551\r\n",
      "\tbatch 9, loss mae is: 0.02223280444741249\r\n",
      "\tbatch 10, loss mae is: 0.022972675040364265\r\n",
      "\tbatch 11, loss mae is: 0.02079840376973152\r\n",
      "\tbatch 12, loss mae is: 0.020060013979673386\r\n",
      "\tbatch 13, loss mae is: 0.018461687490344048\r\n",
      "\tbatch 14, loss mae is: 0.025569872930645943\r\n",
      "\tbatch 15, loss mae is: 0.022290341556072235\r\n",
      "train cost time:0:00:02.167044, avg_mae_loss:0.02035851910477504\r\n",
      "\r\n",
      "epoch 167, start time:2026-04-16 14:26:08.806282\r\n",
      "\tbatch 0, loss mae is: 0.020501822233200073\r\n",
      "\tbatch 1, loss mae is: 0.017118677496910095\r\n",
      "\tbatch 2, loss mae is: 0.018634209409356117\r\n",
      "\tbatch 3, loss mae is: 0.017936917021870613\r\n",
      "\tbatch 4, loss mae is: 0.01990937814116478\r\n",
      "\tbatch 5, loss mae is: 0.02450493350625038\r\n",
      "\tbatch 6, loss mae is: 0.020764442160725594\r\n",
      "\tbatch 7, loss mae is: 0.021554358303546906\r\n",
      "\tbatch 8, loss mae is: 0.02037396840751171\r\n",
      "\tbatch 9, loss mae is: 0.019435014575719833\r\n",
      "\tbatch 10, loss mae is: 0.015940574929118156\r\n",
      "\tbatch 11, loss mae is: 0.019975747913122177\r\n",
      "\tbatch 12, loss mae is: 0.018882619217038155\r\n",
      "\tbatch 13, loss mae is: 0.021363507956266403\r\n",
      "\tbatch 14, loss mae is: 0.017978191375732422\r\n",
      "\tbatch 15, loss mae is: 0.02203850820660591\r\n",
      "train cost time:0:00:02.123115, avg_mae_loss:0.019807054428383708\r\n",
      "\r\n",
      "epoch 168, start time:2026-04-16 14:26:10.935451\r\n",
      "\tbatch 0, loss mae is: 0.018216777592897415\r\n",
      "\tbatch 1, loss mae is: 0.023815326392650604\r\n",
      "\tbatch 2, loss mae is: 0.01918134093284607\r\n",
      "\tbatch 3, loss mae is: 0.016861511394381523\r\n",
      "\tbatch 4, loss mae is: 0.020838044583797455\r\n",
      "\tbatch 5, loss mae is: 0.020169895142316818\r\n",
      "\tbatch 6, loss mae is: 0.021341385319828987\r\n",
      "\tbatch 7, loss mae is: 0.021048130467534065\r\n",
      "\tbatch 8, loss mae is: 0.020336372777819633\r\n",
      "\tbatch 9, loss mae is: 0.02246222458779812\r\n",
      "\tbatch 10, loss mae is: 0.019468579441308975\r\n",
      "\tbatch 11, loss mae is: 0.021425893530249596\r\n",
      "\tbatch 12, loss mae is: 0.022914744913578033\r\n",
      "\tbatch 13, loss mae is: 0.01976597122848034\r\n",
      "\tbatch 14, loss mae is: 0.018687572330236435\r\n",
      "\tbatch 15, loss mae is: 0.017110049724578857\r\n",
      "train cost time:0:00:02.196385, avg_mae_loss:0.020227738772518933\r\n",
      "\r\n",
      "epoch 169, start time:2026-04-16 14:26:13.137903\r\n",
      "\tbatch 0, loss mae is: 0.015810783952474594\r\n",
      "\tbatch 1, loss mae is: 0.014578863978385925\r\n",
      "\tbatch 2, loss mae is: 0.018341243267059326\r\n",
      "\tbatch 3, loss mae is: 0.017650984227657318\r\n",
      "\tbatch 4, loss mae is: 0.02280360274016857\r\n",
      "\tbatch 5, loss mae is: 0.022992782294750214\r\n",
      "\tbatch 6, loss mae is: 0.020182501524686813\r\n",
      "\tbatch 7, loss mae is: 0.021501973271369934\r\n",
      "\tbatch 8, loss mae is: 0.02383875660598278\r\n",
      "\tbatch 9, loss mae is: 0.020471954718232155\r\n",
      "\tbatch 10, loss mae is: 0.025486275553703308\r\n",
      "\tbatch 11, loss mae is: 0.019215743988752365\r\n",
      "\tbatch 12, loss mae is: 0.0274067260324955\r\n",
      "\tbatch 13, loss mae is: 0.02303495444357395\r\n",
      "\tbatch 14, loss mae is: 0.02056967467069626\r\n",
      "\tbatch 15, loss mae is: 0.022887330502271652\r\n",
      "train cost time:0:00:02.167395, avg_mae_loss:0.02104838448576629\r\n",
      "\r\n",
      "epoch 170, start time:2026-04-16 14:26:15.312102\r\n",
      "\tbatch 0, loss mae is: 0.022436844184994698\r\n",
      "\tbatch 1, loss mae is: 0.01752636767923832\r\n",
      "\tbatch 2, loss mae is: 0.01843857392668724\r\n",
      "\tbatch 3, loss mae is: 0.018496515229344368\r\n",
      "\tbatch 4, loss mae is: 0.01535829622298479\r\n",
      "\tbatch 5, loss mae is: 0.02055438980460167\r\n",
      "\tbatch 6, loss mae is: 0.01993698626756668\r\n",
      "\tbatch 7, loss mae is: 0.019875874742865562\r\n",
      "\tbatch 8, loss mae is: 0.022525038570165634\r\n",
      "\tbatch 9, loss mae is: 0.022094259038567543\r\n",
      "\tbatch 10, loss mae is: 0.01747925952076912\r\n",
      "\tbatch 11, loss mae is: 0.017705585807561874\r\n",
      "\tbatch 12, loss mae is: 0.020829375833272934\r\n",
      "\tbatch 13, loss mae is: 0.02087908238172531\r\n",
      "\tbatch 14, loss mae is: 0.021469295024871826\r\n",
      "\tbatch 15, loss mae is: 0.01944311335682869\r\n",
      "train cost time:0:00:02.158644, avg_mae_loss:0.01969055359950289\r\n",
      "\r\n",
      "eval epoch 170, start time:2026-04-16 14:26:17.470907\r\n",
      "\tbatch 0, loss mae is: 0.024746162816882133, mse is: 0.004347356967628002\r\n",
      "\tbatch 1, loss mae is: 0.03160496801137924, mse is: 0.005958127789199352\r\n",
      "\tbatch 2, loss mae is: 0.027462368831038475, mse is: 0.0041951281018555164\r\n",
      "\tbatch 3, loss mae is: 0.03036787360906601, mse is: 0.010428129695355892\r\n",
      "\tbatch 4, loss mae is: 0.020919933915138245, mse is: 0.00433031190186739\r\n",
      "\tbatch 5, loss mae is: 0.01873099058866501, mse is: 0.004975005052983761\r\n",
      "\tbatch 6, loss mae is: 0.018900331109762192, mse is: 0.00418132496997714\r\n",
      "\tbatch 7, loss mae is: 0.06958287209272385, mse is: 0.022692758589982986\r\n",
      "\tbatch 8, loss mae is: 0.0067384373396635056, mse is: 0.0008842307142913342\r\n",
      "\tbatch 9, loss mae is: 0.014638001099228859, mse is: 0.001218557357788086\r\n",
      "\tbatch 10, loss mae is: 0.05618089437484741, mse is: 0.03030533157289028\r\n",
      "eval cost time:0:00:03.621563, avg_mae_loss:0.02907934852621772, avg_mse_loss:0.008501478428529068\r\n",
      "\r\n",
      "epoch 171, start time:2026-04-16 14:26:18.939911\r\n",
      "\tbatch 0, loss mae is: 0.016117408871650696\r\n",
      "\tbatch 1, loss mae is: 0.018284624442458153\r\n",
      "\tbatch 2, loss mae is: 0.017096243798732758\r\n",
      "\tbatch 3, loss mae is: 0.019742783159017563\r\n",
      "\tbatch 4, loss mae is: 0.022600451484322548\r\n",
      "\tbatch 5, loss mae is: 0.015120789408683777\r\n",
      "\tbatch 6, loss mae is: 0.023715006187558174\r\n",
      "\tbatch 7, loss mae is: 0.015000508166849613\r\n",
      "\tbatch 8, loss mae is: 0.02328694611787796\r\n",
      "\tbatch 9, loss mae is: 0.016463596373796463\r\n",
      "\tbatch 10, loss mae is: 0.018563777208328247\r\n",
      "\tbatch 11, loss mae is: 0.01715690642595291\r\n",
      "\tbatch 12, loss mae is: 0.018173346295952797\r\n",
      "\tbatch 13, loss mae is: 0.020413590595126152\r\n",
      "\tbatch 14, loss mae is: 0.017292018979787827\r\n",
      "\tbatch 15, loss mae is: 0.015753140673041344\r\n",
      "train cost time:0:00:02.192452, avg_mae_loss:0.01842382113682106\r\n",
      "\r\n",
      "epoch 172, start time:2026-04-16 14:26:21.138600\r\n",
      "\tbatch 0, loss mae is: 0.015422786585986614\r\n",
      "\tbatch 1, loss mae is: 0.022023772820830345\r\n",
      "\tbatch 2, loss mae is: 0.018767669796943665\r\n",
      "\tbatch 3, loss mae is: 0.018110305070877075\r\n",
      "\tbatch 4, loss mae is: 0.020885800942778587\r\n",
      "\tbatch 5, loss mae is: 0.018656549975275993\r\n",
      "\tbatch 6, loss mae is: 0.02593226358294487\r\n",
      "\tbatch 7, loss mae is: 0.02170524001121521\r\n",
      "\tbatch 8, loss mae is: 0.023513874039053917\r\n",
      "\tbatch 9, loss mae is: 0.025123100727796555\r\n",
      "\tbatch 10, loss mae is: 0.0225682333111763\r\n",
      "\tbatch 11, loss mae is: 0.022035837173461914\r\n",
      "\tbatch 12, loss mae is: 0.02034984529018402\r\n",
      "\tbatch 13, loss mae is: 0.018163001164793968\r\n",
      "\tbatch 14, loss mae is: 0.024266008287668228\r\n",
      "\tbatch 15, loss mae is: 0.017286676913499832\r\n",
      "train cost time:0:00:02.182878, avg_mae_loss:0.020925685355905443\r\n",
      "\r\n",
      "epoch 173, start time:2026-04-16 14:26:23.327708\r\n",
      "\tbatch 0, loss mae is: 0.016941173002123833\r\n",
      "\tbatch 1, loss mae is: 0.014471879228949547\r\n",
      "\tbatch 2, loss mae is: 0.02346150018274784\r\n",
      "\tbatch 3, loss mae is: 0.01936056837439537\r\n",
      "\tbatch 4, loss mae is: 0.02247673086822033\r\n",
      "\tbatch 5, loss mae is: 0.021547354757785797\r\n",
      "\tbatch 6, loss mae is: 0.02154410444200039\r\n",
      "\tbatch 7, loss mae is: 0.019922778010368347\r\n",
      "\tbatch 8, loss mae is: 0.01855395920574665\r\n",
      "\tbatch 9, loss mae is: 0.019230393692851067\r\n",
      "\tbatch 10, loss mae is: 0.025736186653375626\r\n",
      "\tbatch 11, loss mae is: 0.01948549970984459\r\n",
      "\tbatch 12, loss mae is: 0.020550528541207314\r\n",
      "\tbatch 13, loss mae is: 0.018826648592948914\r\n",
      "\tbatch 14, loss mae is: 0.01674514450132847\r\n",
      "\tbatch 15, loss mae is: 0.020155545324087143\r\n",
      "train cost time:0:00:02.153415, avg_mae_loss:0.019938124692998827\r\n",
      "\r\n",
      "epoch 174, start time:2026-04-16 14:26:25.491586\r\n",
      "\tbatch 0, loss mae is: 0.017727401107549667\r\n",
      "\tbatch 1, loss mae is: 0.022369399666786194\r\n",
      "\tbatch 2, loss mae is: 0.018415430560708046\r\n",
      "\tbatch 3, loss mae is: 0.02129271626472473\r\n",
      "\tbatch 4, loss mae is: 0.0193496011197567\r\n",
      "\tbatch 5, loss mae is: 0.021829238161444664\r\n",
      "\tbatch 6, loss mae is: 0.01532403752207756\r\n",
      "\tbatch 7, loss mae is: 0.01897321455180645\r\n",
      "\tbatch 8, loss mae is: 0.017682304605841637\r\n",
      "\tbatch 9, loss mae is: 0.019750675186514854\r\n",
      "\tbatch 10, loss mae is: 0.019586415961384773\r\n",
      "\tbatch 11, loss mae is: 0.018869249150156975\r\n",
      "\tbatch 12, loss mae is: 0.021407589316368103\r\n",
      "\tbatch 13, loss mae is: 0.018720608204603195\r\n",
      "\tbatch 14, loss mae is: 0.01915723644196987\r\n",
      "\tbatch 15, loss mae is: 0.019503816962242126\r\n",
      "train cost time:0:00:02.303853, avg_mae_loss:0.01937243342399597\r\n",
      "\r\n",
      "epoch 175, start time:2026-04-16 14:26:27.801951\r\n",
      "\tbatch 0, loss mae is: 0.01928049512207508\r\n",
      "\tbatch 1, loss mae is: 0.01838955283164978\r\n",
      "\tbatch 2, loss mae is: 0.023057477548718452\r\n",
      "\tbatch 3, loss mae is: 0.017760097980499268\r\n",
      "\tbatch 4, loss mae is: 0.014830632135272026\r\n",
      "\tbatch 5, loss mae is: 0.01748107746243477\r\n",
      "\tbatch 6, loss mae is: 0.021570846438407898\r\n",
      "\tbatch 7, loss mae is: 0.020463837310671806\r\n",
      "\tbatch 8, loss mae is: 0.013884881511330605\r\n",
      "\tbatch 9, loss mae is: 0.015936922281980515\r\n",
      "\tbatch 10, loss mae is: 0.015839392319321632\r\n",
      "\tbatch 11, loss mae is: 0.01653527282178402\r\n",
      "\tbatch 12, loss mae is: 0.019716423004865646\r\n",
      "\tbatch 13, loss mae is: 0.01660296320915222\r\n",
      "\tbatch 14, loss mae is: 0.020653799176216125\r\n",
      "\tbatch 15, loss mae is: 0.016413873061537743\r\n",
      "train cost time:0:00:02.263873, avg_mae_loss:0.01802609651349485\r\n",
      "\r\n",
      "epoch 176, start time:2026-04-16 14:26:30.072968\r\n",
      "\tbatch 0, loss mae is: 0.01825094223022461\r\n",
      "\tbatch 1, loss mae is: 0.017628291621804237\r\n",
      "\tbatch 2, loss mae is: 0.017467893660068512\r\n",
      "\tbatch 3, loss mae is: 0.017776867374777794\r\n",
      "\tbatch 4, loss mae is: 0.017880044877529144\r\n",
      "\tbatch 5, loss mae is: 0.01612728461623192\r\n",
      "\tbatch 6, loss mae is: 0.020134981721639633\r\n",
      "\tbatch 7, loss mae is: 0.016823660582304\r\n",
      "\tbatch 8, loss mae is: 0.01879037544131279\r\n",
      "\tbatch 9, loss mae is: 0.019028762355446815\r\n",
      "\tbatch 10, loss mae is: 0.02060811221599579\r\n",
      "\tbatch 11, loss mae is: 0.01962842233479023\r\n",
      "\tbatch 12, loss mae is: 0.01854608580470085\r\n",
      "\tbatch 13, loss mae is: 0.019225630909204483\r\n",
      "\tbatch 14, loss mae is: 0.019345400854945183\r\n",
      "\tbatch 15, loss mae is: 0.01320571731775999\r\n",
      "train cost time:0:00:02.156957, avg_mae_loss:0.018154279619921\r\n",
      "\r\n",
      "epoch 177, start time:2026-04-16 14:26:32.237530\r\n",
      "\tbatch 0, loss mae is: 0.0166773684322834\r\n",
      "\tbatch 1, loss mae is: 0.019760873168706894\r\n",
      "\tbatch 2, loss mae is: 0.020473778247833252\r\n",
      "\tbatch 3, loss mae is: 0.02215779945254326\r\n",
      "\tbatch 4, loss mae is: 0.016275132074952126\r\n",
      "\tbatch 5, loss mae is: 0.01569445990025997\r\n",
      "\tbatch 6, loss mae is: 0.017429854720830917\r\n",
      "\tbatch 7, loss mae is: 0.018360275775194168\r\n",
      "\tbatch 8, loss mae is: 0.016952384263277054\r\n",
      "\tbatch 9, loss mae is: 0.016317754983901978\r\n",
      "\tbatch 10, loss mae is: 0.02036183327436447\r\n",
      "\tbatch 11, loss mae is: 0.016469033434987068\r\n",
      "\tbatch 12, loss mae is: 0.01741519197821617\r\n",
      "\tbatch 13, loss mae is: 0.020533883944153786\r\n",
      "\tbatch 14, loss mae is: 0.01866183802485466\r\n",
      "\tbatch 15, loss mae is: 0.018264571204781532\r\n",
      "train cost time:0:00:02.340056, avg_mae_loss:0.018237877055071294\r\n",
      "\r\n",
      "epoch 178, start time:2026-04-16 14:26:34.584025\r\n",
      "\tbatch 0, loss mae is: 0.018914692103862762\r\n",
      "\tbatch 1, loss mae is: 0.01836906373500824\r\n",
      "\tbatch 2, loss mae is: 0.01782393269240856\r\n",
      "\tbatch 3, loss mae is: 0.019713345915079117\r\n",
      "\tbatch 4, loss mae is: 0.01687902770936489\r\n",
      "\tbatch 5, loss mae is: 0.013519443571567535\r\n",
      "\tbatch 6, loss mae is: 0.017211999744176865\r\n",
      "\tbatch 7, loss mae is: 0.016457555815577507\r\n",
      "\tbatch 8, loss mae is: 0.018095340579748154\r\n",
      "\tbatch 9, loss mae is: 0.019508186727762222\r\n",
      "\tbatch 10, loss mae is: 0.020789436995983124\r\n",
      "\tbatch 11, loss mae is: 0.015656255185604095\r\n",
      "\tbatch 12, loss mae is: 0.017256252467632294\r\n",
      "\tbatch 13, loss mae is: 0.020385436713695526\r\n",
      "\tbatch 14, loss mae is: 0.01938636042177677\r\n",
      "\tbatch 15, loss mae is: 0.019499462097883224\r\n",
      "train cost time:0:00:02.360303, avg_mae_loss:0.01809161202982068\r\n",
      "\r\n",
      "epoch 179, start time:2026-04-16 14:26:36.952541\r\n",
      "\tbatch 0, loss mae is: 0.016925852745771408\r\n",
      "\tbatch 1, loss mae is: 0.01881600357592106\r\n",
      "\tbatch 2, loss mae is: 0.017554963007569313\r\n",
      "\tbatch 3, loss mae is: 0.015443231910467148\r\n",
      "\tbatch 4, loss mae is: 0.018041707575321198\r\n",
      "\tbatch 5, loss mae is: 0.015974564477801323\r\n",
      "\tbatch 6, loss mae is: 0.01843075640499592\r\n",
      "\tbatch 7, loss mae is: 0.013424215838313103\r\n",
      "\tbatch 8, loss mae is: 0.01492173969745636\r\n",
      "\tbatch 9, loss mae is: 0.019415924325585365\r\n",
      "\tbatch 10, loss mae is: 0.02254762500524521\r\n",
      "\tbatch 11, loss mae is: 0.0187679436057806\r\n",
      "\tbatch 12, loss mae is: 0.019617531448602676\r\n",
      "\tbatch 13, loss mae is: 0.01725875213742256\r\n",
      "\tbatch 14, loss mae is: 0.017405319958925247\r\n",
      "\tbatch 15, loss mae is: 0.016946082934737206\r\n",
      "train cost time:0:00:02.313008, avg_mae_loss:0.01759326341561973\r\n",
      "\r\n",
      "epoch 180, start time:2026-04-16 14:26:39.272191\r\n",
      "\tbatch 0, loss mae is: 0.015014462172985077\r\n",
      "\tbatch 1, loss mae is: 0.015906890854239464\r\n",
      "\tbatch 2, loss mae is: 0.014951234683394432\r\n",
      "\tbatch 3, loss mae is: 0.015754923224449158\r\n",
      "\tbatch 4, loss mae is: 0.018839580938220024\r\n",
      "\tbatch 5, loss mae is: 0.020146112889051437\r\n",
      "\tbatch 6, loss mae is: 0.018575791269540787\r\n",
      "\tbatch 7, loss mae is: 0.01629023440182209\r\n",
      "\tbatch 8, loss mae is: 0.017935313284397125\r\n",
      "\tbatch 9, loss mae is: 0.01683914288878441\r\n",
      "\tbatch 10, loss mae is: 0.01638537272810936\r\n",
      "\tbatch 11, loss mae is: 0.021754758432507515\r\n",
      "\tbatch 12, loss mae is: 0.016810771077871323\r\n",
      "\tbatch 13, loss mae is: 0.017486020922660828\r\n",
      "\tbatch 14, loss mae is: 0.01706160232424736\r\n",
      "\tbatch 15, loss mae is: 0.021813051775097847\r\n",
      "train cost time:0:00:02.167800, avg_mae_loss:0.01759782899171114\r\n",
      "\r\n",
      "eval epoch 180, start time:2026-04-16 14:26:41.440195\r\n",
      "\tbatch 0, loss mae is: 0.02440640889108181, mse is: 0.004105781204998493\r\n",
      "\tbatch 1, loss mae is: 0.03323088586330414, mse is: 0.0060746255330741405\r\n",
      "\tbatch 2, loss mae is: 0.026969918981194496, mse is: 0.004040527623146772\r\n",
      "\tbatch 3, loss mae is: 0.031002681702375412, mse is: 0.009830045513808727\r\n",
      "\tbatch 4, loss mae is: 0.02048962004482746, mse is: 0.004000909626483917\r\n",
      "\tbatch 5, loss mae is: 0.018014851957559586, mse is: 0.004298283252865076\r\n",
      "\tbatch 6, loss mae is: 0.01708679459989071, mse is: 0.003466556081548333\r\n",
      "\tbatch 7, loss mae is: 0.07178051769733429, mse is: 0.021832745522260666\r\n",
      "\tbatch 8, loss mae is: 0.005128005053848028, mse is: 0.0004018081817775965\r\n",
      "\tbatch 9, loss mae is: 0.017994053661823273, mse is: 0.0020584664307534695\r\n",
      "\tbatch 10, loss mae is: 0.05375564843416214, mse is: 0.026748934760689735\r\n",
      "eval cost time:0:00:03.661613, avg_mae_loss:0.02907812608067285, avg_mse_loss:0.007896243975582447\r\n",
      "\r\n",
      "epoch 181, start time:2026-04-16 14:26:42.941067\r\n",
      "\tbatch 0, loss mae is: 0.018994595855474472\r\n",
      "\tbatch 1, loss mae is: 0.014691397547721863\r\n",
      "\tbatch 2, loss mae is: 0.018653085455298424\r\n",
      "\tbatch 3, loss mae is: 0.020251555368304253\r\n",
      "\tbatch 4, loss mae is: 0.014149659313261509\r\n",
      "\tbatch 5, loss mae is: 0.019050948321819305\r\n",
      "\tbatch 6, loss mae is: 0.016923006623983383\r\n",
      "\tbatch 7, loss mae is: 0.016857529059052467\r\n",
      "\tbatch 8, loss mae is: 0.016189176589250565\r\n",
      "\tbatch 9, loss mae is: 0.019994622096419334\r\n",
      "\tbatch 10, loss mae is: 0.014850335195660591\r\n",
      "\tbatch 11, loss mae is: 0.01979343593120575\r\n",
      "\tbatch 12, loss mae is: 0.017605308443307877\r\n",
      "\tbatch 13, loss mae is: 0.020586976781487465\r\n",
      "\tbatch 14, loss mae is: 0.017249884083867073\r\n",
      "\tbatch 15, loss mae is: 0.019506288692355156\r\n",
      "train cost time:0:00:02.265526, avg_mae_loss:0.017834237834904343\r\n",
      "\r\n",
      "epoch 182, start time:2026-04-16 14:26:45.212577\r\n",
      "\tbatch 0, loss mae is: 0.017965583130717278\r\n",
      "\tbatch 1, loss mae is: 0.01614738628268242\r\n",
      "\tbatch 2, loss mae is: 0.013032288290560246\r\n",
      "\tbatch 3, loss mae is: 0.013587895780801773\r\n",
      "\tbatch 4, loss mae is: 0.019319387152791023\r\n",
      "\tbatch 5, loss mae is: 0.019364362582564354\r\n",
      "\tbatch 6, loss mae is: 0.01562526635825634\r\n",
      "\tbatch 7, loss mae is: 0.017834996804594994\r\n",
      "\tbatch 8, loss mae is: 0.013356600888073444\r\n",
      "\tbatch 9, loss mae is: 0.014910997822880745\r\n",
      "\tbatch 10, loss mae is: 0.018152378499507904\r\n",
      "\tbatch 11, loss mae is: 0.014645012095570564\r\n",
      "\tbatch 12, loss mae is: 0.014980689622461796\r\n",
      "\tbatch 13, loss mae is: 0.018178790807724\r\n",
      "\tbatch 14, loss mae is: 0.018992720171809196\r\n",
      "\tbatch 15, loss mae is: 0.01897784136235714\r\n",
      "train cost time:0:00:02.177632, avg_mae_loss:0.016567012353334576\r\n",
      "\r\n",
      "epoch 183, start time:2026-04-16 14:26:47.396262\r\n",
      "\tbatch 0, loss mae is: 0.016526026651263237\r\n",
      "\tbatch 1, loss mae is: 0.01717115193605423\r\n",
      "\tbatch 2, loss mae is: 0.02038940042257309\r\n",
      "\tbatch 3, loss mae is: 0.01770481839776039\r\n",
      "\tbatch 4, loss mae is: 0.015970343723893166\r\n",
      "\tbatch 5, loss mae is: 0.01866762526333332\r\n",
      "\tbatch 6, loss mae is: 0.01730150170624256\r\n",
      "\tbatch 7, loss mae is: 0.019844744354486465\r\n",
      "\tbatch 8, loss mae is: 0.014251322485506535\r\n",
      "\tbatch 9, loss mae is: 0.017244260758161545\r\n",
      "\tbatch 10, loss mae is: 0.017337726429104805\r\n",
      "\tbatch 11, loss mae is: 0.019573839381337166\r\n",
      "\tbatch 12, loss mae is: 0.015153084881603718\r\n",
      "\tbatch 13, loss mae is: 0.021339787170290947\r\n",
      "\tbatch 14, loss mae is: 0.013526997528970242\r\n",
      "\tbatch 15, loss mae is: 0.023461144417524338\r\n",
      "train cost time:0:00:02.112044, avg_mae_loss:0.01784148596925661\r\n",
      "\r\n",
      "epoch 184, start time:2026-04-16 14:26:49.516000\r\n",
      "\tbatch 0, loss mae is: 0.016361672431230545\r\n",
      "\tbatch 1, loss mae is: 0.018074076622724533\r\n",
      "\tbatch 2, loss mae is: 0.019747419282794\r\n",
      "\tbatch 3, loss mae is: 0.01829524338245392\r\n",
      "\tbatch 4, loss mae is: 0.017047038301825523\r\n",
      "\tbatch 5, loss mae is: 0.019881216809153557\r\n",
      "\tbatch 6, loss mae is: 0.01585693284869194\r\n",
      "\tbatch 7, loss mae is: 0.017165714874863625\r\n",
      "\tbatch 8, loss mae is: 0.018740294501185417\r\n",
      "\tbatch 9, loss mae is: 0.014952056109905243\r\n",
      "\tbatch 10, loss mae is: 0.017598936334252357\r\n",
      "\tbatch 11, loss mae is: 0.018274782225489616\r\n",
      "\tbatch 12, loss mae is: 0.019722148776054382\r\n",
      "\tbatch 13, loss mae is: 0.016853544861078262\r\n",
      "\tbatch 14, loss mae is: 0.019186072051525116\r\n",
      "\tbatch 15, loss mae is: 0.01580001600086689\r\n",
      "train cost time:0:00:02.218046, avg_mae_loss:0.017722322838380933\r\n",
      "\r\n",
      "epoch 185, start time:2026-04-16 14:26:51.740675\r\n",
      "\tbatch 0, loss mae is: 0.016881505027413368\r\n",
      "\tbatch 1, loss mae is: 0.02106059528887272\r\n",
      "\tbatch 2, loss mae is: 0.01576877012848854\r\n",
      "\tbatch 3, loss mae is: 0.016761844977736473\r\n",
      "\tbatch 4, loss mae is: 0.019550517201423645\r\n",
      "\tbatch 5, loss mae is: 0.016501910984516144\r\n",
      "\tbatch 6, loss mae is: 0.0205458402633667\r\n",
      "\tbatch 7, loss mae is: 0.020389162003993988\r\n",
      "\tbatch 8, loss mae is: 0.01595785655081272\r\n",
      "\tbatch 9, loss mae is: 0.016338108107447624\r\n",
      "\tbatch 10, loss mae is: 0.01827714405953884\r\n",
      "\tbatch 11, loss mae is: 0.013046362437307835\r\n",
      "\tbatch 12, loss mae is: 0.01249774731695652\r\n",
      "\tbatch 13, loss mae is: 0.018927136436104774\r\n",
      "\tbatch 14, loss mae is: 0.019582215696573257\r\n",
      "\tbatch 15, loss mae is: 0.017464831471443176\r\n",
      "train cost time:0:00:02.126890, avg_mae_loss:0.01747197174699977\r\n",
      "\r\n",
      "epoch 186, start time:2026-04-16 14:26:53.875022\r\n",
      "\tbatch 0, loss mae is: 0.01780824363231659\r\n",
      "\tbatch 1, loss mae is: 0.01813678629696369\r\n",
      "\tbatch 2, loss mae is: 0.017220674082636833\r\n",
      "\tbatch 3, loss mae is: 0.01532080490142107\r\n",
      "\tbatch 4, loss mae is: 0.0214544665068388\r\n",
      "\tbatch 5, loss mae is: 0.016707004979252815\r\n",
      "\tbatch 6, loss mae is: 0.017854604870080948\r\n",
      "\tbatch 7, loss mae is: 0.01676098443567753\r\n",
      "\tbatch 8, loss mae is: 0.018738366663455963\r\n",
      "\tbatch 9, loss mae is: 0.017594242468476295\r\n",
      "\tbatch 10, loss mae is: 0.013983849436044693\r\n",
      "\tbatch 11, loss mae is: 0.019890714436769485\r\n",
      "\tbatch 12, loss mae is: 0.014766793698072433\r\n",
      "\tbatch 13, loss mae is: 0.01691272296011448\r\n",
      "\tbatch 14, loss mae is: 0.01898902840912342\r\n",
      "\tbatch 15, loss mae is: 0.01616678200662136\r\n",
      "train cost time:0:00:02.156435, avg_mae_loss:0.01739412936149165\r\n",
      "\r\n",
      "epoch 187, start time:2026-04-16 14:26:56.037670\r\n",
      "\tbatch 0, loss mae is: 0.015996888279914856\r\n",
      "\tbatch 1, loss mae is: 0.013248450122773647\r\n",
      "\tbatch 2, loss mae is: 0.01767868734896183\r\n",
      "\tbatch 3, loss mae is: 0.02163095399737358\r\n",
      "\tbatch 4, loss mae is: 0.011805304326117039\r\n",
      "\tbatch 5, loss mae is: 0.01886361837387085\r\n",
      "\tbatch 6, loss mae is: 0.017153244465589523\r\n",
      "\tbatch 7, loss mae is: 0.013056790456175804\r\n",
      "\tbatch 8, loss mae is: 0.015365546569228172\r\n",
      "\tbatch 9, loss mae is: 0.015812786296010017\r\n",
      "\tbatch 10, loss mae is: 0.018922096118330956\r\n",
      "\tbatch 11, loss mae is: 0.01610284112393856\r\n",
      "\tbatch 12, loss mae is: 0.015414373949170113\r\n",
      "\tbatch 13, loss mae is: 0.022327248007059097\r\n",
      "\tbatch 14, loss mae is: 0.015411365777254105\r\n",
      "\tbatch 15, loss mae is: 0.017667317762970924\r\n",
      "train cost time:0:00:02.199399, avg_mae_loss:0.016653594560921192\r\n",
      "\r\n",
      "epoch 188, start time:2026-04-16 14:26:58.243370\r\n",
      "\tbatch 0, loss mae is: 0.016262000426650047\r\n",
      "\tbatch 1, loss mae is: 0.021129174157977104\r\n",
      "\tbatch 2, loss mae is: 0.014153466559946537\r\n",
      "\tbatch 3, loss mae is: 0.01920057088136673\r\n",
      "\tbatch 4, loss mae is: 0.01639155112206936\r\n",
      "\tbatch 5, loss mae is: 0.01606753282248974\r\n",
      "\tbatch 6, loss mae is: 0.014257395640015602\r\n",
      "\tbatch 7, loss mae is: 0.01689358428120613\r\n",
      "\tbatch 8, loss mae is: 0.014241674914956093\r\n",
      "\tbatch 9, loss mae is: 0.01654435694217682\r\n",
      "\tbatch 10, loss mae is: 0.019207648932933807\r\n",
      "\tbatch 11, loss mae is: 0.013822131790220737\r\n",
      "\tbatch 12, loss mae is: 0.018214695155620575\r\n",
      "\tbatch 13, loss mae is: 0.017424730584025383\r\n",
      "\tbatch 14, loss mae is: 0.02032047137618065\r\n",
      "\tbatch 15, loss mae is: 0.018961459398269653\r\n",
      "train cost time:0:00:02.418395, avg_mae_loss:0.01706827781163156\r\n",
      "\r\n",
      "epoch 189, start time:2026-04-16 14:27:00.667903\r\n",
      "\tbatch 0, loss mae is: 0.02148815430700779\r\n",
      "\tbatch 1, loss mae is: 0.015913089737296104\r\n",
      "\tbatch 2, loss mae is: 0.0197338555008173\r\n",
      "\tbatch 3, loss mae is: 0.01826982945203781\r\n",
      "\tbatch 4, loss mae is: 0.015616640448570251\r\n",
      "\tbatch 5, loss mae is: 0.014195405878126621\r\n",
      "\tbatch 6, loss mae is: 0.015904301777482033\r\n",
      "\tbatch 7, loss mae is: 0.016762780025601387\r\n",
      "\tbatch 8, loss mae is: 0.020218636840581894\r\n",
      "\tbatch 9, loss mae is: 0.017633788287639618\r\n",
      "\tbatch 10, loss mae is: 0.017427749931812286\r\n",
      "\tbatch 11, loss mae is: 0.01630205102264881\r\n",
      "\tbatch 12, loss mae is: 0.01797398552298546\r\n",
      "\tbatch 13, loss mae is: 0.01814195327460766\r\n",
      "\tbatch 14, loss mae is: 0.017298871651291847\r\n",
      "\tbatch 15, loss mae is: 0.01666378788650036\r\n",
      "train cost time:0:00:02.271423, avg_mae_loss:0.017471555096562952\r\n",
      "\r\n",
      "epoch 190, start time:2026-04-16 14:27:02.945728\r\n",
      "\tbatch 0, loss mae is: 0.016888421028852463\r\n",
      "\tbatch 1, loss mae is: 0.014156035147607327\r\n",
      "\tbatch 2, loss mae is: 0.01734934002161026\r\n",
      "\tbatch 3, loss mae is: 0.01798017881810665\r\n",
      "\tbatch 4, loss mae is: 0.02098371647298336\r\n",
      "\tbatch 5, loss mae is: 0.016569284722208977\r\n",
      "\tbatch 6, loss mae is: 0.015406325459480286\r\n",
      "\tbatch 7, loss mae is: 0.01728511042892933\r\n",
      "\tbatch 8, loss mae is: 0.015877990052103996\r\n",
      "\tbatch 9, loss mae is: 0.018740249797701836\r\n",
      "\tbatch 10, loss mae is: 0.018705902621150017\r\n",
      "\tbatch 11, loss mae is: 0.014427176676690578\r\n",
      "\tbatch 12, loss mae is: 0.017588013783097267\r\n",
      "\tbatch 13, loss mae is: 0.01710575260221958\r\n",
      "\tbatch 14, loss mae is: 0.019114414229989052\r\n",
      "\tbatch 15, loss mae is: 0.017261134460568428\r\n",
      "train cost time:0:00:02.121881, avg_mae_loss:0.017214940395206213\r\n",
      "\r\n",
      "eval epoch 190, start time:2026-04-16 14:27:05.067796\r\n",
      "\tbatch 0, loss mae is: 0.025120288133621216, mse is: 0.004473155364394188\r\n",
      "\tbatch 1, loss mae is: 0.034888479858636856, mse is: 0.0067141419276595116\r\n",
      "\tbatch 2, loss mae is: 0.025497080758213997, mse is: 0.003876270027831197\r\n",
      "\tbatch 3, loss mae is: 0.03063766285777092, mse is: 0.010951275937259197\r\n",
      "\tbatch 4, loss mae is: 0.019758474081754684, mse is: 0.003953410778194666\r\n",
      "\tbatch 5, loss mae is: 0.017477823421359062, mse is: 0.004430091008543968\r\n",
      "\tbatch 6, loss mae is: 0.01699257269501686, mse is: 0.003340872935950756\r\n",
      "\tbatch 7, loss mae is: 0.06912992149591446, mse is: 0.023095745593309402\r\n",
      "\tbatch 8, loss mae is: 0.005263481754809618, mse is: 0.0004333870601840317\r\n",
      "\tbatch 9, loss mae is: 0.016083812341094017, mse is: 0.0015960442833602428\r\n",
      "\tbatch 10, loss mae is: 0.05734562128782272, mse is: 0.02898903749883175\r\n",
      "eval cost time:0:00:03.558446, avg_mae_loss:0.028926838062364946, avg_mse_loss:0.008350312037774447\r\n",
      "\r\n",
      "epoch 191, start time:2026-04-16 14:27:06.510549\r\n",
      "\tbatch 0, loss mae is: 0.018863214179873466\r\n",
      "\tbatch 1, loss mae is: 0.017044341191649437\r\n",
      "\tbatch 2, loss mae is: 0.015796640887856483\r\n",
      "\tbatch 3, loss mae is: 0.015978233888745308\r\n",
      "\tbatch 4, loss mae is: 0.013305352069437504\r\n",
      "\tbatch 5, loss mae is: 0.013562493957579136\r\n",
      "\tbatch 6, loss mae is: 0.01628538779914379\r\n",
      "\tbatch 7, loss mae is: 0.018881354480981827\r\n",
      "\tbatch 8, loss mae is: 0.016678929328918457\r\n",
      "\tbatch 9, loss mae is: 0.015719112008810043\r\n",
      "\tbatch 10, loss mae is: 0.01948702707886696\r\n",
      "\tbatch 11, loss mae is: 0.015928687527775764\r\n",
      "\tbatch 12, loss mae is: 0.02088170312345028\r\n",
      "\tbatch 13, loss mae is: 0.015425488352775574\r\n",
      "\tbatch 14, loss mae is: 0.017142752185463905\r\n",
      "\tbatch 15, loss mae is: 0.017601612955331802\r\n",
      "train cost time:0:00:02.072232, avg_mae_loss:0.016786395688541234\r\n",
      "\r\n",
      "epoch 192, start time:2026-04-16 14:27:08.589416\r\n",
      "\tbatch 0, loss mae is: 0.01883672922849655\r\n",
      "\tbatch 1, loss mae is: 0.01438095886260271\r\n",
      "\tbatch 2, loss mae is: 0.014910344034433365\r\n",
      "\tbatch 3, loss mae is: 0.017228608950972557\r\n",
      "\tbatch 4, loss mae is: 0.019690342247486115\r\n",
      "\tbatch 5, loss mae is: 0.01749243400990963\r\n",
      "\tbatch 6, loss mae is: 0.015442978590726852\r\n",
      "\tbatch 7, loss mae is: 0.016595732420682907\r\n",
      "\tbatch 8, loss mae is: 0.021049099043011665\r\n",
      "\tbatch 9, loss mae is: 0.017961356788873672\r\n",
      "\tbatch 10, loss mae is: 0.01340514700859785\r\n",
      "\tbatch 11, loss mae is: 0.019800320267677307\r\n",
      "\tbatch 12, loss mae is: 0.020476123318076134\r\n",
      "\tbatch 13, loss mae is: 0.0179719477891922\r\n",
      "\tbatch 14, loss mae is: 0.01585901901125908\r\n",
      "\tbatch 15, loss mae is: 0.016979699954390526\r\n",
      "train cost time:0:00:02.289029, avg_mae_loss:0.01738005259539932\r\n",
      "\r\n",
      "epoch 193, start time:2026-04-16 14:27:10.884779\r\n",
      "\tbatch 0, loss mae is: 0.015433629974722862\r\n",
      "\tbatch 1, loss mae is: 0.016589077189564705\r\n",
      "\tbatch 2, loss mae is: 0.01974479667842388\r\n",
      "\tbatch 3, loss mae is: 0.019520318135619164\r\n",
      "\tbatch 4, loss mae is: 0.019516849890351295\r\n",
      "\tbatch 5, loss mae is: 0.01695179007947445\r\n",
      "\tbatch 6, loss mae is: 0.016765091568231583\r\n",
      "\tbatch 7, loss mae is: 0.01777183823287487\r\n",
      "\tbatch 8, loss mae is: 0.015584807842969894\r\n",
      "\tbatch 9, loss mae is: 0.0159853957593441\r\n",
      "\tbatch 10, loss mae is: 0.01670781336724758\r\n",
      "\tbatch 11, loss mae is: 0.016809159889817238\r\n",
      "\tbatch 12, loss mae is: 0.01467420905828476\r\n",
      "\tbatch 13, loss mae is: 0.01699448563158512\r\n",
      "\tbatch 14, loss mae is: 0.01438217330724001\r\n",
      "\tbatch 15, loss mae is: 0.013136791065335274\r\n",
      "train cost time:0:00:02.252186, avg_mae_loss:0.016660514229442924\r\n",
      "\r\n",
      "epoch 194, start time:2026-04-16 14:27:13.143223\r\n",
      "\tbatch 0, loss mae is: 0.016323385760188103\r\n",
      "\tbatch 1, loss mae is: 0.019269339740276337\r\n",
      "\tbatch 2, loss mae is: 0.01970238797366619\r\n",
      "\tbatch 3, loss mae is: 0.01604907400906086\r\n",
      "\tbatch 4, loss mae is: 0.015856022015213966\r\n",
      "\tbatch 5, loss mae is: 0.015058033168315887\r\n",
      "\tbatch 6, loss mae is: 0.01841500587761402\r\n",
      "\tbatch 7, loss mae is: 0.018756084144115448\r\n",
      "\tbatch 8, loss mae is: 0.015974806621670723\r\n",
      "\tbatch 9, loss mae is: 0.01617484539747238\r\n",
      "\tbatch 10, loss mae is: 0.015343358740210533\r\n",
      "\tbatch 11, loss mae is: 0.015133175067603588\r\n",
      "\tbatch 12, loss mae is: 0.013642662204802036\r\n",
      "\tbatch 13, loss mae is: 0.015433958731591702\r\n",
      "\tbatch 14, loss mae is: 0.01772874966263771\r\n",
      "\tbatch 15, loss mae is: 0.016254976391792297\r\n",
      "train cost time:0:00:02.159118, avg_mae_loss:0.016569741594139487\r\n",
      "\r\n",
      "epoch 195, start time:2026-04-16 14:27:15.308788\r\n",
      "\tbatch 0, loss mae is: 0.016042592003941536\r\n",
      "\tbatch 1, loss mae is: 0.014675358310341835\r\n",
      "\tbatch 2, loss mae is: 0.01605081744492054\r\n",
      "\tbatch 3, loss mae is: 0.017695022746920586\r\n",
      "\tbatch 4, loss mae is: 0.01623852364718914\r\n",
      "\tbatch 5, loss mae is: 0.01758933812379837\r\n",
      "\tbatch 6, loss mae is: 0.016272790729999542\r\n",
      "\tbatch 7, loss mae is: 0.017175281420350075\r\n",
      "\tbatch 8, loss mae is: 0.014554202556610107\r\n",
      "\tbatch 9, loss mae is: 0.016252055764198303\r\n",
      "\tbatch 10, loss mae is: 0.019225606694817543\r\n",
      "\tbatch 11, loss mae is: 0.018381930887699127\r\n",
      "\tbatch 12, loss mae is: 0.014370273798704147\r\n",
      "\tbatch 13, loss mae is: 0.01911030523478985\r\n",
      "\tbatch 14, loss mae is: 0.02069227024912834\r\n",
      "\tbatch 15, loss mae is: 0.014002489857375622\r\n",
      "train cost time:0:00:02.161474, avg_mae_loss:0.01677055371692404\r\n",
      "\r\n",
      "epoch 196, start time:2026-04-16 14:27:17.477244\r\n",
      "\tbatch 0, loss mae is: 0.015548760071396828\r\n",
      "\tbatch 1, loss mae is: 0.01983962580561638\r\n",
      "\tbatch 2, loss mae is: 0.014665372669696808\r\n",
      "\tbatch 3, loss mae is: 0.013232753612101078\r\n",
      "\tbatch 4, loss mae is: 0.016808390617370605\r\n",
      "\tbatch 5, loss mae is: 0.019223494455218315\r\n",
      "\tbatch 6, loss mae is: 0.01761871948838234\r\n",
      "\tbatch 7, loss mae is: 0.01711786352097988\r\n",
      "\tbatch 8, loss mae is: 0.018055416643619537\r\n",
      "\tbatch 9, loss mae is: 0.016471419483423233\r\n",
      "\tbatch 10, loss mae is: 0.01479322835803032\r\n",
      "\tbatch 11, loss mae is: 0.017777154222130775\r\n",
      "\tbatch 12, loss mae is: 0.016066864132881165\r\n",
      "\tbatch 13, loss mae is: 0.017617402598261833\r\n",
      "\tbatch 14, loss mae is: 0.014381793327629566\r\n",
      "\tbatch 15, loss mae is: 0.016925279051065445\r\n",
      "train cost time:0:00:02.452154, avg_mae_loss:0.016633971128612757\r\n",
      "\r\n",
      "epoch 197, start time:2026-04-16 14:27:19.935356\r\n",
      "\tbatch 0, loss mae is: 0.01637115143239498\r\n",
      "\tbatch 1, loss mae is: 0.016381513327360153\r\n",
      "\tbatch 2, loss mae is: 0.01545078493654728\r\n",
      "\tbatch 3, loss mae is: 0.015248998999595642\r\n",
      "\tbatch 4, loss mae is: 0.021555181592702866\r\n",
      "\tbatch 5, loss mae is: 0.01815972849726677\r\n",
      "\tbatch 6, loss mae is: 0.017240799963474274\r\n",
      "\tbatch 7, loss mae is: 0.018513331189751625\r\n",
      "\tbatch 8, loss mae is: 0.02160193957388401\r\n",
      "\tbatch 9, loss mae is: 0.01790539175271988\r\n",
      "\tbatch 10, loss mae is: 0.015187155455350876\r\n",
      "\tbatch 11, loss mae is: 0.014145482331514359\r\n",
      "\tbatch 12, loss mae is: 0.014767562970519066\r\n",
      "\tbatch 13, loss mae is: 0.013715478591620922\r\n",
      "\tbatch 14, loss mae is: 0.015516519546508789\r\n",
      "\tbatch 15, loss mae is: 0.015398843213915825\r\n",
      "train cost time:0:00:02.400160, avg_mae_loss:0.016697491460945457\r\n",
      "\r\n",
      "epoch 198, start time:2026-04-16 14:27:22.342057\r\n",
      "\tbatch 0, loss mae is: 0.01409314014017582\r\n",
      "\tbatch 1, loss mae is: 0.014479865320026875\r\n",
      "\tbatch 2, loss mae is: 0.01712135784327984\r\n",
      "\tbatch 3, loss mae is: 0.017174813896417618\r\n",
      "\tbatch 4, loss mae is: 0.01615091785788536\r\n",
      "\tbatch 5, loss mae is: 0.014284797944128513\r\n",
      "\tbatch 6, loss mae is: 0.017072364687919617\r\n",
      "\tbatch 7, loss mae is: 0.014617471024394035\r\n",
      "\tbatch 8, loss mae is: 0.016894325613975525\r\n",
      "\tbatch 9, loss mae is: 0.014528200030326843\r\n",
      "\tbatch 10, loss mae is: 0.014314863830804825\r\n",
      "\tbatch 11, loss mae is: 0.01855054870247841\r\n",
      "\tbatch 12, loss mae is: 0.018187301233410835\r\n",
      "\tbatch 13, loss mae is: 0.019198868423700333\r\n",
      "\tbatch 14, loss mae is: 0.018958088010549545\r\n",
      "\tbatch 15, loss mae is: 0.017644476145505905\r\n",
      "train cost time:0:00:02.263508, avg_mae_loss:0.016454462544061244\r\n",
      "\r\n",
      "epoch 199, start time:2026-04-16 14:27:24.611795\r\n",
      "\tbatch 0, loss mae is: 0.014731407165527344\r\n",
      "\tbatch 1, loss mae is: 0.014511801302433014\r\n",
      "\tbatch 2, loss mae is: 0.016387445852160454\r\n",
      "\tbatch 3, loss mae is: 0.01530705951154232\r\n",
      "\tbatch 4, loss mae is: 0.012762084603309631\r\n",
      "\tbatch 5, loss mae is: 0.014915881678462029\r\n",
      "\tbatch 6, loss mae is: 0.01853853464126587\r\n",
      "\tbatch 7, loss mae is: 0.017333367839455605\r\n",
      "\tbatch 8, loss mae is: 0.017315544188022614\r\n",
      "\tbatch 9, loss mae is: 0.016883783042430878\r\n",
      "\tbatch 10, loss mae is: 0.015571299009025097\r\n",
      "\tbatch 11, loss mae is: 0.012080667540431023\r\n",
      "\tbatch 12, loss mae is: 0.020599454641342163\r\n",
      "\tbatch 13, loss mae is: 0.01731073297560215\r\n",
      "\tbatch 14, loss mae is: 0.021306615322828293\r\n",
      "\tbatch 15, loss mae is: 0.020578738301992416\r\n",
      "train cost time:0:00:02.132119, avg_mae_loss:0.01663340110098943\r\n",
      "\r\n"
     ]
    }
   ],
   "source": [
    "# 训练\n",
    "train()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-04-16T06:27:26.807518Z",
     "iopub.status.busy": "2026-04-16T06:27:26.807020Z",
     "iopub.status.idle": "2026-04-16T06:27:26.967083Z",
     "shell.execute_reply": "2026-04-16T06:27:26.966470Z",
     "shell.execute_reply.started": "2026-04-16T06:27:26.807467Z"
    },
    "jupyter": {
     "outputs_hidden": false
    },
    "scrolled": true,
    "tags": []
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/conda/envs/python35-paddle120-env/lib/python3.10/site-packages/paddle/jit/dy2static/program_translator.py:712: UserWarning: full_graph=False don't support input_spec arguments. It will not produce any effect.\r\n",
      "You can set full_graph=True, then you can assign input spec.\r\n",
      "\r\n",
      "  warnings.warn(\r\n"
     ]
    }
   ],
   "source": [
    "# 保存为推理模型\n",
    "save_jit()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "请点击[此处](https://ai.baidu.com/docs#/AIStudio_Project_Notebook/a38e5576)查看本环境基本用法.  <br>\n",
    "Please click [here ](https://ai.baidu.com/docs#/AIStudio_Project_Notebook/a38e5576) for more detailed instructions. "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "py35-paddle1.2.0"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐