目录
1. 变量 (Variables):给数据贴标签
命名规范(ML 领域的潜规则)
2. 四大核心数据类型 (The Core Types)
A. Float (浮点数) —— ML 的绝对主角
B. Int (整数) —— 计数器
C. Bool (布尔值) —— 逻辑开关
D. String (字符串) —— 文本与路径
必须要会的技能:类型转换 (Casting)
3. f-string:格式化输出神器
基础用法
进阶用法:控制数字精度 (ML 必学)
4. 实战演练:模拟训练日志
课后思考 (Check Your Understanding)
1. 变量 (Variables):给数据贴标签
在 Python 中,变量不需要“声明类型”(不像 C++ 或 Java 需要写int a = 1)。你直接赋值,Python 会自动识别。
命名规范(ML 领域的潜规则)
虽然 Python 推荐用全小写加下划线(如my_variable),但在机器学习的数学公式实现中,我们经常打破这个规则以匹配数学符号:
常规变量:
learning_rate,batch_size,model_path(使用 snake_case)矩阵/数据集:
X(通常大写,代表特征矩阵),y(通常小写,代表标签)参数:
w(权重 weights),b(偏置 bias)
# 定义变量非常简单,左边是名字,右边是值 epoch = 10 # 训练轮数 learning_rate = 0.001 # 学习率 is_training = True # 是否正在训练 model_name = "ResNet50" # 模型名称 # 变量的值是可以随时修改的 epoch = epoch + 1 # 现在 epoch 变成了 112. 四大核心数据类型 (The Core Types)
Python 有很多类型,但做算法模型时,你 95% 的时间只在和下面这四种打交道。
A. Float (浮点数) —— ML 的绝对主角
机器学习的核心是微积分和矩阵运算,结果几乎永远是小数。
场景:模型的准确率 (0.985)、损失函数值 (0.0023)、权重参数。
注意:哪怕是
1.0,在计算机眼里它也是浮点数,而不是整数。
B. Int (整数) —— 计数器
场景:数据集的索引(第 5 张图)、训练的轮数(第 10 轮)、分类的类别 ID(0 代表猫,1 代表狗)。
C. Bool (布尔值) —— 逻辑开关
只有两个值:True和False(注意首字母大写)。
场景:
shuffle=True(打乱数据),use_gpu=False(使用 CPU),pretrained=True(使用预训练模型)。
D. String (字符串) —— 文本与路径
用单引号' '或双引号" "包裹。
场景:文件路径
'./data/train.csv',自然语言处理中的原始文本'I love AI'。
必须要会的技能:类型转换 (Casting)
数据读入时经常格式不对(比如从文本文件读入的数字默认是字符串),你需要手动转换。
s = "3.14159" # print(s + 1) # ❌ 报错!字符串不能和数字相加 f = float(s) # ✅ 强制转换为浮点数 print(f + 1) # 输出: 4.14159 i = int(3.9) # ✅ 浮点转整数(注意:是直接截断,不是四舍五入) print(i) # 输出: 33. f-string:格式化输出神器
在训练神经网络时,你经常盯着屏幕看滚动的日志。如果打印得乱七八糟,会非常影响判断。
Python 3.6 引入的f-string(formatted string literal) 是目前最推荐的写法。
基础用法
在字符串的引号前加一个f,然后在字符串内部用花括号{}包裹变量。
acc = 0.85 name = "YOLOv5" # 老式写法 (不推荐,容易眼花) print("模型 " + name + " 的准确率是 " + str(acc)) # ✅ f-string 写法 (推荐) print(f"模型 {name} 的准确率是 {acc}")进阶用法:控制数字精度 (ML 必学)
损失函数(Loss)通常是很长的小数,如0.1293847192。直接打印太乱,我们通常只看前4位或前6位。
语法:
{变量:格式}.4f:表示保留小数点后 4 位浮点数。.2%:表示显示为百分比,保留 2 位小数。
loss = 0.1293847192 accuracy = 0.98765432 # 这里的 :.4f 和 :.2% 是重点 print(f"Loss: {loss:.4f}") # 输出: Loss: 0.1294 (自动四舍五入) print(f"Accuracy: {accuracy:.2%}") # 输出: Accuracy: 98.77%4. 实战演练:模拟训练日志
让我们把上面学到的组合起来,写一段模拟神经网络训练过程的代码。
# === 模拟训练参数配置 === model_name = "DeepLabV3" batch_size = 32 # int total_images = 1000 # int current_loss = 0.052391 # float # 计算一下大概需要多少个 batch 才能跑完 (简单的数学运算) # total_images / batch_size 结果是 float,我们需要转成 int steps_per_epoch = int(total_images / batch_size) # === 打印训练日志 === print("-" * 30) # 打印30个减号作为分割线 print(f"开始训练模型: {model_name}") print(f"总图片数: {total_images}, 批次大小: {batch_size}") print(f"每轮需要跑 {steps_per_epoch} 步") print("-" * 30) # 模拟打印某一步的结果 step = 15 print(f"Step [{step}/{steps_per_epoch}] -> Loss: {current_loss:.4f}")运行结果:
------------------------------ 开始训练模型: DeepLabV3 总图片数: 1000, 批次大小: 32 每轮需要跑 31 步 ------------------------------ Step [15/31] -> Loss: 0.0524课后思考 (Check Your Understanding)
请在你的 Python 环境(Jupyter Notebook 或 PyCharm)中尝试解决这个问题:
问题:
假设你有两个变量:
precision = 0.81234
recall = 0.78912
请计算 F1-Score(公式如下),并使用 f-string 打印结果,要求保留 3 位小数。
(如果你写完了或者卡住了,可以随时把代码发给我,我来帮你 Review!)