当前位置:首页>python>大模型开发入门第四讲:Python 流程控制语句,让大模型训练逻辑 “动起来”!

大模型开发入门第四讲:Python 流程控制语句,让大模型训练逻辑 “动起来”!

  • 2026-09-10 19:15:58
大模型开发入门第四讲:Python 流程控制语句,让大模型训练逻辑 “动起来”!
上一篇我们掌握了变量、数据类型和运算符这些 “基础积木”,今天要学的流程控制语句,就是把这些积木搭成 “可执行的大模型训练逻辑” 的核心 —— 比如 “损失值低于 0.1 就停止训练”“循环读取 100 轮训练数据”“根据不同数据集选择不同学习率”,全靠 if、for、while 这三类语句实现,搞定它,你就能写出有 “逻辑” 的大模型代码了!
一、条件判断(if):大模型训练的 “决策器”

条件判断就像大模型训练中的 “裁判”,根据设定的条件(比如损失值、准确率)决定下一步该做什么,是开发中最常用的流程控制语句。

1. 基本语法:单条件判断

if 条件:    满足条件时执行的代码(注意缩进!)

大模型场景示例:判断模型是否达标

# 模拟大模型训练后的准确率accuracy = 0.88# 设定达标阈值:准确率≥0.85则达标if accuracy >= 0.85:    print(f"模型达标!准确率:{accuracy}")  # 缩进4个空格/1个Tab,是Python的核心语法

运行结果:模型达标!准确率:0.88

2. 双条件判断(if-else):二选一决策
if 条件:    满足条件执行的代码else:    不满足条件执行的代码
大模型场景示例:判断是否停止训练
# 模拟大模型当前损失值loss = 0.12# 设定停止条件:损失值≤0.1则停止训练if loss <= 0.1:    print(f"损失值{loss}达标,停止训练!")else:    print(f"损失值{loss}未达标,继续训练~")
运行结果:损失值0.12未达标,继续训练~
3. 多条件判断(if-elif-else):多场景决策
if 条件1:    执行代码1elif 条件2:    执行代码2...else:    以上条件都不满足时执行
大模型场景示例:根据准确率调整学习率
# 模拟大模型准确率accuracy = 0.75# 初始化学习率learning_rate = 0.001# 根据准确率分档调整学习率if accuracy >= 0.85:    learning_rate *= 0.8  # 准确率高,降低学习率防止过拟合elif accuracy >= 0.75:    learning_rate *= 0.9  # 准确率中等,小幅降低学习率else:    learning_rate *= 1.1  # 准确率低,提高学习率加速收敛print(f"调整后学习率:{learning_rate}")
运行结果:调整后学习率:0.0009
4. 嵌套条件判断:复杂场景决策
大模型场景示例:判断训练是否继续 + 是否保存模型
# 模拟模型指标loss = 0.09accuracy = 0.87# 第一层判断:损失值是否达标if loss <= 0.1:    print("损失值达标!")    # 第二层判断:准确率是否达标(嵌套缩进)    if accuracy >= 0.85:        print("准确率也达标,保存模型并停止训练~")    else:        print("准确率未达标,仅停止训练,不保存模型!")else:    print("损失值未达标,继续训练~")

运行结果:

损失值达标!准确率也达标,保存模型并停止训练~

二、循环语句(for):大模型训练的 “重复器”

大模型训练需要重复执行相同的逻辑(比如读取 100 轮数据、计算 1000 次损失值),for 循环就是用来实现 “固定次数的重复操作”,是处理批量数据的核心。
1. 基本语法:遍历序列(列表 / 字典 / 范围)
for 变量 in 序列:    重复执行的代码
2. 核心用法 1:遍历数字范围(模拟多轮训练)

用 range(起始值, 结束值, 步长) 生成数字序列,大模型训练轮数常用:

# 模拟大模型训练10轮(range(10) 生成0-9的数字)for epoch in range(10):    # 模拟每轮训练的损失值(逐轮降低)    loss = 0.2 - epoch * 0.02    print(f"第{epoch+1}轮训练,损失值:{loss:.2f}")
运行结果:
第1轮训练,损失值:0.20第2轮训练,损失值:0.18...第10轮训练,损失值:0.02
3. 核心用法 2:遍历列表(处理批量训练数据)
大模型场景示例:计算多轮损失值的平均值
# 存储大模型8轮训练的损失值loss_list = [0.32, 0.28, 0.25, 0.22, 0.19, 0.17, 0.15, 0.13]total_loss = 0  # 初始化总损失值# 遍历损失列表,累加总损失for loss in loss_list:    total_loss += loss# 计算平均损失avg_loss = total_loss / len(loss_list)print(f"8轮训练总损失:{total_loss:.2f},平均损失:{avg_loss:.2f}")
运行结果:8轮训练总损失:1.71,平均损失:0.21
4. 核心用法 3:遍历字典(读取模型配置)
大模型场景示例:打印模型所有配置参数
# 大模型配置字典llm_config = {    "model_name": "Python-LLM-Base",    "learning_rate": 0.0005,    "batch_size": 64,    "train_epochs": 100}# 遍历字典,打印每个配置项for key, value in llm_config.items():    print(f"配置项 {key}:{value}")

运行结果:

配置项 model_name:Python-LLM-Base配置项 learning_rate:0.0005配置项 batch_size:64配置项 train_epochs:100
5. 循环控制:break/continue(灵活调整训练逻辑)
  • break:立即终止循环(比如训练达标后提前停止);
  • continue:跳过当前轮次,执行下一轮(比如跳过无效数据)。
大模型场景示例:训练达标后提前终止循环
# 模拟训练20轮,若损失值≤0.1则提前停止for epoch in range(20):    loss = 0.2 - epoch * 0.015  # 模拟损失值逐轮降低    print(f"第{epoch+1}轮训练,损失值:{loss:.2f}")    # 条件判断:损失值≤0.1则停止训练    if loss <= 0.1:        print(f"第{epoch+1}轮损失值达标,提前停止训练!")        break  # 终止循环

运行结果:

第1轮训练,损失值:0.20第2轮训练,损失值:0.18第3轮训练,损失值:0.17第4轮训练,损失值:0.15第5轮训练,损失值:0.14第6轮训练,损失值:0.12第7轮训练,损失值:0.11第8轮训练,损失值:0.09第8轮损失值达标,提前停止训练!
三、循环语句(while):大模型训练的 “无限重复器”

while 循环是 “条件满足就一直执行”,适合不确定循环次数的场景(比如直到模型收敛才停止训练)。

1. 基本语法

while 条件:    条件满足时重复执行的代码

2. 核心用法:直到模型收敛才停止训练

大模型场景示例:动态训练,直到损失值≤0.1
# 初始化参数current_loss = 0.25  # 初始损失值epoch = 0  # 训练轮数lr = 0.001  # 学习率# 循环训练:损失值>0.1就继续while current_loss > 0.1:    epoch += 1    # 模拟训练:每轮损失值降低(学习率越高,降得越快)    current_loss -= lr * 10    # 防止损失值为负数(边界处理)    current_loss = max(current_loss, 0.0)    print(f"第{epoch}轮训练,当前损失值:{current_loss:.2f}")print(f"\n训练完成!共训练{epoch}轮,最终损失值:{current_loss:.2f}")
运行结果:
第1轮训练,当前损失值:0.24第2轮训练,当前损失值:0.23...第15轮训练,当前损失值:0.10训练完成!共训练15轮,最终损失值:0.10
3. 注意事项:避免死循环
while 循环如果条件永远满足,会一直执行(死循环),开发时一定要确保条件能 “不满足”:
❌ 错误示例:while True: print("训练中...")(无终止条件)
✅ 正确示例:加计数器限制最大轮数
current_loss = 0.25epoch = 0max_epochs = 50  # 最大训练轮数while current_loss > 0.1 and epoch < max_epochs:    epoch += 1    current_loss -= 0.01    print(f"第{epoch}轮,损失值:{current_loss:.2f}")
四、实战案例:整合流程控制,编写大模型训练逻辑
"""实战案例:大模型基础训练逻辑功能:1. 定义模型初始参数2. 循环训练,每轮打印损失值3. 满足以下任一条件则停止训练:   - 损失值≤0.1   - 训练轮数≥304. 训练结束后输出总结"""# 1. 初始化模型参数llm_config = {    "learning_rate": 0.001,    "max_epochs": 30,    "target_loss": 0.1}current_loss = 0.3  # 初始损失值train_epochs = 0    # 已训练轮数loss_history = []   # 存储每轮损失值(方便后续分析)# 2. 开始训练(while循环)print("===== 大模型训练开始 =====")while current_loss > llm_config["target_loss"] and train_epochs < llm_config["max_epochs"]:    train_epochs += 1    # 模拟每轮训练:损失值降低(受学习率影响)    current_loss -= llm_config["learning_rate"] * 8    current_loss = max(current_loss, 0.0)  # 防止损失值为负    loss_history.append(current_loss)     # 记录损失值    # 每5轮打印一次进度(条件判断+取余运算)    if train_epochs % 5 == 0:        print(f"第{train_epochs}轮训练,当前损失值:{current_loss:.2f}")# 3. 训练结束,输出总结(多条件判断)print("\n===== 训练总结 =====")if current_loss <= llm_config["target_loss"]:    print(f"✅ 训练达标!损失值{current_loss:.2f} ≤ 目标值{llm_config['target_loss']}")elif train_epochs >= llm_config["max_epochs"]:    print(f"⚠️ 训练达到最大轮数{llm_config['max_epochs']},未达标(当前损失:{current_loss:.2f})")print(f"总训练轮数:{train_epochs}")print(f"损失值变化:{loss_history[:3]}...{loss_history[-3:]}")  # 打印前3和后3轮损失值

运行结果:

===== 大模型训练开始 =====第5轮训练,当前损失值:0.26第10轮训练,当前损失值:0.22第15轮训练,当前损失值:0.18第20轮训练,当前损失值:0.14第25轮训练,当前损失值:0.10===== 训练总结 =====✅ 训练达标!损失值0.10 ≤ 目标值0.1总训练轮数:25损失值变化:[0.292, 0.284, 0.276]...[0.108, 0.10000000000000009, 0.09200000000000008]

总结

  1. if 条件判断
    是大模型训练的 “决策器”,单条件用 if、二选一用 if-else、多场景用 if-elif-else,嵌套判断可处理复杂逻辑;
  2. for 循环
    适合 “固定次数” 的重复操作(比如多轮训练、遍历数据),break 终止循环、continue 跳过当前轮次;
  3. while 循环
    适合 “不确定次数” 的重复操作(比如直到模型收敛),务必设置终止条件避免死循环。

下一篇预告

今天我们掌握了流程控制的核心 ——if 判断做决策、for/while 循环做重复操作,这是编写大模型训练逻辑的 “骨架”。下一篇将讲解函数:把重复的训练逻辑(比如计算损失值、调整学习率)封装成函数,让代码更简洁、可复用,这是大模型项目模块化开发的关键!

如果写代码时遇到问题,评论区贴出你的代码和报错信息,觉得干货有用,点赞 + 在看 + 转发,让更多想入门大模型的朋友一起学!

最新文章

随机文章