(项目)20251119大数据项目实施3——调试后台&&测试API

一、确认是否需要手动启动Python脚本

检查项目结构,确认是否需要手动启动 Python 脚本,以及 /api/training/start 端点是否会自动启动。

查看 TrainingTaskService 的完整实现,确认 Python 脚本的启动方式:

不需要手动启动 Python 脚本。调用 curl -X POST http://localhost:8080/api/training/start 即可自动启动所有训练脚本。

工作原理

  1. 调用 /api/training/start 后,TrainingController 会触发训练任务。

  2. TrainingTaskService 会异步执行,按顺序自动运行以下 Python 脚本:

  • 步骤 1:训练进口数量模型 (Trade_Transformer_LSTM_quantity.py)

  • 步骤 2:训练进口单价模型 (Trade_Transformer_LSTM_price.py)

  • 步骤 3:训练出口数量模型 (Trade_Transformer_LSTM_quantity.py)

  • 步骤 4:训练出口单价模型 (Trade_Transformer_LSTM_price.py)

  1. PythonScriptService 使用 ProcessBuilder 自动启动 Python 进程执行这些脚本。

使用步骤

  1. 确保 Spring Boot 应用已启动(运行在 http://localhost:8080)

  2. 确保 application.yml 中的配置正确:

  • Python 解释器路径

  • CSV 数据文件路径

  • 模型输出路径

  1. 调用 API 启动训练:

    curl -X POST http://localhost:8080/api/training/start

  2. 查询任务状态(使用返回的 taskId):

    curl http://localhost:8080/api/training/status/{taskId}

注意事项

  • 训练任务会异步执行,不会阻塞 API 响应

  • 可以通过状态查询 API 实时查看训练进度

  • 确保 Python 环境已安装所需依赖(pandas, numpy, torch 等)

  • 确保 CSV 数据文件路径正确且文件存在

总结:只需调用 API 即可,系统会自动执行所有 Python 训练脚本。

二、Java版本

  1. 将 Java 版本从 1.8 更新到 17(匹配你的 Java 环境)

  2. 明确指定 Lombok 版本为 1.18.30(支持 Java 17)

  3. 添加 Maven 编译器插件配置

三、启动springboot项目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.14)

2025-11-19 12:36:11 - Starting TradeApplication using Java 23.0.2 on LAPTOP-J557NEOQ with PID 26832 (D:\TradeSpringBoot\target\classes started by H in D:\TradeSpringBoot)
2025-11-19 12:36:11 - Running with Spring Boot v2.7.14, Spring v5.3.29
2025-11-19 12:36:11 - No active profile set, falling back to 1 default profile: "default"
2025-11-19 12:36:12 - Tomcat initialized with port(s): 8080 (http)
2025-11-19 12:36:12 - Starting service [Tomcat]
2025-11-19 12:36:12 - Starting Servlet engine: [Apache Tomcat/9.0.78]
2025-11-19 12:36:12 - Initializing Spring embedded WebApplicationContext
2025-11-19 12:36:12 - Root WebApplicationContext: initialization completed in 798 ms
2025-11-19 12:36:12 - === Python 脚本配置加载 ===
2025-11-19 12:36:12 - Python 解释器: python
2025-11-19 12:36:12 - 脚本基础路径: D:/TradeSpringBoot/python-scripts
2025-11-19 12:36:12 - 进口 CSV 路径: D:/TradeSpringBoot/data/进口/merged_input.csv
2025-11-19 12:36:12 - 出口 CSV 路径: D:/TradeSpringBoot/data/出口/merged_output.csv
2025-11-19 12:36:12 - 进口模型输出路径: model/trade_Transformer/in
2025-11-19 12:36:12 - 出口模型输出路径: model/trade_Transformer/out
2025-11-19 12:36:12 - ========================
2025-11-19 12:36:12 - Tomcat started on port(s): 8080 (http) with context path '/api'
2025-11-19 12:36:12 - Started TradeApplication in 1.422 seconds (JVM running for 1.947)

四、测试接口一:启动脚本

curl -X POST http://localhost:8080/api/training/start

响应:

1
2
3
4
5
{
"success": true,
"message": "训练任务已启动",
"taskId": "f0fce5d6-6eff-497f-810d-0a156b9f90b6"
}

开始执行步骤 1/6

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2025-11-19 13:39:44 - Initializing Spring DispatcherServlet 'dispatcherServlet'
2025-11-19 13:39:44 - Initializing Servlet 'dispatcherServlet'
2025-11-19 13:39:44 - Completed initialization in 0 ms
2025-11-19 13:39:44 - 收到训练任务启动请求
2025-11-19 13:39:44 - 开始执行步骤 1/6: 训练进口数量模型
2025-11-19 13:39:44 - 执行命令: D:\programs\Python\Python39\python.exe D:\TradeSpringBoot\python-scripts\Trade_Transformer_LSTM_quantity.py --csv_path D:/TradeSpringBoot/data/进口/merged_input.csv --model_output_path model/trade_Transformer/in --trade_type in --target quantity
2025-11-19 13:39:46 - [Trade_Transformer_LSTM_quantity.py] ERROR:
2025-11-19 13:39:46 - [Trade_Transformer_LSTM_quantity.py] 成功使用 utf-8 编码读取文件
2025-11-19 13:39:46 - [Trade_Transformer_LSTM_quantity.py] CSV 文件列名: ['数据年月', '贸易伙伴编码', '贸易伙伴名称', '商品编码', '商品名称', '贸易方式编码', '贸易方式名称', '注册地编码', '注册地名称', '第一数量', '第一计量单位', '第二数量', '第二计量单位', '人民币', 'Unnamed: 14']
2025-11-19 13:39:46 - [Trade_Transformer_LSTM_quantity.py] 列名类型: ['str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str']
2025-11-19 13:39:46 - [Trade_Transformer_LSTM_quantity.py] 匹配成功: '数据年月' <- '数据年月'
2025-11-19 13:39:46 - [Trade_Transformer_LSTM_quantity.py] 匹配成功: '贸易伙伴编码' <- '贸易伙伴编码'
2025-11-19 13:39:46 - [Trade_Transformer_LSTM_quantity.py] 匹配成功: '商品编码' <- '商品编码'
2025-11-19 13:39:46 - [Trade_Transformer_LSTM_quantity.py] 匹配成功: '贸易方式编码' <- '贸易方式编码'
2025-11-19 13:39:46 - [Trade_Transformer_LSTM_quantity.py] 匹配成功: '注册地编码' <- '注册地编码'
2025-11-19 13:39:46 - [Trade_Transformer_LSTM_quantity.py] 部分匹配成功: '计量单位' <- '第一计量单位'
2025-11-19 13:39:46 - [Trade_Transformer_LSTM_quantity.py] 匹配成功: '数量' <- '第一数量'
2025-11-19 13:39:46 - [Trade_Transformer_LSTM_quantity.py] 匹配成功: '人民币' <- '人民币'
2025-11-19 13:39:46 - [Trade_Transformer_LSTM_quantity.py] 列名映射完成: {'数据年月': '数据年月', '贸易伙伴编码': '贸易伙伴编码', '商品编码': '商品编码', '贸易方式编码': '贸易方式编码', '注册地编码': '注册地编码', '计量单位': '第一计量单位', '数量': '第一数量', '人民币': '人民币'}
2025-11-19 13:39:46 - [Trade_Transformer_LSTM_quantity.py] 开始训练...

执行步骤1/6:成功

响应:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[
{
"taskId": "457c86fa-93d1-45c2-92d9-310782bca221",
"overallStatus": "RUNNING",
"startTime": "2025-11-19T14:25:32.2754072",
"endTime": null,
"totalDuration": null,
"currentStep": 2,
"totalSteps": 6,
"scriptResults": [
{
"scriptName": "Trade_Transformer_LSTM_quantity.py",
"status": "SUCCESS",
"startTime": "2025-11-19T14:25:32.2844124",
"endTime": "2025-11-19T14:26:12.9373518",
"duration": 40,
"errorMessage": null,
"output": "成功使用 gbk 编码读取文件\nCSV 文件列名: ['数据年月', '贸易伙伴编码', '贸易伙伴名称', '商品编码', '商品名称', '贸易方式编码', '贸易方式名称', '注册地编码', '注册地名称', '数量', '计量单位', '人民币', '单价']\n列名类型: ['str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str']\n匹配成功: '数据年月' <- '数据年月'\n匹配成功: '贸易伙伴编码' <- '贸易伙伴编码'\n匹配成功: '商品编码' <- '商品编码'\n匹配成功: '贸易方式编码' <- '贸易方式编码'\n匹配成功: '注册地编码' <- '注册地编码'\n匹配成功: '计量单位' <- '计量单位'\n匹配成功: '数量' <- '数量'\n匹配成功: '人民币' <- '人民币'\n列名映射完成: {'数据年月': '数据年月', '贸易伙伴编码': '贸易伙伴编码', '商品编码': '商品编码', '贸易方式编码': '贸易方式编码', '注册地编码': '注册地编码', '计量单位': '计量单位', '数量': '数量', '人民币': '人民币'}\n开始训练...\nEpoch 1/150 | Train Loss: 0.8873 | Val Loss: 6.3603\nValidation loss decreased (inf --> 6.360291). Saving model...\nEpoch 2/150 | Train Loss: 6.2616 | Val Loss: 6.9923\nEarlyStopping counter: 1 out of 100\nEpoch 3/150 | Train Loss: 7.8295 | Val Loss: 1.3593\nValidation loss decreased (6.360291 --> 1.359309). Saving model...\nEpoch 4/150 | Train Loss: 1.8552 | Val Loss: 0.4494\nValidation loss decreased (1.359309 --> 0.449411). Saving model...\nEpoch 5/150 | Train Loss: 1.3633 | Val Loss: 0.4300\nValidation loss decreased (0.449411 --> 0.430005). Saving model...\nEpoch 6/150 | Train Loss: 1.4189 | Val Loss: 0.3017\nValidation loss decreased (0.430005 --> 0.301750). Saving model...\nEpoch 7/150 | Train Loss: 0.9109 | Val Loss: 0.8193\nEarlyStopping counter: 1 out of 100\nEpoch 8/150 | Train Loss: 1.0246 | Val Loss: 1.0237\nEarlyStopping counter: 2 out of 100\nEpoch 9/150 | Train Loss: 1.1983 | Val Loss: 0.7670\nEarlyStopping counter: 3 out of 100\nEpoch 10/150 | Train Loss: 0.9915 | Val Loss: 0.4099\nEarlyStopping counter: 4 out of 100\nEpoch 11/150 | Train Loss: 0.8937 | Val Loss: 0.2824\nValidation loss decreased (0.301750 --> 0.282365). Saving model...\nEpoch 12/150 | Train Loss: 1.0141 | Val Loss: 0.2876\nEarlyStopping counter: 1 out of 100\nEpoch 13/150 | Train Loss: 0.9972 | Val Loss: 0.2816\nValidation loss decreased (0.282365 --> 0.281648). Saving model...\nEpoch 14/150 | Train Loss: 1.0039 | Val Loss: 0.3184\nEarlyStopping counter: 1 out of 100\nEpoch 15/150 | Train Loss: 0.9017 | Val Loss: 0.4874\nEarlyStopping counter: 2 out of 100\nEpoch 16/150 | Train Loss: 0.9531 | Val Loss: 0.6186\nEarlyStopping counter: 3 out of 100\nEpoch 17/150 | Train Loss: 0.9445 | Val Loss: 0.6171\nEarlyStopping counter: 4 out of 100\nEpoch 18/150 | Train Loss: 1.0066 | Val Loss: 0.5029\nEarlyStopping counter: 5 out of 100\nEpoch 19/150 | Train Loss: 0.9779 | Val Loss: 0.3690\nEarlyStopping counter: 6 out of 100\nEpoch 20/150 | Train Loss: 0.9117 | Val Loss: 0.3388\nEarlyStopping counter: 7 out of 100\nEpoch 21/150 | Train Loss: 0.8652 | Val Loss: 0.3330\nEarlyStopping counter: 8 out of 100\nEpoch 22/150 | Train Loss: 0.9138 | Val Loss: 0.3432\nEarlyStopping counter: 9 out of 100\nEpoch 23/150 | Train Loss: 0.9252 | Val Loss: 0.3713\nEarlyStopping counter: 10 out of 100\nEpoch 24/150 | Train Loss: 0.9255 | Val Loss: 0.4008\nEarlyStopping counter: 11 out of 100\nEpoch 25/150 | Train Loss: 0.9276 | Val Loss: 0.4202\nEarlyStopping counter: 12 out of 100\nEpoch 26/150 | Train Loss: 0.8635 | Val Loss: 0.4171\nEarlyStopping counter: 13 out of 100\nEpoch 27/150 | Train Loss: 0.8385 | Val Loss: 0.4119\nEarlyStopping counter: 14 out of 100\nEpoch 28/150 | Train Loss: 0.9516 | Val Loss: 0.4039\nEarlyStopping counter: 15 out of 100\nEpoch 29/150 | Train Loss: 0.8594 | Val Loss: 0.3885\nEarlyStopping counter: 16 out of 100\nEpoch 30/150 | Train Loss: 0.9137 | Val Loss: 0.3704\nEarlyStopping counter: 17 out of 100\nEpoch 31/150 | Train Loss: 0.9070 | Val Loss: 0.3580\nEarlyStopping counter: 18 out of 100\nEpoch 32/150 | Train Loss: 0.8985 | Val Loss: 0.3542\nEarlyStopping counter: 19 out of 100\nEpoch 33/150 | Train Loss: 0.8354 | Val Loss: 0.3508\nEarlyStopping counter: 20 out of 100\nEpoch 34/150 | Train Loss: 0.9553 | Val Loss: 0.3462\nEarlyStopping counter: 21 out of 100\nEpoch 35/150 | Train Loss: 0.7920 | Val Loss: 0.3422\nEarlyStopping counter: 22 out of 100\nEpoch 36/150 | Train Loss: 0.9383 | Val Loss: 0.3390\nEarlyStopping counter: 23 out of 100\nEpoch 37/150 | Train Loss: 0.8815 | Val Loss: 0.3377\nEarlyStopping counter: 24 out of 100\nEpoch 38/150 | Train Loss: 0.8461 | Val Loss: 0.3382\nEarlyStopping counter: 25 out of 100\nEpoch 39/150 | Train Loss: 0.8568 | Val Loss: 0.3397\nEarlyStopping counter: 26 out of 100\nEpoch 40/150 | Train Loss: 1.0074 | Val Loss: 0.3424\nEarlyStopping counter: 27 out of 100\nEpoch 41/150 | Train Loss: 0.9483 | Val Loss: 0.3457\nEarlyStopping counter: 28 out of 100\nEpoch 42/150 | Train Loss: 0.8914 | Val Loss: 0.3497\nEarlyStopping counter: 29 out of 100\nEpoch 43/150 | Train Loss: 0.9292 | Val Loss: 0.3548\nEarlyStopping counter: 30 out of 100\nEpoch 44/150 | Train Loss: 0.7993 | Val Loss: 0.3575\nEarlyStopping counter: 31 out of 100\nEpoch 45/150 | Train Loss: 0.9911 | Val Loss: 0.3608\nEarlyStopping counter: 32 out of 100\nEpoch 46/150 | Train Loss: 0.8954 | Val Loss: 0.3643\nEarlyStopping counter: 33 out of 100\nEpoch 47/150 | Train Loss: 0.9292 | Val Loss: 0.3670\nEarlyStopping counter: 34 out of 100\nEpoch 48/150 | Train Loss: 0.8804 | Val Loss: 0.3694\nEarlyStopping counter: 35 out of 100\nEpoch 49/150 | Train Loss: 0.9568 | Val Loss: 0.3719\nEarlyStopping counter: 36 out of 100\nEpoch 50/150 | Train Loss: 0.8454 | Val Loss: 0.3730\nEarlyStopping counter: 37 out of 100\nEpoch 51/150 | Train Loss: 0.8991 | Val Loss: 0.3739\nEarlyStopping counter: 38 out of 100\nEpoch 52/150 | Train Loss: 0.9384 | Val Loss: 0.3751\nEarlyStopping counter: 39 out of 100\nEpoch 53/150 | Train Loss: 0.9832 | Val Loss: 0.3763\nEarlyStopping counter: 40 out of 100\nEpoch 54/150 | Train Loss: 0.9171 | Val Loss: 0.3773\nEarlyStopping counter: 41 out of 100\nEpoch 55/150 | Train Loss: 0.9439 | Val Loss: 0.3782\nEarlyStopping counter: 42 out of 100\nEpoch 56/150 | Train Loss: 0.9317 | Val Loss: 0.3786\nEarlyStopping counter: 43 out of 100\nEpoch 57/150 | Train Loss: 0.9205 | Val Loss: 0.3790\nEarlyStopping counter: 44 out of 100\nEpoch 58/150 | Train Loss: 0.7981 | Val Loss: 0.3793\nEarlyStopping counter: 45 out of 100\nEpoch 59/150 | Train Loss: 0.9513 | Val Loss: 0.3795\nEarlyStopping counter: 46 out of 100\nEpoch 60/150 | Train Loss: 0.9092 | Val Loss: 0.3797\nEarlyStopping counter: 47 out of 100\nEpoch 61/150 | Train Loss: 0.9165 | Val Loss: 0.3797\nEarlyStopping counter: 48 out of 100\nEpoch 62/150 | Train Loss: 0.9085 | Val Loss: 0.3797\nEarlyStopping counter: 49 out of 100\nEpoch 63/150 | Train Loss: 0.9882 | Val Loss: 0.3797\nEarlyStopping counter: 50 out of 100\nEpoch 64/150 | Train Loss: 0.9588 | Val Loss: 0.3797\nEarlyStopping counter: 51 out of 100\nEpoch 65/150 | Train Loss: 0.8511 | Val Loss: 0.3797\nEarlyStopping counter: 52 out of 100\nEpoch 66/150 | Train Loss: 0.8739 | Val Loss: 0.3796\nEarlyStopping counter: 53 out of 100\nEpoch 67/150 | Train Loss: 0.8409 | Val Loss: 0.3795\nEarlyStopping counter: 54 out of 100\nEpoch 68/150 | Train Loss: 0.8923 | Val Loss: 0.3794\nEarlyStopping counter: 55 out of 100\nEpoch 69/150 | Train Loss: 0.8118 | Val Loss: 0.3794\nEarlyStopping counter: 56 out of 100\nEpoch 70/150 | Train Loss: 0.8960 | Val Loss: 0.3794\nEarlyStopping counter: 57 out of 100\nEpoch 71/150 | Train Loss: 0.8861 | Val Loss: 0.3794\nEarlyStopping counter: 58 out of 100\nEpoch 72/150 | Train Loss: 0.9685 | Val Loss: 0.3793\nEarlyStopping counter: 59 out of 100\nEpoch 73/150 | Train Loss: 0.9746 | Val Loss: 0.3793\nEarlyStopping counter: 60 out of 100\nEpoch 74/150 | Train Loss: 0.9141 | Val Loss: 0.3793\nEarlyStopping counter: 61 out of 100\nEpoch 75/150 | Train Loss: 0.9332 | Val Loss: 0.3792\nEarlyStopping counter: 62 out of 100\nEpoch 76/150 | Train Loss: 0.8714 | Val Loss: 0.3791\nEarlyStopping counter: 63 out of 100\nEpoch 77/150 | Train Loss: 0.9070 | Val Loss: 0.3790\nEarlyStopping counter: 64 out of 100\nEpoch 78/150 | Train Loss: 0.9075 | Val Loss: 0.3790\nEarlyStopping counter: 65 out of 100\nEpoch 79/150 | Train Loss: 0.8548 | Val Loss: 0.3789\nEarlyStopping counter: 66 out of 100\nEpoch 80/150 | Train Loss: 0.8886 | Val Loss: 0.3789\nEarlyStopping counter: 67 out of 100\nEpoch 81/150 | Train Loss: 0.9114 | Val Loss: 0.3789\nEarlyStopping counter: 68 out of 100\nEpoch 82/150 | Train Loss: 0.9114 | Val Loss: 0.3789\nEarlyStopping counter: 69 out of 100\nEpoch 83/150 | Train Loss: 0.9030 | Val Loss: 0.3788\nEarlyStopping counter: 70 out of 100\nEpoch 84/150 | Train Loss: 0.8942 | Val Loss: 0.3788\nEarlyStopping counter: 71 out of 100\nEpoch 85/150 | Train Loss: 0.8471 | Val Loss: 0.3788\nEarlyStopping counter: 72 out of 100\nEpoch 86/150 | Train Loss: 1.0140 | Val Loss: 0.3788\nEarlyStopping counter: 73 out of 100\nEpoch 87/150 | Train Loss: 0.8820 | Val Loss: 0.3788\nEarlyStopping counter: 74 out of 100\nEpoch 88/150 | Train Loss: 0.8501 | Val Loss: 0.3787\nEarlyStopping counter: 75 out of 100\nEpoch 89/150 | Train Loss: 0.9864 | Val Loss: 0.3787\nEarlyStopping counter: 76 out of 100\nEpoch 90/150 | Train Loss: 0.8989 | Val Loss: 0.3787\nEarlyStopping counter: 77 out of 100\nEpoch 91/150 | Train Loss: 0.9454 | Val Loss: 0.3787\nEarlyStopping counter: 78 out of 100\nEpoch 92/150 | Train Loss: 0.9214 | Val Loss: 0.3787\nEarlyStopping counter: 79 out of 100\nEpoch 93/150 | Train Loss: 0.9185 | Val Loss: 0.3787\nEarlyStopping counter: 80 out of 100\nEpoch 94/150 | Train Loss: 0.9151 | Val Loss: 0.3787\nEarlyStopping counter: 81 out of 100\nEpoch 95/150 | Train Loss: 0.8996 | Val Loss: 0.3787\nEarlyStopping counter: 82 out of 100\nEpoch 96/150 | Train Loss: 0.9089 | Val Loss: 0.3787\nEarlyStopping counter: 83 out of 100\nEpoch 97/150 | Train Loss: 0.9245 | Val Loss: 0.3787\nEarlyStopping counter: 84 out of 100\nEpoch 98/150 | Train Loss: 0.9332 | Val Loss: 0.3786\nEarlyStopping counter: 85 out of 100\nEpoch 99/150 | Train Loss: 0.9564 | Val Loss: 0.3786\nEarlyStopping counter: 86 out of 100\nEpoch 100/150 | Train Loss: 0.8996 | Val Loss: 0.3786\nEarlyStopping counter: 87 out of 100\nEpoch 101/150 | Train Loss: 0.9775 | Val Loss: 0.3786\nEarlyStopping counter: 88 out of 100\nEpoch 102/150 | Train Loss: 0.9528 | Val Loss: 0.3786\nEarlyStopping counter: 89 out of 100\nEpoch 103/150 | Train Loss: 0.9652 | Val Loss: 0.3786\nEarlyStopping counter: 90 out of 100\nEpoch 104/150 | Train Loss: 0.8674 | Val Loss: 0.3786\nEarlyStopping counter: 91 out of 100\nEpoch 105/150 | Train Loss: 0.9504 | Val Loss: 0.3786\nEarlyStopping counter: 92 out of 100\nEpoch 106/150 | Train Loss: 0.9169 | Val Loss: 0.3786\nEarlyStopping counter: 93 out of 100\nEpoch 107/150 | Train Loss: 0.9757 | Val Loss: 0.3786\nEarlyStopping counter: 94 out of 100\nEpoch 108/150 | Train Loss: 0.9754 | Val Loss: 0.3786\nEarlyStopping counter: 95 out of 100\nEpoch 109/150 | Train Loss: 0.8573 | Val Loss: 0.3786\nEarlyStopping counter: 96 out of 100\nEpoch 110/150 | Train Loss: 0.9168 | Val Loss: 0.3786\nEarlyStopping counter: 97 out of 100\nEpoch 111/150 | Train Loss: 0.9595 | Val Loss: 0.3786\nEarlyStopping counter: 98 out of 100\nEpoch 112/150 | Train Loss: 0.8465 | Val Loss: 0.3786\nEarlyStopping counter: 99 out of 100\nEpoch 113/150 | Train Loss: 0.8799 | Val Loss: 0.3786\nEarlyStopping counter: 100 out of 100\nEarly stopping\n开始验证...\n\n数量 评估:\nR2 Score: -0.0406\nMSE: 83324411904.0000\nMAE: 216475.06\n部分预测值 VS 真实值:\n预测: 数量=131606.78 真实: 数量=36503.99\n预测: 数量=131609.80 真实: 数量=18771.99\n预测: 数量=131623.98 真实: 数量=20663.99\n预测: 数量=131620.47 真实: 数量=678620.12\n✅ 模型和预处理器已成功保存!\n"
}
],
"errorMessage": null,
"progress": 33.33
}
]
  • 控制台输出:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2025-11-19 13:40:08 - [Trade_Transformer_LSTM_quantity.py] Epoch 122/150 | Train Loss: 0.1288 | Val Loss: 0.1878
2025-11-19 13:40:08 - [Trade_Transformer_LSTM_quantity.py] EarlyStopping counter: 100 out of 100
2025-11-19 13:40:08 - [Trade_Transformer_LSTM_quantity.py] Early stopping
2025-11-19 13:40:08 - [Trade_Transformer_LSTM_quantity.py] 开始验证...
2025-11-19 13:40:08 - [Trade_Transformer_LSTM_quantity.py]
2025-11-19 13:40:08 - [Trade_Transformer_LSTM_quantity.py] 数量 评估:
2025-11-19 13:40:08 - [Trade_Transformer_LSTM_quantity.py] R2 Score: -0.6266
2025-11-19 13:40:08 - [Trade_Transformer_LSTM_quantity.py] MSE: 148245158297600.0000
2025-11-19 13:40:08 - [Trade_Transformer_LSTM_quantity.py] MAE: 8240796.50
2025-11-19 13:40:08 - [Trade_Transformer_LSTM_quantity.py] 部分预测值 VS 真实值:
2025-11-19 13:40:08 - [Trade_Transformer_LSTM_quantity.py] 预测: 数量=989024.88 真实: 数量=23600220.00
2025-11-19 13:40:08 - [Trade_Transformer_LSTM_quantity.py] 预测: 数量=989025.81 真实: 数量=135999.98
2025-11-19 13:40:08 - [Trade_Transformer_LSTM_quantity.py] 预测: 数量=989014.50 真实: 数量=474599.91
2025-11-19 13:40:08 - [Trade_Transformer_LSTM_quantity.py] 预测: 数量=989006.94 真实: 数量=9973557.00
2025-11-19 13:40:08 - [Trade_Transformer_LSTM_quantity.py] ✅ 模型和预处理器已成功保存!
2025-11-19 13:40:08 - 脚本执行成功: D:\TradeSpringBoot\python-scripts\Trade_Transformer_LSTM_quantity.py, 耗时: 24 秒

开始执行步骤2/6

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2025-11-19 13:55:32 - 开始执行步骤 2/6: 训练进口单价模型
2025-11-19 13:55:32 - 执行命令: D:\programs\Python\Python39\python.exe D:\TradeSpringBoot\python-scripts\Trade_Transformer_LSTM_price.py --csv_path D:/TradeSpringBoot/data/进口/merged_input.csv --model_output_path model/trade_Transformer/in --trade_type in --target price
2025-11-19 13:55:35 - [Trade_Transformer_LSTM_price.py] 成功使用 gbk 编码读取文件
2025-11-19 13:55:35 - [Trade_Transformer_LSTM_price.py] ERROR:
2025-11-19 13:55:35 - [Trade_Transformer_LSTM_price.py] CSV 文件列名: ['数据年月', '贸易伙伴编码', '贸易伙伴名称', '商品编码', '商品名称', '贸易方式编码', '贸易方式名称', '注册地编码', '注册地名称', '数量', '计量单位', '人民币', '单价']
2025-11-19 13:55:35 - [Trade_Transformer_LSTM_price.py] 列名类型: ['str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str']
2025-11-19 13:55:35 - [Trade_Transformer_LSTM_price.py] 匹配成功: '数据年月' <- '数据年月'
2025-11-19 13:55:35 - [Trade_Transformer_LSTM_price.py] 匹配成功: '贸易伙伴编码' <- '贸易伙伴编码'
2025-11-19 13:55:35 - [Trade_Transformer_LSTM_price.py] 匹配成功: '商品编码' <- '商品编码'
2025-11-19 13:55:35 - [Trade_Transformer_LSTM_price.py] 匹配成功: '贸易方式编码' <- '贸易方式编码'
2025-11-19 13:55:35 - [Trade_Transformer_LSTM_price.py] 匹配成功: '注册地编码' <- '注册地编码'
2025-11-19 13:55:35 - [Trade_Transformer_LSTM_price.py] 匹配成功: '计量单位' <- '计量单位'
2025-11-19 13:55:35 - [Trade_Transformer_LSTM_price.py] 匹配成功: '数量' <- '数量'
2025-11-19 13:55:35 - [Trade_Transformer_LSTM_price.py] 匹配成功: '人民币' <- '人民币'
2025-11-19 13:55:35 - [Trade_Transformer_LSTM_price.py] 匹配成功: '单价' <- '单价'
2025-11-19 13:55:35 - [Trade_Transformer_LSTM_price.py] 列名映射完成: {'数据年月': '数据年月', '贸易伙伴编码': '贸易伙伴编码', '商品编码': '商品编码', '贸易方式编码': '贸易方式编码', '注册地编码': '注册地编码', '计量单位': '计量单位', '数量': '数量', '人民币': '人民币', '单价': '单价'}
2025-11-19 13:55:35 - [Trade_Transformer_LSTM_price.py] 开始训练...

执行步骤2/6:成功

1
2
3
4
5
6
7
8
9
10
11
12
2025-11-19 13:56:02 - [Trade_Transformer_LSTM_price.py] 开始验证...
2025-11-19 13:56:02 - [Trade_Transformer_LSTM_price.py]
2025-11-19 13:56:02 - [Trade_Transformer_LSTM_price.py] 单价 评估:
2025-11-19 13:56:02 - [Trade_Transformer_LSTM_price.py] R2 Score: -0.6367
2025-11-19 13:56:02 - [Trade_Transformer_LSTM_price.py] MSE: 3.4887
2025-11-19 13:56:02 - [Trade_Transformer_LSTM_price.py] MAE: 1.46
2025-11-19 13:56:02 - [Trade_Transformer_LSTM_price.py]
2025-11-19 13:56:02 - [Trade_Transformer_LSTM_price.py] 部分预测值 VS 真实值:
2025-11-19 13:56:02 - [Trade_Transformer_LSTM_price.py] 预测: 单价=15.45 真实: 单价=15.75
2025-11-19 13:56:02 - [Trade_Transformer_LSTM_price.py] 预测: 单价=15.45 真实: 单价=12.83
2025-11-19 13:56:02 - [Trade_Transformer_LSTM_price.py] ✅ 模型和预处理器已成功保存!
2025-11-19 13:56:02 - 脚本执行成功: D:\TradeSpringBoot\python-scripts\Trade_Transformer_LSTM_price.py, 耗时: 30 秒

开始执行步骤3/6

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2025-11-19 14:47:04 - 开始执行步骤 3/6: 训练出口数量模型
2025-11-19 14:47:04 - 执行命令: D:\programs\Python\Python39\python.exe D:\TradeSpringBoot\python-scripts\Trade_Transformer_LSTM_quantity.py --csv_path D:/TradeSpringBoot/data/出口/merged_output.csv --model_output_path model/trade_Transformer/out --trade_type out --target quantity
2025-11-19 14:47:07 - [Trade_Transformer_LSTM_quantity.py] 成功使用 gbk 编码读取文件
2025-11-19 14:47:07 - [Trade_Transformer_LSTM_quantity.py] CSV 文件列名: ['数据年月', '贸易伙伴编码', '贸易伙伴名称', '商品编码', '商品名称', '贸易方式编码', '贸易方式名称', '注册地编码', '注册地名称', '数量', '计量单位', '人民币', '单价']
2025-11-19 14:47:07 - [Trade_Transformer_LSTM_quantity.py] 列名类型: ['str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str']
2025-11-19 14:47:07 - [Trade_Transformer_LSTM_quantity.py] 匹配成功: '数据年月' <- '数据年月'
2025-11-19 14:47:07 - [Trade_Transformer_LSTM_quantity.py] ERROR:
2025-11-19 14:47:07 - [Trade_Transformer_LSTM_quantity.py] 匹配成功: '贸易伙伴编码' <- '贸易伙伴编码'
2025-11-19 14:47:07 - [Trade_Transformer_LSTM_quantity.py] 匹配成功: '商品编码' <- '商品编码'
2025-11-19 14:47:07 - [Trade_Transformer_LSTM_quantity.py] 匹配成功: '贸易方式编码' <- '贸易方式编码'
2025-11-19 14:47:07 - [Trade_Transformer_LSTM_quantity.py] 匹配成功: '注册地编码' <- '注册地编码'
2025-11-19 14:47:07 - [Trade_Transformer_LSTM_quantity.py] 匹配成功: '计量单位' <- '计量单位'
2025-11-19 14:47:07 - [Trade_Transformer_LSTM_quantity.py] 匹配成功: '数量' <- '数量'
2025-11-19 14:47:07 - [Trade_Transformer_LSTM_quantity.py] 匹配成功: '人民币' <- '人民币'
2025-11-19 14:47:07 - [Trade_Transformer_LSTM_quantity.py] 列名映射完成: {'数据年月': '数据年月', '贸易伙伴编码': '贸易伙伴编码', '商品编码': '商品编码', '贸易方式编码': '贸易方式编码', '注册地编码': '注册地编码', '计量单位': '计量单位', '数量': '数量', '人民币': '人民币'}
2025-11-19 14:47:07 - [Trade_Transformer_LSTM_quantity.py] 开始训练...

执行步骤3/6:成功

1
2
2025-11-19 14:47:36 - [Trade_Transformer_LSTM_quantity.py] ✅ 模型和预处理器已成功保存!
2025-11-19 14:47:36 - 脚本执行成功: D:\TradeSpringBoot\python-scripts\Trade_Transformer_LSTM_quantity.py, 耗时: 32 秒

开始执行步骤4/6

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2025-11-19 14:47:36 - 开始执行步骤 4/6: 训练出口单价模型
2025-11-19 14:47:36 - 执行命令: D:\programs\Python\Python39\python.exe D:\TradeSpringBoot\python-scripts\Trade_Transformer_LSTM_price.py --csv_path D:/TradeSpringBoot/data/出口/merged_output.csv --model_output_path model/trade_Transformer/out --trade_type out --target price
2025-11-19 14:47:40 - [Trade_Transformer_LSTM_price.py] 成功使用 gbk 编码读取文件
2025-11-19 14:47:40 - [Trade_Transformer_LSTM_price.py] ERROR:
2025-11-19 14:47:40 - [Trade_Transformer_LSTM_price.py] CSV 文件列名: ['数据年月', '贸易伙伴编码', '贸易伙伴名称', '商品编码', '商品名称', '贸易方式编码', '贸易方式名称', '注册地编码', '注册地名称', '数量', '计量单位', '人民币', '单价']
2025-11-19 14:47:40 - [Trade_Transformer_LSTM_price.py] 列名类型: ['str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str']
2025-11-19 14:47:40 - [Trade_Transformer_LSTM_price.py] 匹配成功: '数据年月' <- '数据年月'
2025-11-19 14:47:40 - [Trade_Transformer_LSTM_price.py] 匹配成功: '贸易伙伴编码' <- '贸易伙伴编码'
2025-11-19 14:47:40 - [Trade_Transformer_LSTM_price.py] 匹配成功: '商品编码' <- '商品编码'
2025-11-19 14:47:40 - [Trade_Transformer_LSTM_price.py] 匹配成功: '贸易方式编码' <- '贸易方式编码'
2025-11-19 14:47:40 - [Trade_Transformer_LSTM_price.py] 匹配成功: '注册地编码' <- '注册地编码'
2025-11-19 14:47:40 - [Trade_Transformer_LSTM_price.py] 匹配成功: '计量单位' <- '计量单位'
2025-11-19 14:47:40 - [Trade_Transformer_LSTM_price.py] 匹配成功: '数量' <- '数量'
2025-11-19 14:47:40 - [Trade_Transformer_LSTM_price.py] 匹配成功: '人民币' <- '人民币'
2025-11-19 14:47:40 - [Trade_Transformer_LSTM_price.py] 匹配成功: '单价' <- '单价'
2025-11-19 14:47:40 - [Trade_Transformer_LSTM_price.py] 列名映射完成: {'数据年月': '数据年月', '贸易伙伴编码': '贸易伙伴编码', '商品编码': '商品编码', '贸易方式编码': '贸易方式编码', '注册地编码': '注册地编码', '计量单位': '计量单位', '数量': '数量', '人民币': '人民币', '单价': '单价'}
2025-11-19 14:47:40 - [Trade_Transformer_LSTM_price.py] 开始训练...

执行步骤4/6:成功

1
2
2025-11-19 14:48:36 - [Trade_Transformer_LSTM_price.py] ✅ 模型和预处理器已成功保存!
2025-11-19 14:48:36 - 脚本执行成功: D:\TradeSpringBoot\python-scripts\Trade_Transformer_LSTM_price.py, 耗时: 60 秒

开始执行步骤5/6

1
2
3
2025-11-19 15:57:48 - 步骤 5/6: 自动部署 Flask API 服务
2025-11-19 15:57:48 - 启动 Flask 服务: D:\programs\Python\Python39\python.exe D:\TradeSpringBoot\python-scripts\app.py --host 0.0.0.0 --port 5000

执行步骤5/6:成功

1
2
3
4
5
6
7
8
9
10
11
12
2025-11-19 15:57:50 - [app.py]  * Serving Flask app 'app'
2025-11-19 15:57:50 - [app.py] * Debug mode: off
2025-11-19 15:57:51 - Flask 健康检查未通过: Connection refused: getsockopt
2025-11-19 15:57:52 - [app.py] ERROR: WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
2025-11-19 15:57:52 - [app.py] ERROR: * Running on all addresses (0.0.0.0)
2025-11-19 15:57:52 - [app.py] ERROR: * Running on http://127.0.0.1:5000
2025-11-19 15:57:52 - [app.py] ERROR: * Running on http://192.168.43.79:5000
2025-11-19 15:57:52 - [app.py] ERROR: Press CTRL+C to quit
2025-11-19 15:57:52 - [app.py] ERROR: 127.0.0.1 - - [19/Nov/2025 15:57:52] "GET /health HTTP/1.1" 200 -
2025-11-19 15:57:52 - Flask 服务启动成功,端口: 5000
2025-11-19 15:57:52 - 训练任务完成: e9b56c2f-7834-4148-8c1a-4788f284c864, 总耗时: 92 秒

步骤六就是全部完成

五、测试接口二:查看状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
[
{
"taskId": "e9b56c2f-7834-4148-8c1a-4788f284c864",
"overallStatus": "SUCCESS",
"startTime": "2025-11-19T15:56:20.4121162",
"endTime": "2025-11-19T15:57:52.644144",
"totalDuration": 92,
"currentStep": 6,
"totalSteps": 6,
"scriptResults": [
{
"scriptName": "Trade_Transformer_LSTM_quantity.py",
"status": "SUCCESS",
"startTime": "2025-11-19T15:56:20.4161925",
"endTime": "2025-11-19T15:56:47.8559611",
"duration": 27,
"errorMessage": null,
"output": "成功使用 gbk 编码读取文件\nCSV 文件列名: ['数据年月', '贸易伙伴编码', '贸易伙伴名称', '商品编码', '商品名称', '贸易方式编码', '贸易方式名称', '注册地编码', '注册地名称', '数量', '计量单位', '人民币', '单价']\n列名类型: ['str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str']\n匹配成功: '数据年月' <- '数据年月'\n匹配成功: '贸易伙伴编码' <- '贸易伙伴编码'\n匹配成功: '商品编码' <- '商品编码'\n匹配成功: '贸易方式编码' <- '贸易方式编码'\n匹配成功: '注册地编码' <- '注册地编码'\n匹配成功: '计量单位' <- '计量单位'\n匹配成功: '数量' <- '数量'\n匹配成功: '人民币' <- '人民币'\n列名映射完成: {'数据年月': '数据年月', '贸易伙伴编码': '贸易伙伴编码', '商品编码': '商品编码', '贸易方式编码': '贸易方式编码', '注册地编码': '注册地编码', '计量单位': '计量单位', '数量': '数量', '人民币': '人民币'}\n开始训练...\nEpoch 1/150 | Train Loss: 3.2875 | Val Loss: 0.2015\nValidation loss decreased (inf --> 0.201493). Saving model...\nEpoch 2/150 | Train Loss: 2.4941 | Val Loss: 6.4543\nEarlyStopping counter: 1 out of 100\nEpoch 3/150 | Train Loss: 2.8213 | Val Loss: 0.1884\nValidation loss decreased (0.201493 --> 0.188373). Saving model...\nEpoch 4/150 | Train Loss: 0.8736 | Val Loss: 0.5282\nEarlyStopping counter: 1 out of 100\nEpoch 5/150 | Train Loss: 1.0318 | Val Loss: 0.1794\nValidation loss decreased (0.188373 --> 0.179389). Saving model...\nEpoch 6/150 | Train Loss: 0.8570 | Val Loss: 0.4984\nEarlyStopping counter: 1 out of 100\nEpoch 7/150 | Train Loss: 1.0697 | Val Loss: 0.2928\nEarlyStopping counter: 2 out of 100\nEpoch 8/150 | Train Loss: 0.8073 | Val Loss: 0.1686\nValidation loss decreased (0.179389 --> 0.168616). Saving model...\nEpoch 9/150 | Train Loss: 1.0657 | Val Loss: 0.2389\nEarlyStopping counter: 1 out of 100\nEpoch 10/150 | Train Loss: 1.0102 | Val Loss: 0.1665\nValidation loss decreased (0.168616 --> 0.166533). Saving model...\nEpoch 11/150 | Train Loss: 0.7222 | Val Loss: 0.2669\nEarlyStopping counter: 1 out of 100\nEpoch 12/150 | Train Loss: 0.8280 | Val Loss: 0.4458\nEarlyStopping counter: 2 out of 100\nEpoch 13/150 | Train Loss: 0.8396 | Val Loss: 0.3445\nEarlyStopping counter: 3 out of 100\nEpoch 14/150 | Train Loss: 0.7461 | Val Loss: 0.2116\nEarlyStopping counter: 4 out of 100\nEpoch 15/150 | Train Loss: 0.8760 | Val Loss: 0.1647\nValidation loss decreased (0.166533 --> 0.164659). Saving model...\nEpoch 16/150 | Train Loss: 0.7970 | Val Loss: 0.1652\nEarlyStopping counter: 1 out of 100\nEpoch 17/150 | Train Loss: 0.8707 | Val Loss: 0.1876\nEarlyStopping counter: 2 out of 100\nEpoch 18/150 | Train Loss: 0.7953 | Val Loss: 0.2125\nEarlyStopping counter: 3 out of 100\nEpoch 19/150 | Train Loss: 0.8850 | Val Loss: 0.2310\nEarlyStopping counter: 4 out of 100\nEpoch 20/150 | Train Loss: 1.1320 | Val Loss: 0.2449\nEarlyStopping counter: 5 out of 100\nEpoch 21/150 | Train Loss: 1.0343 | Val Loss: 0.1935\nEarlyStopping counter: 6 out of 100\nEpoch 22/150 | Train Loss: 0.8258 | Val Loss: 0.1933\nEarlyStopping counter: 7 out of 100\nEpoch 23/150 | Train Loss: 0.8572 | Val Loss: 0.1827\nEarlyStopping counter: 8 out of 100\nEpoch 24/150 | Train Loss: 0.9520 | Val Loss: 0.1735\nEarlyStopping counter: 9 out of 100\nEpoch 25/150 | Train Loss: 0.7552 | Val Loss: 0.1708\nEarlyStopping counter: 10 out of 100\nEpoch 26/150 | Train Loss: 0.8476 | Val Loss: 0.1760\nEarlyStopping counter: 11 out of 100\nEpoch 27/150 | Train Loss: 0.8097 | Val Loss: 0.1909\nEarlyStopping counter: 12 out of 100\nEpoch 28/150 | Train Loss: 0.6601 | Val Loss: 0.1992\nEarlyStopping counter: 13 out of 100\nEpoch 29/150 | Train Loss: 0.7423 | Val Loss: 0.2091\nEarlyStopping counter: 14 out of 100\nEpoch 30/150 | Train Loss: 0.8331 | Val Loss: 0.2061\nEarlyStopping counter: 15 out of 100\nEpoch 31/150 | Train Loss: 0.7947 | Val Loss: 0.2050\nEarlyStopping counter: 16 out of 100\nEpoch 32/150 | Train Loss: 0.7487 | Val Loss: 0.1985\nEarlyStopping counter: 17 out of 100\nEpoch 33/150 | Train Loss: 0.8267 | Val Loss: 0.1908\nEarlyStopping counter: 18 out of 100\nEpoch 34/150 | Train Loss: 0.8077 | Val Loss: 0.1911\nEarlyStopping counter: 19 out of 100\nEpoch 35/150 | Train Loss: 0.7277 | Val Loss: 0.1880\nEarlyStopping counter: 20 out of 100\nEpoch 36/150 | Train Loss: 0.9094 | Val Loss: 0.1878\nEarlyStopping counter: 21 out of 100\nEpoch 37/150 | Train Loss: 0.8732 | Val Loss: 0.1862\nEarlyStopping counter: 22 out of 100\nEpoch 38/150 | Train Loss: 0.8389 | Val Loss: 0.1866\nEarlyStopping counter: 23 out of 100\nEpoch 39/150 | Train Loss: 0.7658 | Val Loss: 0.1832\nEarlyStopping counter: 24 out of 100\nEpoch 40/150 | Train Loss: 0.8399 | Val Loss: 0.1833\nEarlyStopping counter: 25 out of 100\nEpoch 41/150 | Train Loss: 0.7427 | Val Loss: 0.1830\nEarlyStopping counter: 26 out of 100\nEpoch 42/150 | Train Loss: 0.8197 | Val Loss: 0.1822\nEarlyStopping counter: 27 out of 100\nEpoch 43/150 | Train Loss: 0.8865 | Val Loss: 0.1833\nEarlyStopping counter: 28 out of 100\nEpoch 44/150 | Train Loss: 0.7941 | Val Loss: 0.1830\nEarlyStopping counter: 29 out of 100\nEpoch 45/150 | Train Loss: 0.7444 | Val Loss: 0.1831\nEarlyStopping counter: 30 out of 100\nEpoch 46/150 | Train Loss: 0.7134 | Val Loss: 0.1832\nEarlyStopping counter: 31 out of 100\nEpoch 47/150 | Train Loss: 0.7591 | Val Loss: 0.1836\nEarlyStopping counter: 32 out of 100\nEpoch 48/150 | Train Loss: 0.8008 | Val Loss: 0.1836\nEarlyStopping counter: 33 out of 100\nEpoch 49/150 | Train Loss: 0.7503 | Val Loss: 0.1841\nEarlyStopping counter: 34 out of 100\nEpoch 50/150 | Train Loss: 0.7567 | Val Loss: 0.1852\nEarlyStopping counter: 35 out of 100\nEpoch 51/150 | Train Loss: 0.8397 | Val Loss: 0.1860\nEarlyStopping counter: 36 out of 100\nEpoch 52/150 | Train Loss: 0.8506 | Val Loss: 0.1860\nEarlyStopping counter: 37 out of 100\nEpoch 53/150 | Train Loss: 0.6697 | Val Loss: 0.1860\nEarlyStopping counter: 38 out of 100\nEpoch 54/150 | Train Loss: 0.9621 | Val Loss: 0.1859\nEarlyStopping counter: 39 out of 100\nEpoch 55/150 | Train Loss: 0.8243 | Val Loss: 0.1859\nEarlyStopping counter: 40 out of 100\nEpoch 56/150 | Train Loss: 1.0216 | Val Loss: 0.1859\nEarlyStopping counter: 41 out of 100\nEpoch 57/150 | Train Loss: 0.7473 | Val Loss: 0.1856\nEarlyStopping counter: 42 out of 100\nEpoch 58/150 | Train Loss: 0.8165 | Val Loss: 0.1857\nEarlyStopping counter: 43 out of 100\nEpoch 59/150 | Train Loss: 0.6880 | Val Loss: 0.1857\nEarlyStopping counter: 44 out of 100\nEpoch 60/150 | Train Loss: 0.7478 | Val Loss: 0.1856\nEarlyStopping counter: 45 out of 100\nEpoch 61/150 | Train Loss: 0.9521 | Val Loss: 0.1857\nEarlyStopping counter: 46 out of 100\nEpoch 62/150 | Train Loss: 0.7672 | Val Loss: 0.1858\nEarlyStopping counter: 47 out of 100\nEpoch 63/150 | Train Loss: 0.9126 | Val Loss: 0.1856\nEarlyStopping counter: 48 out of 100\nEpoch 64/150 | Train Loss: 0.7052 | Val Loss: 0.1856\nEarlyStopping counter: 49 out of 100\nEpoch 65/150 | Train Loss: 0.7329 | Val Loss: 0.1855\nEarlyStopping counter: 50 out of 100\nEpoch 66/150 | Train Loss: 1.0003 | Val Loss: 0.1855\nEarlyStopping counter: 51 out of 100\nEpoch 67/150 | Train Loss: 0.7573 | Val Loss: 0.1855\nEarlyStopping counter: 52 out of 100\nEpoch 68/150 | Train Loss: 0.7279 | Val Loss: 0.1855\nEarlyStopping counter: 53 out of 100\nEpoch 69/150 | Train Loss: 0.8217 | Val Loss: 0.1855\nEarlyStopping counter: 54 out of 100\nEpoch 70/150 | Train Loss: 0.7165 | Val Loss: 0.1854\nEarlyStopping counter: 55 out of 100\nEpoch 71/150 | Train Loss: 0.8051 | Val Loss: 0.1854\nEarlyStopping counter: 56 out of 100\nEpoch 72/150 | Train Loss: 0.8449 | Val Loss: 0.1854\nEarlyStopping counter: 57 out of 100\nEpoch 73/150 | Train Loss: 0.9025 | Val Loss: 0.1853\nEarlyStopping counter: 58 out of 100\nEpoch 74/150 | Train Loss: 0.7688 | Val Loss: 0.1853\nEarlyStopping counter: 59 out of 100\nEpoch 75/150 | Train Loss: 0.6806 | Val Loss: 0.1853\nEarlyStopping counter: 60 out of 100\nEpoch 76/150 | Train Loss: 0.7814 | Val Loss: 0.1853\nEarlyStopping counter: 61 out of 100\nEpoch 77/150 | Train Loss: 0.7766 | Val Loss: 0.1853\nEarlyStopping counter: 62 out of 100\nEpoch 78/150 | Train Loss: 0.7957 | Val Loss: 0.1853\nEarlyStopping counter: 63 out of 100\nEpoch 79/150 | Train Loss: 0.7024 | Val Loss: 0.1853\nEarlyStopping counter: 64 out of 100\nEpoch 80/150 | Train Loss: 0.7742 | Val Loss: 0.1853\nEarlyStopping counter: 65 out of 100\nEpoch 81/150 | Train Loss: 0.6991 | Val Loss: 0.1853\nEarlyStopping counter: 66 out of 100\nEpoch 82/150 | Train Loss: 0.9118 | Val Loss: 0.1853\nEarlyStopping counter: 67 out of 100\nEpoch 83/150 | Train Loss: 0.8196 | Val Loss: 0.1854\nEarlyStopping counter: 68 out of 100\nEpoch 84/150 | Train Loss: 0.9335 | Val Loss: 0.1854\nEarlyStopping counter: 69 out of 100\nEpoch 85/150 | Train Loss: 0.6990 | Val Loss: 0.1854\nEarlyStopping counter: 70 out of 100\nEpoch 86/150 | Train Loss: 0.7587 | Val Loss: 0.1854\nEarlyStopping counter: 71 out of 100\nEpoch 87/150 | Train Loss: 0.8766 | Val Loss: 0.1854\nEarlyStopping counter: 72 out of 100\nEpoch 88/150 | Train Loss: 0.7313 | Val Loss: 0.1854\nEarlyStopping counter: 73 out of 100\nEpoch 89/150 | Train Loss: 0.7624 | Val Loss: 0.1854\nEarlyStopping counter: 74 out of 100\nEpoch 90/150 | Train Loss: 0.6845 | Val Loss: 0.1854\nEarlyStopping counter: 75 out of 100\nEpoch 91/150 | Train Loss: 0.7398 | Val Loss: 0.1854\nEarlyStopping counter: 76 out of 100\nEpoch 92/150 | Train Loss: 0.8896 | Val Loss: 0.1854\nEarlyStopping counter: 77 out of 100\nEpoch 93/150 | Train Loss: 0.8740 | Val Loss: 0.1854\nEarlyStopping counter: 78 out of 100\nEpoch 94/150 | Train Loss: 0.8335 | Val Loss: 0.1854\nEarlyStopping counter: 79 out of 100\nEpoch 95/150 | Train Loss: 0.7611 | Val Loss: 0.1854\nEarlyStopping counter: 80 out of 100\nEpoch 96/150 | Train Loss: 0.8750 | Val Loss: 0.1854\nEarlyStopping counter: 81 out of 100\nEpoch 97/150 | Train Loss: 0.7907 | Val Loss: 0.1854\nEarlyStopping counter: 82 out of 100\nEpoch 98/150 | Train Loss: 0.7397 | Val Loss: 0.1854\nEarlyStopping counter: 83 out of 100\nEpoch 99/150 | Train Loss: 0.6888 | Val Loss: 0.1854\nEarlyStopping counter: 84 out of 100\nEpoch 100/150 | Train Loss: 0.7402 | Val Loss: 0.1854\nEarlyStopping counter: 85 out of 100\nEpoch 101/150 | Train Loss: 0.8000 | Val Loss: 0.1854\nEarlyStopping counter: 86 out of 100\nEpoch 102/150 | Train Loss: 0.7193 | Val Loss: 0.1854\nEarlyStopping counter: 87 out of 100\nEpoch 103/150 | Train Loss: 0.7822 | Val Loss: 0.1854\nEarlyStopping counter: 88 out of 100\nEpoch 104/150 | Train Loss: 0.7414 | Val Loss: 0.1854\nEarlyStopping counter: 89 out of 100\nEpoch 105/150 | Train Loss: 0.8000 | Val Loss: 0.1854\nEarlyStopping counter: 90 out of 100\nEpoch 106/150 | Train Loss: 0.7793 | Val Loss: 0.1854\nEarlyStopping counter: 91 out of 100\nEpoch 107/150 | Train Loss: 0.8716 | Val Loss: 0.1854\nEarlyStopping counter: 92 out of 100\nEpoch 108/150 | Train Loss: 0.8656 | Val Loss: 0.1854\nEarlyStopping counter: 93 out of 100\nEpoch 109/150 | Train Loss: 0.7846 | Val Loss: 0.1854\nEarlyStopping counter: 94 out of 100\nEpoch 110/150 | Train Loss: 0.8121 | Val Loss: 0.1854\nEarlyStopping counter: 95 out of 100\nEpoch 111/150 | Train Loss: 0.6903 | Val Loss: 0.1854\nEarlyStopping counter: 96 out of 100\nEpoch 112/150 | Train Loss: 0.7575 | Val Loss: 0.1854\nEarlyStopping counter: 97 out of 100\nEpoch 113/150 | Train Loss: 0.7347 | Val Loss: 0.1854\nEarlyStopping counter: 98 out of 100\nEpoch 114/150 | Train Loss: 0.8378 | Val Loss: 0.1854\nEarlyStopping counter: 99 out of 100\nEpoch 115/150 | Train Loss: 0.7499 | Val Loss: 0.1854\nEarlyStopping counter: 100 out of 100\nEarly stopping\n开始验证...\n\n数量 评估:\nR2 Score: -0.3863\nMSE: 441539428352.0000\nMAE: 429244.38\n部分预测值 VS 真实值:\n预测: 数量=205183.06 真实: 数量=109512.04\n预测: 数量=212018.77 真实: 数量=261455.91\n预测: 数量=217278.62 真实: 数量=1463091.75\n预测: 数量=214663.50 真实: 数量=125963.02\n预测: 数量=209021.55 真实: 数量=391206.03\n预测: 数量=208486.02 真实: 数量=139344.97\n预测: 数量=203767.94 真实: 数量=733806.81\n预测: 数量=203722.08 真实: 数量=565682.75\n预测: 数量=210771.66 真实: 数量=242735.94\n预测: 数量=210150.45 真实: 数量=163602.08\n✅ 模型和预处理器已成功保存!\n"
},
{
"scriptName": "Trade_Transformer_LSTM_price.py",
"status": "SUCCESS",
"startTime": "2025-11-19T15:56:47.8559611",
"endTime": "2025-11-19T15:57:16.9805949",
"duration": 29,
"errorMessage": null,
"output": "成功使用 gbk 编码读取文件\nCSV 文件列名: ['数据年月', '贸易伙伴编码', '贸易伙伴名称', '商品编码', '商品名称', '贸易方式编码', '贸易方式名称', '注册地编码', '注册地名称', '数量', '计量单位', '人民币', '单价']\n列名类型: ['str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str']\n匹配成功: '数据年月' <- '数据年月'\n匹配成功: '贸易伙伴编码' <- '贸易伙伴编码'\n匹配成功: '商品编码' <- '商品编码'\n匹配成功: '贸易方式编码' <- '贸易方式编码'\n匹配成功: '注册地编码' <- '注册地编码'\n匹配成功: '计量单位' <- '计量单位'\n匹配成功: '数量' <- '数量'\n匹配成功: '人民币' <- '人民币'\n匹配成功: '单价' <- '单价'\n列名映射完成: {'数据年月': '数据年月', '贸易伙伴编码': '贸易伙伴编码', '商品编码': '商品编码', '贸易方式编码': '贸易方式编码', '注册地编码': '注册地编码', '计量单位': '计量单位', '数量': '数量', '人民币': '人民币', '单价': '单价'}\n开始训练...\nEpoch 1/1000 | Train Loss: 2.3105 | Val Loss: 1.0220\nValidation loss decreased (inf --> 1.021967). Saving model...\nEpoch 2/1000 | Train Loss: 1.0359 | Val Loss: 0.3024\nValidation loss decreased (1.021967 --> 0.302424). Saving model...\nEpoch 3/1000 | Train Loss: 0.5299 | Val Loss: 0.3195\nEarlyStopping counter: 1 out of 100\nEpoch 4/1000 | Train Loss: 0.5760 | Val Loss: 0.1781\nValidation loss decreased (0.302424 --> 0.178115). Saving model...\nEpoch 5/1000 | Train Loss: 0.5796 | Val Loss: 0.1243\nValidation loss decreased (0.178115 --> 0.124280). Saving model...\nEpoch 6/1000 | Train Loss: 0.4840 | Val Loss: 0.2051\nEarlyStopping counter: 1 out of 100\nEpoch 7/1000 | Train Loss: 0.4096 | Val Loss: 0.1104\nValidation loss decreased (0.124280 --> 0.110431). Saving model...\nEpoch 8/1000 | Train Loss: 0.5201 | Val Loss: 0.1591\nEarlyStopping counter: 1 out of 100\nEpoch 9/1000 | Train Loss: 0.5136 | Val Loss: 0.0835\nValidation loss decreased (0.110431 --> 0.083516). Saving model...\nEpoch 10/1000 | Train Loss: 0.4032 | Val Loss: 0.1481\nEarlyStopping counter: 1 out of 100\nEpoch 11/1000 | Train Loss: 0.5110 | Val Loss: 0.1415\nEarlyStopping counter: 2 out of 100\nEpoch 12/1000 | Train Loss: 0.3115 | Val Loss: 0.1282\nEarlyStopping counter: 3 out of 100\nEpoch 13/1000 | Train Loss: 0.3537 | Val Loss: 0.4444\nEarlyStopping counter: 4 out of 100\nEpoch 14/1000 | Train Loss: 0.3207 | Val Loss: 0.8024\nEarlyStopping counter: 5 out of 100\nEpoch 15/1000 | Train Loss: 0.3353 | Val Loss: 0.5256\nEarlyStopping counter: 6 out of 100\nEpoch 16/1000 | Train Loss: 0.2974 | Val Loss: 0.5883\nEarlyStopping counter: 7 out of 100\nEpoch 17/1000 | Train Loss: 0.3038 | Val Loss: 0.8546\nEarlyStopping counter: 8 out of 100\nEpoch 18/1000 | Train Loss: 0.2127 | Val Loss: 0.7756\nEarlyStopping counter: 9 out of 100\nEpoch 19/1000 | Train Loss: 0.2994 | Val Loss: 0.5089\nEarlyStopping counter: 10 out of 100\nEpoch 20/1000 | Train Loss: 0.1967 | Val Loss: 0.4185\nEarlyStopping counter: 11 out of 100\nEpoch 21/1000 | Train Loss: 0.2834 | Val Loss: 0.5489\nEarlyStopping counter: 12 out of 100\nEpoch 22/1000 | Train Loss: 0.2479 | Val Loss: 0.5386\nEarlyStopping counter: 13 out of 100\nEpoch 23/1000 | Train Loss: 0.2304 | Val Loss: 0.4821\nEarlyStopping counter: 14 out of 100\nEpoch 24/1000 | Train Loss: 0.1790 | Val Loss: 0.4413\nEarlyStopping counter: 15 out of 100\nEpoch 25/1000 | Train Loss: 0.2180 | Val Loss: 0.4567\nEarlyStopping counter: 16 out of 100\nEpoch 26/1000 | Train Loss: 0.1912 | Val Loss: 0.5035\nEarlyStopping counter: 17 out of 100\nEpoch 27/1000 | Train Loss: 0.2104 | Val Loss: 0.4645\nEarlyStopping counter: 18 out of 100\nEpoch 28/1000 | Train Loss: 0.2441 | Val Loss: 0.4533\nEarlyStopping counter: 19 out of 100\nEpoch 29/1000 | Train Loss: 0.2340 | Val Loss: 0.3957\nEarlyStopping counter: 20 out of 100\nEpoch 30/1000 | Train Loss: 0.2160 | Val Loss: 0.3766\nEarlyStopping counter: 21 out of 100\nEpoch 31/1000 | Train Loss: 0.1813 | Val Loss: 0.3993\nEarlyStopping counter: 22 out of 100\nEpoch 32/1000 | Train Loss: 0.1903 | Val Loss: 0.4623\nEarlyStopping counter: 23 out of 100\nEpoch 33/1000 | Train Loss: 0.1787 | Val Loss: 0.5072\nEarlyStopping counter: 24 out of 100\nEpoch 34/1000 | Train Loss: 0.2175 | Val Loss: 0.4954\nEarlyStopping counter: 25 out of 100\nEpoch 35/1000 | Train Loss: 0.2971 | Val Loss: 0.4684\nEarlyStopping counter: 26 out of 100\nEpoch 36/1000 | Train Loss: 0.2023 | Val Loss: 0.4520\nEarlyStopping counter: 27 out of 100\nEpoch 37/1000 | Train Loss: 0.2261 | Val Loss: 0.4233\nEarlyStopping counter: 28 out of 100\nEpoch 38/1000 | Train Loss: 0.1449 | Val Loss: 0.3929\nEarlyStopping counter: 29 out of 100\nEpoch 39/1000 | Train Loss: 0.2697 | Val Loss: 0.3611\nEarlyStopping counter: 30 out of 100\nEpoch 40/1000 | Train Loss: 0.1521 | Val Loss: 0.3496\nEarlyStopping counter: 31 out of 100\nEpoch 41/1000 | Train Loss: 0.1987 | Val Loss: 0.3368\nEarlyStopping counter: 32 out of 100\nEpoch 42/1000 | Train Loss: 0.2074 | Val Loss: 0.3269\nEarlyStopping counter: 33 out of 100\nEpoch 43/1000 | Train Loss: 0.2137 | Val Loss: 0.3151\nEarlyStopping counter: 34 out of 100\nEpoch 44/1000 | Train Loss: 0.1891 | Val Loss: 0.3073\nEarlyStopping counter: 35 out of 100\nEpoch 45/1000 | Train Loss: 0.1686 | Val Loss: 0.3092\nEarlyStopping counter: 36 out of 100\nEpoch 46/1000 | Train Loss: 0.2019 | Val Loss: 0.3131\nEarlyStopping counter: 37 out of 100\nEpoch 47/1000 | Train Loss: 0.1860 | Val Loss: 0.3183\nEarlyStopping counter: 38 out of 100\nEpoch 48/1000 | Train Loss: 0.1990 | Val Loss: 0.3248\nEarlyStopping counter: 39 out of 100\nEpoch 49/1000 | Train Loss: 0.1736 | Val Loss: 0.3299\nEarlyStopping counter: 40 out of 100\nEpoch 50/1000 | Train Loss: 0.1537 | Val Loss: 0.3386\nEarlyStopping counter: 41 out of 100\nEpoch 51/1000 | Train Loss: 0.1473 | Val Loss: 0.3464\nEarlyStopping counter: 42 out of 100\nEpoch 52/1000 | Train Loss: 0.2130 | Val Loss: 0.3503\nEarlyStopping counter: 43 out of 100\nEpoch 53/1000 | Train Loss: 0.1671 | Val Loss: 0.3536\nEarlyStopping counter: 44 out of 100\nEpoch 54/1000 | Train Loss: 0.2085 | Val Loss: 0.3559\nEarlyStopping counter: 45 out of 100\nEpoch 55/1000 | Train Loss: 0.1309 | Val Loss: 0.3587\nEarlyStopping counter: 46 out of 100\nEpoch 56/1000 | Train Loss: 0.2063 | Val Loss: 0.3607\nEarlyStopping counter: 47 out of 100\nEpoch 57/1000 | Train Loss: 0.1605 | Val Loss: 0.3627\nEarlyStopping counter: 48 out of 100\nEpoch 58/1000 | Train Loss: 0.1827 | Val Loss: 0.3625\nEarlyStopping counter: 49 out of 100\nEpoch 59/1000 | Train Loss: 0.1722 | Val Loss: 0.3629\nEarlyStopping counter: 50 out of 100\nEpoch 60/1000 | Train Loss: 0.1570 | Val Loss: 0.3637\nEarlyStopping counter: 51 out of 100\nEpoch 61/1000 | Train Loss: 0.1744 | Val Loss: 0.3648\nEarlyStopping counter: 52 out of 100\nEpoch 62/1000 | Train Loss: 0.1368 | Val Loss: 0.3652\nEarlyStopping counter: 53 out of 100\nEpoch 63/1000 | Train Loss: 0.2860 | Val Loss: 0.3647\nEarlyStopping counter: 54 out of 100\nEpoch 64/1000 | Train Loss: 0.2122 | Val Loss: 0.3646\nEarlyStopping counter: 55 out of 100\nEpoch 65/1000 | Train Loss: 0.1454 | Val Loss: 0.3643\nEarlyStopping counter: 56 out of 100\nEpoch 66/1000 | Train Loss: 0.1416 | Val Loss: 0.3638\nEarlyStopping counter: 57 out of 100\nEpoch 67/1000 | Train Loss: 0.1814 | Val Loss: 0.3636\nEarlyStopping counter: 58 out of 100\nEpoch 68/1000 | Train Loss: 0.1263 | Val Loss: 0.3633\nEarlyStopping counter: 59 out of 100\nEpoch 69/1000 | Train Loss: 0.1718 | Val Loss: 0.3630\nEarlyStopping counter: 60 out of 100\nEpoch 70/1000 | Train Loss: 0.2136 | Val Loss: 0.3628\nEarlyStopping counter: 61 out of 100\nEpoch 71/1000 | Train Loss: 0.1547 | Val Loss: 0.3628\nEarlyStopping counter: 62 out of 100\nEpoch 72/1000 | Train Loss: 0.1607 | Val Loss: 0.3629\nEarlyStopping counter: 63 out of 100\nEpoch 73/1000 | Train Loss: 0.1622 | Val Loss: 0.3627\nEarlyStopping counter: 64 out of 100\nEpoch 74/1000 | Train Loss: 0.2491 | Val Loss: 0.3625\nEarlyStopping counter: 65 out of 100\nEpoch 75/1000 | Train Loss: 0.2286 | Val Loss: 0.3623\nEarlyStopping counter: 66 out of 100\nEpoch 76/1000 | Train Loss: 0.1922 | Val Loss: 0.3621\nEarlyStopping counter: 67 out of 100\nEpoch 77/1000 | Train Loss: 0.1895 | Val Loss: 0.3619\nEarlyStopping counter: 68 out of 100\nEpoch 78/1000 | Train Loss: 0.2639 | Val Loss: 0.3616\nEarlyStopping counter: 69 out of 100\nEpoch 79/1000 | Train Loss: 0.1844 | Val Loss: 0.3614\nEarlyStopping counter: 70 out of 100\nEpoch 80/1000 | Train Loss: 0.1333 | Val Loss: 0.3611\nEarlyStopping counter: 71 out of 100\nEpoch 81/1000 | Train Loss: 0.1992 | Val Loss: 0.3608\nEarlyStopping counter: 72 out of 100\nEpoch 82/1000 | Train Loss: 0.1929 | Val Loss: 0.3606\nEarlyStopping counter: 73 out of 100\nEpoch 83/1000 | Train Loss: 0.1642 | Val Loss: 0.3606\nEarlyStopping counter: 74 out of 100\nEpoch 84/1000 | Train Loss: 0.1669 | Val Loss: 0.3606\nEarlyStopping counter: 75 out of 100\nEpoch 85/1000 | Train Loss: 0.2096 | Val Loss: 0.3605\nEarlyStopping counter: 76 out of 100\nEpoch 86/1000 | Train Loss: 0.2309 | Val Loss: 0.3605\nEarlyStopping counter: 77 out of 100\nEpoch 87/1000 | Train Loss: 0.1395 | Val Loss: 0.3604\nEarlyStopping counter: 78 out of 100\nEpoch 88/1000 | Train Loss: 0.1566 | Val Loss: 0.3604\nEarlyStopping counter: 79 out of 100\nEpoch 89/1000 | Train Loss: 0.2149 | Val Loss: 0.3604\nEarlyStopping counter: 80 out of 100\nEpoch 90/1000 | Train Loss: 0.1718 | Val Loss: 0.3604\nEarlyStopping counter: 81 out of 100\nEpoch 91/1000 | Train Loss: 0.1549 | Val Loss: 0.3604\nEarlyStopping counter: 82 out of 100\nEpoch 92/1000 | Train Loss: 0.1507 | Val Loss: 0.3604\nEarlyStopping counter: 83 out of 100\nEpoch 93/1000 | Train Loss: 0.2201 | Val Loss: 0.3604\nEarlyStopping counter: 84 out of 100\nEpoch 94/1000 | Train Loss: 0.1577 | Val Loss: 0.3604\nEarlyStopping counter: 85 out of 100\nEpoch 95/1000 | Train Loss: 0.1391 | Val Loss: 0.3604\nEarlyStopping counter: 86 out of 100\nEpoch 96/1000 | Train Loss: 0.1837 | Val Loss: 0.3604\nEarlyStopping counter: 87 out of 100\nEpoch 97/1000 | Train Loss: 0.2276 | Val Loss: 0.3604\nEarlyStopping counter: 88 out of 100\nEpoch 98/1000 | Train Loss: 0.1600 | Val Loss: 0.3604\nEarlyStopping counter: 89 out of 100\nEpoch 99/1000 | Train Loss: 0.1769 | Val Loss: 0.3604\nEarlyStopping counter: 90 out of 100\nEpoch 100/1000 | Train Loss: 0.1468 | Val Loss: 0.3604\nEarlyStopping counter: 91 out of 100\nEpoch 101/1000 | Train Loss: 0.1664 | Val Loss: 0.3604\nEarlyStopping counter: 92 out of 100\nEpoch 102/1000 | Train Loss: 0.1773 | Val Loss: 0.3604\nEarlyStopping counter: 93 out of 100\nEpoch 103/1000 | Train Loss: 0.1434 | Val Loss: 0.3604\nEarlyStopping counter: 94 out of 100\nEpoch 104/1000 | Train Loss: 0.1229 | Val Loss: 0.3604\nEarlyStopping counter: 95 out of 100\nEpoch 105/1000 | Train Loss: 0.1384 | Val Loss: 0.3604\nEarlyStopping counter: 96 out of 100\nEpoch 106/1000 | Train Loss: 0.3129 | Val Loss: 0.3604\nEarlyStopping counter: 97 out of 100\nEpoch 107/1000 | Train Loss: 0.1794 | Val Loss: 0.3604\nEarlyStopping counter: 98 out of 100\nEpoch 108/1000 | Train Loss: 0.1832 | Val Loss: 0.3604\nEarlyStopping counter: 99 out of 100\nEpoch 109/1000 | Train Loss: 0.1654 | Val Loss: 0.3604\nEarlyStopping counter: 100 out of 100\nEarly stopping\n开始验证...\n\n单价 评估:\nR2 Score: -4.8442\nMSE: 46.7786\nMAE: 6.69\n\n部分预测值 VS 真实值:\n预测: 单价=9.34 真实: 单价=15.88\n预测: 单价=8.33 真实: 单价=15.81\n预测: 单价=7.88 真实: 单价=14.55\n预测: 单价=8.24 真实: 单价=14.66\n预测: 单价=8.28 真实: 单价=15.19\n预测: 单价=8.16 真实: 单价=15.35\n预测: 单价=9.36 真实: 单价=16.17\n预测: 单价=7.52 真实: 单价=14.05\n预测: 单价=7.14 真实: 单价=16.63\n预测: 单价=7.80 真实: 单价=15.54\n✅ 模型和预处理器已成功保存!\n"
},
{
"scriptName": "Trade_Transformer_LSTM_quantity.py",
"status": "SUCCESS",
"startTime": "2025-11-19T15:57:16.9815896",
"endTime": "2025-11-19T15:57:32.9307437",
"duration": 15,
"errorMessage": null,
"output": "成功使用 gbk 编码读取文件\nCSV 文件列名: ['数据年月', '贸易伙伴编码', '贸易伙伴名称', '商品编码', '商品名称', '贸易方式编码', '贸易方式名称', '注册地编码', '注册地名称', '数量', '计量单位', '人民币', '单价']\n列名类型: ['str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str']\n匹配成功: '数据年月' <- '数据年月'\n匹配成功: '贸易伙伴编码' <- '贸易伙伴编码'\n匹配成功: '商品编码' <- '商品编码'\n匹配成功: '贸易方式编码' <- '贸易方式编码'\n匹配成功: '注册地编码' <- '注册地编码'\n匹配成功: '计量单位' <- '计量单位'\n匹配成功: '数量' <- '数量'\n匹配成功: '人民币' <- '人民币'\n列名映射完成: {'数据年月': '数据年月', '贸易伙伴编码': '贸易伙伴编码', '商品编码': '商品编码', '贸易方式编码': '贸易方式编码', '注册地编码': '注册地编码', '计量单位': '计量单位', '数量': '数量', '人民币': '人民币'}\n开始训练...\nEpoch 1/150 | Train Loss: 0.9965 | Val Loss: 10.8153\nValidation loss decreased (inf --> 10.815322). Saving model...\nEpoch 2/150 | Train Loss: 4.2607 | Val Loss: 0.3551\nValidation loss decreased (10.815322 --> 0.355112). Saving model...\nEpoch 3/150 | Train Loss: 1.6425 | Val Loss: 0.7554\nEarlyStopping counter: 1 out of 100\nEpoch 4/150 | Train Loss: 0.9880 | Val Loss: 3.0505\nEarlyStopping counter: 2 out of 100\nEpoch 5/150 | Train Loss: 1.5107 | Val Loss: 2.7053\nEarlyStopping counter: 3 out of 100\nEpoch 6/150 | Train Loss: 1.3784 | Val Loss: 1.2507\nEarlyStopping counter: 4 out of 100\nEpoch 7/150 | Train Loss: 0.8437 | Val Loss: 0.6219\nEarlyStopping counter: 5 out of 100\nEpoch 8/150 | Train Loss: 1.2738 | Val Loss: 0.6155\nEarlyStopping counter: 6 out of 100\nEpoch 9/150 | Train Loss: 1.1147 | Val Loss: 0.7965\nEarlyStopping counter: 7 out of 100\nEpoch 10/150 | Train Loss: 1.0720 | Val Loss: 1.1800\nEarlyStopping counter: 8 out of 100\nEpoch 11/150 | Train Loss: 1.0495 | Val Loss: 1.6634\nEarlyStopping counter: 9 out of 100\nEpoch 12/150 | Train Loss: 0.9842 | Val Loss: 2.0415\nEarlyStopping counter: 10 out of 100\nEpoch 13/150 | Train Loss: 1.0266 | Val Loss: 1.9014\nEarlyStopping counter: 11 out of 100\nEpoch 14/150 | Train Loss: 0.7541 | Val Loss: 1.3588\nEarlyStopping counter: 12 out of 100\nEpoch 15/150 | Train Loss: 0.8087 | Val Loss: 1.0704\nEarlyStopping counter: 13 out of 100\nEpoch 16/150 | Train Loss: 0.8152 | Val Loss: 0.8514\nEarlyStopping counter: 14 out of 100\nEpoch 17/150 | Train Loss: 0.7322 | Val Loss: 0.6302\nEarlyStopping counter: 15 out of 100\nEpoch 18/150 | Train Loss: 0.7051 | Val Loss: 0.5261\nEarlyStopping counter: 16 out of 100\nEpoch 19/150 | Train Loss: 0.7573 | Val Loss: 0.5133\nEarlyStopping counter: 17 out of 100\nEpoch 20/150 | Train Loss: 0.5415 | Val Loss: 0.5784\nEarlyStopping counter: 18 out of 100\nEpoch 21/150 | Train Loss: 0.4739 | Val Loss: 0.6473\nEarlyStopping counter: 19 out of 100\nEpoch 22/150 | Train Loss: 0.3130 | Val Loss: 0.7694\nEarlyStopping counter: 20 out of 100\nEpoch 23/150 | Train Loss: 0.4003 | Val Loss: 0.9802\nEarlyStopping counter: 21 out of 100\nEpoch 24/150 | Train Loss: 0.2740 | Val Loss: 1.1958\nEarlyStopping counter: 22 out of 100\nEpoch 25/150 | Train Loss: 0.3107 | Val Loss: 1.4125\nEarlyStopping counter: 23 out of 100\nEpoch 26/150 | Train Loss: 0.2095 | Val Loss: 1.5539\nEarlyStopping counter: 24 out of 100\nEpoch 27/150 | Train Loss: 0.3930 | Val Loss: 1.5801\nEarlyStopping counter: 25 out of 100\nEpoch 28/150 | Train Loss: 0.4574 | Val Loss: 1.5759\nEarlyStopping counter: 26 out of 100\nEpoch 29/150 | Train Loss: 0.2549 | Val Loss: 1.5167\nEarlyStopping counter: 27 out of 100\nEpoch 30/150 | Train Loss: 0.3517 | Val Loss: 1.4516\nEarlyStopping counter: 28 out of 100\nEpoch 31/150 | Train Loss: 0.2891 | Val Loss: 1.3942\nEarlyStopping counter: 29 out of 100\nEpoch 32/150 | Train Loss: 0.3948 | Val Loss: 1.3317\nEarlyStopping counter: 30 out of 100\nEpoch 33/150 | Train Loss: 0.4114 | Val Loss: 1.3220\nEarlyStopping counter: 31 out of 100\nEpoch 34/150 | Train Loss: 0.2848 | Val Loss: 1.3269\nEarlyStopping counter: 32 out of 100\nEpoch 35/150 | Train Loss: 0.1681 | Val Loss: 1.3470\nEarlyStopping counter: 33 out of 100\nEpoch 36/150 | Train Loss: 0.3209 | Val Loss: 1.3646\nEarlyStopping counter: 34 out of 100\nEpoch 37/150 | Train Loss: 0.2155 | Val Loss: 1.3889\nEarlyStopping counter: 35 out of 100\nEpoch 38/150 | Train Loss: 0.2587 | Val Loss: 1.4127\nEarlyStopping counter: 36 out of 100\nEpoch 39/150 | Train Loss: 0.3260 | Val Loss: 1.4275\nEarlyStopping counter: 37 out of 100\nEpoch 40/150 | Train Loss: 0.3474 | Val Loss: 1.4410\nEarlyStopping counter: 38 out of 100\nEpoch 41/150 | Train Loss: 0.2147 | Val Loss: 1.4559\nEarlyStopping counter: 39 out of 100\nEpoch 42/150 | Train Loss: 0.2895 | Val Loss: 1.4690\nEarlyStopping counter: 40 out of 100\nEpoch 43/150 | Train Loss: 0.2454 | Val Loss: 1.4719\nEarlyStopping counter: 41 out of 100\nEpoch 44/150 | Train Loss: 0.3020 | Val Loss: 1.4820\nEarlyStopping counter: 42 out of 100\nEpoch 45/150 | Train Loss: 0.3382 | Val Loss: 1.4891\nEarlyStopping counter: 43 out of 100\nEpoch 46/150 | Train Loss: 0.2673 | Val Loss: 1.4925\nEarlyStopping counter: 44 out of 100\nEpoch 47/150 | Train Loss: 0.1607 | Val Loss: 1.4995\nEarlyStopping counter: 45 out of 100\nEpoch 48/150 | Train Loss: 0.1371 | Val Loss: 1.5053\nEarlyStopping counter: 46 out of 100\nEpoch 49/150 | Train Loss: 0.1992 | Val Loss: 1.5130\nEarlyStopping counter: 47 out of 100\nEpoch 50/150 | Train Loss: 0.1313 | Val Loss: 1.5208\nEarlyStopping counter: 48 out of 100\nEpoch 51/150 | Train Loss: 0.3756 | Val Loss: 1.5245\nEarlyStopping counter: 49 out of 100\nEpoch 52/150 | Train Loss: 0.2058 | Val Loss: 1.5285\nEarlyStopping counter: 50 out of 100\nEpoch 53/150 | Train Loss: 0.2075 | Val Loss: 1.5311\nEarlyStopping counter: 51 out of 100\nEpoch 54/150 | Train Loss: 0.2441 | Val Loss: 1.5339\nEarlyStopping counter: 52 out of 100\nEpoch 55/150 | Train Loss: 0.2008 | Val Loss: 1.5372\nEarlyStopping counter: 53 out of 100\nEpoch 56/150 | Train Loss: 0.3708 | Val Loss: 1.5402\nEarlyStopping counter: 54 out of 100\nEpoch 57/150 | Train Loss: 0.3377 | Val Loss: 1.5421\nEarlyStopping counter: 55 out of 100\nEpoch 58/150 | Train Loss: 0.1478 | Val Loss: 1.5445\nEarlyStopping counter: 56 out of 100\nEpoch 59/150 | Train Loss: 0.1669 | Val Loss: 1.5458\nEarlyStopping counter: 57 out of 100\nEpoch 60/150 | Train Loss: 0.1894 | Val Loss: 1.5468\nEarlyStopping counter: 58 out of 100\nEpoch 61/150 | Train Loss: 0.2483 | Val Loss: 1.5481\nEarlyStopping counter: 59 out of 100\nEpoch 62/150 | Train Loss: 0.2033 | Val Loss: 1.5494\nEarlyStopping counter: 60 out of 100\nEpoch 63/150 | Train Loss: 0.3521 | Val Loss: 1.5496\nEarlyStopping counter: 61 out of 100\nEpoch 64/150 | Train Loss: 0.1654 | Val Loss: 1.5503\nEarlyStopping counter: 62 out of 100\nEpoch 65/150 | Train Loss: 0.2173 | Val Loss: 1.5512\nEarlyStopping counter: 63 out of 100\nEpoch 66/150 | Train Loss: 0.2607 | Val Loss: 1.5523\nEarlyStopping counter: 64 out of 100\nEpoch 67/150 | Train Loss: 0.1527 | Val Loss: 1.5536\nEarlyStopping counter: 65 out of 100\nEpoch 68/150 | Train Loss: 0.2283 | Val Loss: 1.5547\nEarlyStopping counter: 66 out of 100\nEpoch 69/150 | Train Loss: 0.2257 | Val Loss: 1.5552\nEarlyStopping counter: 67 out of 100\nEpoch 70/150 | Train Loss: 0.1699 | Val Loss: 1.5558\nEarlyStopping counter: 68 out of 100\nEpoch 71/150 | Train Loss: 0.1112 | Val Loss: 1.5562\nEarlyStopping counter: 69 out of 100\nEpoch 72/150 | Train Loss: 0.2038 | Val Loss: 1.5566\nEarlyStopping counter: 70 out of 100\nEpoch 73/150 | Train Loss: 0.2685 | Val Loss: 1.5568\nEarlyStopping counter: 71 out of 100\nEpoch 74/150 | Train Loss: 0.2864 | Val Loss: 1.5571\nEarlyStopping counter: 72 out of 100\nEpoch 75/150 | Train Loss: 0.2275 | Val Loss: 1.5573\nEarlyStopping counter: 73 out of 100\nEpoch 76/150 | Train Loss: 0.2598 | Val Loss: 1.5574\nEarlyStopping counter: 74 out of 100\nEpoch 77/150 | Train Loss: 0.2355 | Val Loss: 1.5575\nEarlyStopping counter: 75 out of 100\nEpoch 78/150 | Train Loss: 0.2387 | Val Loss: 1.5576\nEarlyStopping counter: 76 out of 100\nEpoch 79/150 | Train Loss: 0.3535 | Val Loss: 1.5577\nEarlyStopping counter: 77 out of 100\nEpoch 80/150 | Train Loss: 0.1527 | Val Loss: 1.5579\nEarlyStopping counter: 78 out of 100\nEpoch 81/150 | Train Loss: 0.2655 | Val Loss: 1.5579\nEarlyStopping counter: 79 out of 100\nEpoch 82/150 | Train Loss: 0.2069 | Val Loss: 1.5579\nEarlyStopping counter: 80 out of 100\nEpoch 83/150 | Train Loss: 0.2199 | Val Loss: 1.5579\nEarlyStopping counter: 81 out of 100\nEpoch 84/150 | Train Loss: 0.1627 | Val Loss: 1.5578\nEarlyStopping counter: 82 out of 100\nEpoch 85/150 | Train Loss: 0.2673 | Val Loss: 1.5577\nEarlyStopping counter: 83 out of 100\nEpoch 86/150 | Train Loss: 0.2571 | Val Loss: 1.5577\nEarlyStopping counter: 84 out of 100\nEpoch 87/150 | Train Loss: 0.1673 | Val Loss: 1.5577\nEarlyStopping counter: 85 out of 100\nEpoch 88/150 | Train Loss: 0.2798 | Val Loss: 1.5577\nEarlyStopping counter: 86 out of 100\nEpoch 89/150 | Train Loss: 0.2675 | Val Loss: 1.5577\nEarlyStopping counter: 87 out of 100\nEpoch 90/150 | Train Loss: 0.2046 | Val Loss: 1.5577\nEarlyStopping counter: 88 out of 100\nEpoch 91/150 | Train Loss: 0.2293 | Val Loss: 1.5577\nEarlyStopping counter: 89 out of 100\nEpoch 92/150 | Train Loss: 0.1924 | Val Loss: 1.5578\nEarlyStopping counter: 90 out of 100\nEpoch 93/150 | Train Loss: 0.2726 | Val Loss: 1.5578\nEarlyStopping counter: 91 out of 100\nEpoch 94/150 | Train Loss: 0.1341 | Val Loss: 1.5578\nEarlyStopping counter: 92 out of 100\nEpoch 95/150 | Train Loss: 0.1922 | Val Loss: 1.5579\nEarlyStopping counter: 93 out of 100\nEpoch 96/150 | Train Loss: 0.2880 | Val Loss: 1.5579\nEarlyStopping counter: 94 out of 100\nEpoch 97/150 | Train Loss: 0.2831 | Val Loss: 1.5579\nEarlyStopping counter: 95 out of 100\nEpoch 98/150 | Train Loss: 0.1915 | Val Loss: 1.5580\nEarlyStopping counter: 96 out of 100\nEpoch 99/150 | Train Loss: 0.2517 | Val Loss: 1.5580\nEarlyStopping counter: 97 out of 100\nEpoch 100/150 | Train Loss: 0.2225 | Val Loss: 1.5580\nEarlyStopping counter: 98 out of 100\nEpoch 101/150 | Train Loss: 0.3645 | Val Loss: 1.5580\nEarlyStopping counter: 99 out of 100\nEpoch 102/150 | Train Loss: 0.1894 | Val Loss: 1.5580\nEarlyStopping counter: 100 out of 100\nEarly stopping\n开始验证...\n\n数量 评估:\nR2 Score: -674.9824\nMSE: 9017925.0000\nMAE: 1327.28\n部分预测值 VS 真实值:\n预测: 数量=-0.47 真实: 数量=179.00\n预测: 数量=7355.53 真实: 数量=8.00\n预测: 数量=23.59 真实: 数量=4.00\n预测: 数量=2.70 真实: 数量=3.00\n预测: 数量=186.92 真实: 数量=9.00\n预测: 数量=61.15 真实: 数量=300.00\n✅ 模型和预处理器已成功保存!\n"
},
{
"scriptName": "Trade_Transformer_LSTM_price.py",
"status": "SUCCESS",
"startTime": "2025-11-19T15:57:32.9307437",
"endTime": "2025-11-19T15:57:48.5796336",
"duration": 15,
"errorMessage": null,
"output": "成功使用 gbk 编码读取文件\nCSV 文件列名: ['数据年月', '贸易伙伴编码', '贸易伙伴名称', '商品编码', '商品名称', '贸易方式编码', '贸易方式名称', '注册地编码', '注册地名称', '数量', '计量单位', '人民币', '单价']\n列名类型: ['str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str', 'str']\n匹配成功: '数据年月' <- '数据年月'\n匹配成功: '贸易伙伴编码' <- '贸易伙伴编码'\n匹配成功: '商品编码' <- '商品编码'\n匹配成功: '贸易方式编码' <- '贸易方式编码'\n匹配成功: '注册地编码' <- '注册地编码'\n匹配成功: '计量单位' <- '计量单位'\n匹配成功: '数量' <- '数量'\n匹配成功: '人民币' <- '人民币'\n匹配成功: '单价' <- '单价'\n列名映射完成: {'数据年月': '数据年月', '贸易伙伴编码': '贸易伙伴编码', '商品编码': '商品编码', '贸易方式编码': '贸易方式编码', '注册地编码': '注册地编码', '计量单位': '计量单位', '数量': '数量', '人民币': '人民币', '单价': '单价'}\n开始训练...\nEpoch 1/1000 | Train Loss: 0.7916 | Val Loss: 29.6793\nValidation loss decreased (inf --> 29.679323). Saving model...\nEpoch 2/1000 | Train Loss: 12.4264 | Val Loss: 12.2769\nValidation loss decreased (29.679323 --> 12.276929). Saving model...\nEpoch 3/1000 | Train Loss: 4.8650 | Val Loss: 1.4500\nValidation loss decreased (12.276929 --> 1.449960). Saving model...\nEpoch 4/1000 | Train Loss: 0.2625 | Val Loss: 1.0492\nValidation loss decreased (1.449960 --> 1.049163). Saving model...\nEpoch 5/1000 | Train Loss: 0.8057 | Val Loss: 1.3430\nEarlyStopping counter: 1 out of 100\nEpoch 6/1000 | Train Loss: 0.3206 | Val Loss: 2.6432\nEarlyStopping counter: 2 out of 100\nEpoch 7/1000 | Train Loss: 0.4033 | Val Loss: 2.9416\nEarlyStopping counter: 3 out of 100\nEpoch 8/1000 | Train Loss: 0.3803 | Val Loss: 2.2875\nEarlyStopping counter: 4 out of 100\nEpoch 9/1000 | Train Loss: 0.3065 | Val Loss: 1.5144\nEarlyStopping counter: 5 out of 100\nEpoch 10/1000 | Train Loss: 0.3438 | Val Loss: 1.3831\nEarlyStopping counter: 6 out of 100\nEpoch 11/1000 | Train Loss: 0.4070 | Val Loss: 1.4843\nEarlyStopping counter: 7 out of 100\nEpoch 12/1000 | Train Loss: 0.3068 | Val Loss: 1.7356\nEarlyStopping counter: 8 out of 100\nEpoch 13/1000 | Train Loss: 0.3124 | Val Loss: 2.1549\nEarlyStopping counter: 9 out of 100\nEpoch 14/1000 | Train Loss: 0.3082 | Val Loss: 2.4964\nEarlyStopping counter: 10 out of 100\nEpoch 15/1000 | Train Loss: 0.2085 | Val Loss: 2.6357\nEarlyStopping counter: 11 out of 100\nEpoch 16/1000 | Train Loss: 0.3241 | Val Loss: 2.5597\nEarlyStopping counter: 12 out of 100\nEpoch 17/1000 | Train Loss: 0.3444 | Val Loss: 2.4721\nEarlyStopping counter: 13 out of 100\nEpoch 18/1000 | Train Loss: 0.2693 | Val Loss: 2.3324\nEarlyStopping counter: 14 out of 100\nEpoch 19/1000 | Train Loss: 0.3004 | Val Loss: 2.1648\nEarlyStopping counter: 15 out of 100\nEpoch 20/1000 | Train Loss: 0.2587 | Val Loss: 2.0781\nEarlyStopping counter: 16 out of 100\nEpoch 21/1000 | Train Loss: 0.3406 | Val Loss: 2.0215\nEarlyStopping counter: 17 out of 100\nEpoch 22/1000 | Train Loss: 0.3433 | Val Loss: 1.9701\nEarlyStopping counter: 18 out of 100\nEpoch 23/1000 | Train Loss: 0.2883 | Val Loss: 1.9687\nEarlyStopping counter: 19 out of 100\nEpoch 24/1000 | Train Loss: 0.2792 | Val Loss: 1.9721\nEarlyStopping counter: 20 out of 100\nEpoch 25/1000 | Train Loss: 0.2148 | Val Loss: 1.9954\nEarlyStopping counter: 21 out of 100\nEpoch 26/1000 | Train Loss: 0.2329 | Val Loss: 2.0162\nEarlyStopping counter: 22 out of 100\nEpoch 27/1000 | Train Loss: 0.2262 | Val Loss: 2.0427\nEarlyStopping counter: 23 out of 100\nEpoch 28/1000 | Train Loss: 0.2797 | Val Loss: 2.0785\nEarlyStopping counter: 24 out of 100\nEpoch 29/1000 | Train Loss: 0.2973 | Val Loss: 2.1006\nEarlyStopping counter: 25 out of 100\nEpoch 30/1000 | Train Loss: 0.2715 | Val Loss: 2.1164\nEarlyStopping counter: 26 out of 100\nEpoch 31/1000 | Train Loss: 0.2073 | Val Loss: 2.1337\nEarlyStopping counter: 27 out of 100\nEpoch 32/1000 | Train Loss: 0.2705 | Val Loss: 2.1471\nEarlyStopping counter: 28 out of 100\nEpoch 33/1000 | Train Loss: 0.2223 | Val Loss: 2.1598\nEarlyStopping counter: 29 out of 100\nEpoch 34/1000 | Train Loss: 0.2710 | Val Loss: 2.1674\nEarlyStopping counter: 30 out of 100\nEpoch 35/1000 | Train Loss: 0.2652 | Val Loss: 2.1691\nEarlyStopping counter: 31 out of 100\nEpoch 36/1000 | Train Loss: 0.2528 | Val Loss: 2.1652\nEarlyStopping counter: 32 out of 100\nEpoch 37/1000 | Train Loss: 0.2599 | Val Loss: 2.1627\nEarlyStopping counter: 33 out of 100\nEpoch 38/1000 | Train Loss: 0.2847 | Val Loss: 2.1578\nEarlyStopping counter: 34 out of 100\nEpoch 39/1000 | Train Loss: 0.2586 | Val Loss: 2.1536\nEarlyStopping counter: 35 out of 100\nEpoch 40/1000 | Train Loss: 0.2468 | Val Loss: 2.1481\nEarlyStopping counter: 36 out of 100\nEpoch 41/1000 | Train Loss: 0.2500 | Val Loss: 2.1457\nEarlyStopping counter: 37 out of 100\nEpoch 42/1000 | Train Loss: 0.2720 | Val Loss: 2.1439\nEarlyStopping counter: 38 out of 100\nEpoch 43/1000 | Train Loss: 0.1929 | Val Loss: 2.1436\nEarlyStopping counter: 39 out of 100\nEpoch 44/1000 | Train Loss: 0.2431 | Val Loss: 2.1435\nEarlyStopping counter: 40 out of 100\nEpoch 45/1000 | Train Loss: 0.2817 | Val Loss: 2.1428\nEarlyStopping counter: 41 out of 100\nEpoch 46/1000 | Train Loss: 0.2332 | Val Loss: 2.1409\nEarlyStopping counter: 42 out of 100\nEpoch 47/1000 | Train Loss: 0.3096 | Val Loss: 2.1393\nEarlyStopping counter: 43 out of 100\nEpoch 48/1000 | Train Loss: 0.2795 | Val Loss: 2.1380\nEarlyStopping counter: 44 out of 100\nEpoch 49/1000 | Train Loss: 0.2789 | Val Loss: 2.1368\nEarlyStopping counter: 45 out of 100\nEpoch 50/1000 | Train Loss: 0.2768 | Val Loss: 2.1353\nEarlyStopping counter: 46 out of 100\nEpoch 51/1000 | Train Loss: 0.3113 | Val Loss: 2.1334\nEarlyStopping counter: 47 out of 100\nEpoch 52/1000 | Train Loss: 0.3139 | Val Loss: 2.1311\nEarlyStopping counter: 48 out of 100\nEpoch 53/1000 | Train Loss: 0.2584 | Val Loss: 2.1298\nEarlyStopping counter: 49 out of 100\nEpoch 54/1000 | Train Loss: 0.2681 | Val Loss: 2.1287\nEarlyStopping counter: 50 out of 100\nEpoch 55/1000 | Train Loss: 0.2297 | Val Loss: 2.1278\nEarlyStopping counter: 51 out of 100\nEpoch 56/1000 | Train Loss: 0.2725 | Val Loss: 2.1265\nEarlyStopping counter: 52 out of 100\nEpoch 57/1000 | Train Loss: 0.3092 | Val Loss: 2.1254\nEarlyStopping counter: 53 out of 100\nEpoch 58/1000 | Train Loss: 0.2046 | Val Loss: 2.1242\nEarlyStopping counter: 54 out of 100\nEpoch 59/1000 | Train Loss: 0.2306 | Val Loss: 2.1239\nEarlyStopping counter: 55 out of 100\nEpoch 60/1000 | Train Loss: 0.3497 | Val Loss: 2.1236\nEarlyStopping counter: 56 out of 100\nEpoch 61/1000 | Train Loss: 0.3129 | Val Loss: 2.1236\nEarlyStopping counter: 57 out of 100\nEpoch 62/1000 | Train Loss: 0.2615 | Val Loss: 2.1238\nEarlyStopping counter: 58 out of 100\nEpoch 63/1000 | Train Loss: 0.2681 | Val Loss: 2.1240\nEarlyStopping counter: 59 out of 100\nEpoch 64/1000 | Train Loss: 0.2501 | Val Loss: 2.1242\nEarlyStopping counter: 60 out of 100\nEpoch 65/1000 | Train Loss: 0.3074 | Val Loss: 2.1244\nEarlyStopping counter: 61 out of 100\nEpoch 66/1000 | Train Loss: 0.2651 | Val Loss: 2.1244\nEarlyStopping counter: 62 out of 100\nEpoch 67/1000 | Train Loss: 0.2468 | Val Loss: 2.1245\nEarlyStopping counter: 63 out of 100\nEpoch 68/1000 | Train Loss: 0.2573 | Val Loss: 2.1246\nEarlyStopping counter: 64 out of 100\nEpoch 69/1000 | Train Loss: 0.2749 | Val Loss: 2.1248\nEarlyStopping counter: 65 out of 100\nEpoch 70/1000 | Train Loss: 0.2079 | Val Loss: 2.1250\nEarlyStopping counter: 66 out of 100\nEpoch 71/1000 | Train Loss: 0.2660 | Val Loss: 2.1252\nEarlyStopping counter: 67 out of 100\nEpoch 72/1000 | Train Loss: 0.2832 | Val Loss: 2.1253\nEarlyStopping counter: 68 out of 100\nEpoch 73/1000 | Train Loss: 0.2663 | Val Loss: 2.1255\nEarlyStopping counter: 69 out of 100\nEpoch 74/1000 | Train Loss: 0.1584 | Val Loss: 2.1256\nEarlyStopping counter: 70 out of 100\nEpoch 75/1000 | Train Loss: 0.2713 | Val Loss: 2.1256\nEarlyStopping counter: 71 out of 100\nEpoch 76/1000 | Train Loss: 0.2212 | Val Loss: 2.1257\nEarlyStopping counter: 72 out of 100\nEpoch 77/1000 | Train Loss: 0.2513 | Val Loss: 2.1257\nEarlyStopping counter: 73 out of 100\nEpoch 78/1000 | Train Loss: 0.2575 | Val Loss: 2.1258\nEarlyStopping counter: 74 out of 100\nEpoch 79/1000 | Train Loss: 0.2840 | Val Loss: 2.1258\nEarlyStopping counter: 75 out of 100\nEpoch 80/1000 | Train Loss: 0.3013 | Val Loss: 2.1259\nEarlyStopping counter: 76 out of 100\nEpoch 81/1000 | Train Loss: 0.2253 | Val Loss: 2.1259\nEarlyStopping counter: 77 out of 100\nEpoch 82/1000 | Train Loss: 0.3068 | Val Loss: 2.1260\nEarlyStopping counter: 78 out of 100\nEpoch 83/1000 | Train Loss: 0.3131 | Val Loss: 2.1261\nEarlyStopping counter: 79 out of 100\nEpoch 84/1000 | Train Loss: 0.2607 | Val Loss: 2.1261\nEarlyStopping counter: 80 out of 100\nEpoch 85/1000 | Train Loss: 0.2496 | Val Loss: 2.1261\nEarlyStopping counter: 81 out of 100\nEpoch 86/1000 | Train Loss: 0.2238 | Val Loss: 2.1262\nEarlyStopping counter: 82 out of 100\nEpoch 87/1000 | Train Loss: 0.2700 | Val Loss: 2.1262\nEarlyStopping counter: 83 out of 100\nEpoch 88/1000 | Train Loss: 0.3292 | Val Loss: 2.1262\nEarlyStopping counter: 84 out of 100\nEpoch 89/1000 | Train Loss: 0.2939 | Val Loss: 2.1262\nEarlyStopping counter: 85 out of 100\nEpoch 90/1000 | Train Loss: 0.3410 | Val Loss: 2.1262\nEarlyStopping counter: 86 out of 100\nEpoch 91/1000 | Train Loss: 0.3074 | Val Loss: 2.1261\nEarlyStopping counter: 87 out of 100\nEpoch 92/1000 | Train Loss: 0.2476 | Val Loss: 2.1261\nEarlyStopping counter: 88 out of 100\nEpoch 93/1000 | Train Loss: 0.2716 | Val Loss: 2.1261\nEarlyStopping counter: 89 out of 100\nEpoch 94/1000 | Train Loss: 0.2662 | Val Loss: 2.1261\nEarlyStopping counter: 90 out of 100\nEpoch 95/1000 | Train Loss: 0.2351 | Val Loss: 2.1261\nEarlyStopping counter: 91 out of 100\nEpoch 96/1000 | Train Loss: 0.2595 | Val Loss: 2.1261\nEarlyStopping counter: 92 out of 100\nEpoch 97/1000 | Train Loss: 0.3014 | Val Loss: 2.1261\nEarlyStopping counter: 93 out of 100\nEpoch 98/1000 | Train Loss: 0.3164 | Val Loss: 2.1261\nEarlyStopping counter: 94 out of 100\nEpoch 99/1000 | Train Loss: 0.2712 | Val Loss: 2.1261\nEarlyStopping counter: 95 out of 100\nEpoch 100/1000 | Train Loss: 0.3160 | Val Loss: 2.1261\nEarlyStopping counter: 96 out of 100\nEpoch 101/1000 | Train Loss: 0.3091 | Val Loss: 2.1261\nEarlyStopping counter: 97 out of 100\nEpoch 102/1000 | Train Loss: 0.1824 | Val Loss: 2.1261\nEarlyStopping counter: 98 out of 100\nEpoch 103/1000 | Train Loss: 0.3190 | Val Loss: 2.1261\nEarlyStopping counter: 99 out of 100\nEpoch 104/1000 | Train Loss: 0.2979 | Val Loss: 2.1261\nEarlyStopping counter: 100 out of 100\nEarly stopping\n开始验证...\n\n单价 评估:\nR2 Score: -0.4213\nMSE: 6582240.0000\nMAE: 1403.26\n\n部分预测值 VS 真实值:\n预测: 单价=28.67 真实: 单价=9.27\n预测: 单价=28.70 真实: 单价=196.25\n预测: 单价=28.71 真实: 单价=6077.75\n预测: 单价=29.21 真实: 单价=1624.00\n预测: 单价=29.02 真实: 单价=42.89\n预测: 单价=28.78 真实: 单价=603.72\n✅ 模型和预处理器已成功保存!\n"
},
{
"scriptName": "app.py",
"status": "SUCCESS",
"startTime": "2025-11-19T15:57:48.5806375",
"endTime": "2025-11-19T15:57:52.644144",
"duration": 4,
"errorMessage": null,
"output": "Flask 服务已启动: http://localhost:5000"
}
],
"errorMessage": null,
"progress": 100.0
}
]