深度学习入门(1):Python 基础语法
在人工智能与深度学习的世界里,Python 是最核心的编程语言。无论是搭建神经网络、训练模型,还是进行数据处理,Python 都无处不在。
这一篇,我们从 Python 基础语法 入手,结合深度学习应用场景,系统学习变量、函数和类的用法。
若想要更详细的Python相关知识,请到作者Python3教程专栏进行学习。本篇博客仅补充和机械学习相关的Python内容,适合有编程语言基础的读者进行Python入手。
Python3教程专栏地址:
零、引入
在深度学习实践中,几乎所有流程都离不开 Python:
-
变量:保存超参数、路径、训练结果;
-
数据类型:存放图像、标签、批量数据;
-
判断与循环:控制训练逻辑;
-
函数:封装计算逻辑(如损失函数);
-
类:构建神经网络或训练器。
掌握这些内容,不仅能让你写出简洁高效的代码,也能帮你更快理解 PyTorch、TensorFlow 等深度学习框架。
一、变量类型与输出语句
1.1 编程基础
Python 是一门动态类型语言:
-
不需要声明类型:
a = 1就能直接使用; -
注释用
#; -
使用缩进来区分代码块(不能随便加空格)。
1.2 变量类型
在深度学习中,我们常见的变量类型有:
-
字符串:保存数据集路径或模型名称;
-
数字:学习率、准确率、批量大小;
-
布尔值:是否使用 GPU;
-
集合、元组、列表、字典:用于存储数据或超参数配置。
1.3 输出语句
在调试模型时,我们常用 print() 打印结果:
epochs = 10
lr = 0.001
print(f"训练轮数: {epochs}, 学习率: {lr}")
讲解:
这里用 f 字符串 格式化输出,把变量直接嵌入到字符串里,非常适合打印训练日志。
二、基本变量类型
2.1 字符串
字符串通常用于文件路径或标签:
dataset = "MNIST"
path = "/data/mnist/train"
print(f"数据集: {dataset}, 路径: {path}")
讲解:
训练模型时经常要指定数据集路径,比如 ImageNet 的目录。字符串让我们方便地保存和拼接这些路径。
2.2 数字
数字类型在深度学习里无处不在:
batch_size = 64 # 整数
accuracy = 0.95 # 浮点数
print("批量大小:", batch_size)
print("模型准确率:", accuracy)
讲解:
整数常用于批量大小、轮数;浮点数用于学习率、损失、准确率等。
2.3 布尔型
布尔值在训练流程中常用来控制条件:
use_gpu = True
if use_gpu:
print("使用 GPU 加速训练")
else:
print("使用 CPU 训练")
讲解:
比如 torch.cuda.is_available() 返回布尔值,用来判断能否启用 GPU。
2.4 判断语句
lr = 0.001
if lr > 0.01:
print("学习率过大,可能震荡")
elif lr < 1e-5:
print("学习率过小,可能收敛太慢")
else:
print("学习率合适")
讲解:
训练神经网络时,学习率是最重要的超参数之一,过大过小都会影响模型效果。
2.5 基本变量间的转换
str_lr = str(lr) # 数字 → 字符串
int_flag = int(True) # 布尔 → 整数
float_val = float("3.14")# 字符串 → 浮点数
讲解:
数据加载时,很多库返回的可能是字符串,需要转换成数值类型才能计算。
三、高级变量类型
3.1 集合
集合用于存放不重复的标签:
labels = {"cat", "dog", "cat", "fish"}
print(labels) # {'dog', 'cat', 'fish'}
讲解:
集合自动去重,可以用来统计数据集中不同的类别。
3.2 元组
元组适合存放不可变的超参数配置:
config = ("Adam", 0.001, 32) # (优化器, 学习率, 批量大小)
print(config)
讲解:
元组的值不可修改,适合存放固定不变的参数。
3.3 列表
列表常用于存放训练结果:
losses = [0.9, 0.7, 0.5, 0.3]
print("首轮 loss:", losses[0])
print("最后一轮 loss:", losses[-1])
讲解:
我们经常用列表保存训练过程中每一轮的 loss 或 accuracy。
3.4 字典
字典是最常见的配置管理方式:
params = {
"optimizer": "Adam",
"lr": 0.001,
"batch_size": 64
}
print(params["optimizer"])
讲解:
在深度学习项目中,训练配置通常用字典存储,方便管理和传参。
3.5 循环语句
训练过程就是循环:
epochs = 5
for epoch in range(1, epochs+1):
print(f"第 {epoch} 轮训练中...")
讲解:
这就是最简单的训练循环雏形。
3.6 列表推导式
squared = [i**2 for i in range(5)]
print(squared) # [0, 1, 4, 9, 16]
讲解:
列表推导式能让你快速生成批量数据,非常适合数据预处理。
3.7 高级变量间的转换
param_list = [("lr", 0.001), ("batch_size", 32)]
param_dict = dict(param_list)
print(param_dict)
讲解:
不同库之间数据结构不一样时,经常需要转换,字典和列表互转非常常见。
四、函数
4.1 吞吐各个类型的变量
def show_info(v):
return f"信息: {v}"
print(show_info("MNIST 数据集"))
讲解:
函数能让代码更模块化,比如封装日志打印。
4.2 吞吐多个变量
def metrics(tp, fp, fn):
precision = tp / (tp + fp)
recall = tp / (tp + fn)
return precision, recall
p, r = metrics(80, 10, 20)
print(f"精确率: {p:.2f}, 召回率: {r:.2f}")
讲解:
这是分类任务中常用的指标函数。
4.3 函数的关键字调用
def train(model, dataset, epochs):
print(f"训练 {model} 在 {dataset}, 共 {epochs} 轮")
train(dataset="CIFAR-10", model="CNN", epochs=10)
讲解:
关键字调用让函数参数更清晰,常用于训练接口。
4.4 输入参数的默认值
def build_model(name="MLP", layers=3):
print(f"构建 {name} 模型, 包含 {layers} 层")
build_model()
build_model("CNN", 5)
讲解:
默认值让函数更灵活,比如模型构建时可指定或不指定参数。
五、类
5.1 创建和使用类
class Model:
def __init__(self, name, layers):
self.name = name
self.layers = layers
def summary(self):
print(f"模型: {self.name}, 层数: {self.layers}")
m = Model("CNN", 5)
m.summary()
讲解:
类是深度学习框架的核心思想,一个模型就是一个类。
5.2 属性的默认值
class Dataset:
def __init__(self, name, size, task="分类"):
self.name = name
self.size = size
self.task = task
data = Dataset("MNIST", 60000)
print(data.task) # 分类
讲解:
默认值让类更易用,避免每次都重复传参。
5.3 继承
class Optimizer:
def __init__(self, lr):
self.lr = lr
class Adam(Optimizer):
def __init__(self, lr, beta1=0.9):
super().__init__(lr)
self.beta1 = beta1
opt = Adam(0.001)
print(opt.lr, opt.beta1)
讲解:
继承让我们在已有优化器的基础上扩展功能。
5.4 掠夺(组合)
class Loss:
def mse(self, y_true, y_pred):
return sum((t - p) ** 2 for t, p in zip(y_true, y_pred)) / len(y_true)
class Trainer:
def __init__(self):
self.loss_fn = Loss() # 组合 Loss 类
def train_step(self, y_true, y_pred):
return self.loss_fn.mse(y_true, y_pred)
trainer = Trainer()
print(trainer.train_step([1,0,1], [0.8,0.1,0.9]))
讲解:
组合(掠夺)比继承更灵活,一个训练器可以组合多个不同的组件。
总结
本文我们完整学习了:
-
Python 的基础语法(变量、输出、判断、循环);
-
高级数据结构(列表、字典、集合、元组);
-
函数与类的封装思想;
-
结合深度学习的应用场景(超参数、训练循环、模型定义)。
理解这些内容后,你就能更快上手 NumPy / Pandas / PyTorch 等深度学习工具
更多推荐



所有评论(0)