01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南
02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖
03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南
04-玩转 LangChain:从文档加载到高效问答系统构建的全程实战
05-玩转 LangChain:深度评估问答系统的三种高效方法(示例生成、手动评估与LLM辅助评估)
06-从 0 到 1 掌握 LangChain Agents:自定义工具 + LLM 打造智能工作流!
07-【深度解析】从GPT-1到GPT-4:ChatGPT背后的核心原理全揭秘
08-【万字长文】MCP深度解析:打通AI与世界的“USB-C”,模型上下文协议原理、实践与未来
01-【深度学习-Day 1】为什么深度学习是未来?一探究竟AI、ML、DL关系与应用
02-【深度学习-Day 2】图解线性代数:从标量到张量,理解深度学习的数据表示与运算
03-【深度学习-Day 3】搞懂微积分关键:导数、偏导数、链式法则与梯度详解
04-【深度学习-Day 4】掌握深度学习的“概率”视角:基础概念与应用解析
05-【深度学习-Day 5】Python 快速入门:深度学习的“瑞士军刀”实战指南
欢迎来到深度学习系列的第五天!在之前的文章中,我们已经探讨了深度学习的基本概念和所需的数学基础。今天,我们将聚焦于实现这一切的强大工具——Python 编程语言。Python 因其简洁的语法、庞大的库生态和活跃的社区,已成为数据科学和深度学习领域的首选语言,被誉为该领域的“瑞士军刀”。无论你是编程新手,还是希望系统了解 Python 在深度学习中应用的开发者,本文都将为你提供一个清晰、实用的快速入门指南,为你后续学习 TensorFlow、PyTorch 等深度学习框架扫清障碍。
在我们深入学习 Python 语法之前,先来理解为什么 Python 在深度学习领域如此受欢迎。
Python 拥有一个极其丰富的第三方库生态系统,专门为科学计算、数据分析和机器学习而设计:
这些库极大地简化了开发流程,让研究人员和工程师能够专注于模型设计和实验,而非底层实现细节。
相较于 C++ 或 Java 等语言,Python 的语法更加简洁、直观,接近自然语言,使得:
这使得研究人员可以快速将算法思想转化为可执行代码,加速研究迭代。
Python 拥有全球最大、最活跃的开发者社区之一。这意味着:
工欲善其事,必先利其器。一个稳定、易用的开发环境是学习 Python 的第一步。
Anaconda 是一个包含了 Python 解释器、常用科学计算库以及强大的包管理和环境管理工具 (Conda) 的发行版。Miniconda 是 Anaconda 的精简版,只包含 Python 和 Conda,其他库需要自行安装。对于深度学习开发,强烈推荐使用 Anaconda 或 Miniconda。
conda
命令。安装完成后,打开你的终端(Windows 用户推荐 Anaconda Prompt 或 PowerShell),使用以下命令创建一个新的虚拟环境(例如,命名为 dl_env
,并指定 Python 版本为 3.9):
conda create -n dl_env python=3.9
创建完成后,激活该环境:
conda activate dl_env
source activate dl_env
或 conda activate dl_env
之后,你在这个环境中安装的所有库都将与系统默认的 Python 环境或其他虚拟环境隔离。后续的深度学习库(如 TensorFlow, PyTorch)都应安装在此环境中:
# 示例:安装 numpy
pip install numpy
# 或使用 conda 安装
# conda install numpy
提示: 退出当前环境使用 conda deactivate
。
编写和运行 Python 代码需要一个集成开发环境(IDE)或代码编辑器。以下是两个流行的选择:
jupyter notebook
或 jupyter lab
。掌握以下核心语法是使用 Python 进行深度学习的基础。
Python 有多种内置的数据类型,以下是深度学习中最常用的几种:
10
, -5
, 0
。3.14
, -0.5
, 2.7e-4
(科学计数法 2.7 × 1 0 − 4 2.7 \times 10^{-4} 2.7×10−4)。# 数字示例
age = 25 # 整数
price = 99.9 # 浮点数
learning_rate = 1e-3 # 浮点数 (0.001)
# 基本运算
sum_val = age + 5
product = price * 2
print(f"Sum: {sum_val}, Product: {product}") # 使用 f-string 格式化输出
'...'
或双引号 "..."
包裹。# 字符串示例
message = "Hello, Deep Learning!"
framework = 'PyTorch'
# 字符串拼接
full_message = message + " Let's use " + framework + "."
print(full_message)
# 常用方法
print(message.lower()) # 转小写: "hello, deep learning!"
print(len(message)) # 获取长度: 21
[...]
定义,元素可以是不同类型。# 列表示例
layers = ['input', 'hidden1', 'hidden2', 'output']
params = [128, 64, 0.01, 'relu'] # 元素类型可不同
# 访问元素 (索引从 0 开始)
first_layer = layers[0] # 'input'
last_layer = layers[-1] # 'output' (负数索引表示从末尾开始)
print(f"First layer: {first_layer}, Last layer: {last_layer}")
# 修改元素
layers[1] = 'dense_1'
print(f"Updated layers: {layers}")
# 添加元素
layers.append('softmax')
print(f"After append: {layers}")
# 切片 (Slicing) [start:stop:step]
hidden_layers = layers[1:3] # 获取索引 1 到 2 (不包含 3) 的元素: ['dense_1', 'hidden2']
print(f"Hidden layers: {hidden_layers}")
(...)
定义。一旦创建,其元素不能被修改、添加或删除。# 元组示例
input_shape = (28, 28, 1) # 常用于表示维度、坐标等固定信息
# 访问元素 (同列表)
height = input_shape[0]
print(f"Image height: {height}")
# 尝试修改会报错 TypeError
# input_shape[0] = 32
{...}
定义。键必须是唯一的、不可变的对象(通常是字符串或数字)。# 字典示例
hyperparameters = {
"learning_rate": 0.001,
"batch_size": 32,
"optimizer": "Adam",
"epochs": 10
}
# 访问值 (通过键)
lr = hyperparameters["learning_rate"] # 0.001
print(f"Learning Rate: {lr}")
# 修改值
hyperparameters["epochs"] = 20
print(f"Updated hyperparameters: {hyperparameters}")
# 添加新键值对
hyperparameters["loss_function"] = "CrossEntropy"
print(f"Added loss: {hyperparameters}")
# 获取所有键或值
print(f"Keys: {hyperparameters.keys()}")
print(f"Values: {hyperparameters.values()}")
{...}
定义,或者使用 set()
函数。常用于去重或成员测试。# 集合示例
unique_activations = {'relu', 'sigmoid', 'tanh', 'relu'} # 重复的 'relu' 会被自动去除
print(f"Unique activations: {unique_activations}") # 输出可能是 {'tanh', 'relu', 'sigmoid'} 顺序不定
# 成员测试 (速度快)
has_relu = 'relu' in unique_activations
print(f"Has relu? {has_relu}") # True
控制流语句用于决定代码的执行顺序。
根据条件的真假执行不同的代码块。
# 条件判断示例
accuracy = 0.95
if accuracy > 0.9:
print("Model performance is Good!")
elif accuracy > 0.7: # elif 是 else if 的缩写
print("Model performance is Acceptable.")
else:
print("Model needs improvement.")
# for 循环示例
layers = ['conv1', 'pool1', 'conv2', 'pool2', 'fc']
for layer in layers:
print(f"Processing layer: {layer}")
# 使用 range() 生成数字序列
for i in range(5): # 遍历 0, 1, 2, 3, 4
print(f"Iteration {i}")
# while 循环示例
epoch = 0
max_epochs = 5
while epoch < max_epochs:
print(f"Training epoch {epoch + 1}...")
# ... 模拟训练过程 ...
epoch += 1 # 更新循环条件,否则会无限循环!
print("Training finished.")
函数是将一段具有特定功能的代码组织起来的方式,可以重复调用。
def
)使用 def
关键字定义函数,可以包含参数和返回值。
# 函数定义示例
def calculate_accuracy(y_true, y_pred):
"""计算分类准确率""" # 这是文档字符串 (docstring),用于解释函数功能
correct_predictions = 0
for true_label, pred_label in zip(y_true, y_pred):
if true_label == pred_label:
correct_predictions += 1
accuracy = correct_predictions / len(y_true)
return accuracy # 返回计算结果
定义函数后,可以通过函数名加括号 ()
来调用它,并传入所需的参数。
# 函数调用示例
true_labels = [1, 0, 1, 1, 0]
predicted_labels = [1, 0, 0, 1, 0]
acc = calculate_accuracy(true_labels, predicted_labels)
print(f"Model accuracy: {acc}") # 输出: Model accuracy: 0.8
让我们将所学知识应用到一个简单的实践任务中。
假设我们有一组模型的损失值记录在一个列表中,我们需要编写一个 Python 脚本来计算平均损失值。
创建一个名为 calculate_loss.py
的文件,并将以下代码粘贴进去:
# calculate_loss.py
# 模拟的损失值列表
loss_values = [0.5, 0.4, 0.35, 0.3, 0.28, 0.25]
def calculate_average_loss(losses):
"""计算列表中数值的平均值"""
if not losses: # 处理空列表的情况
return 0.0
total_loss = sum(losses) # 使用内置 sum() 函数计算总和
average_loss = total_loss / len(losses)
return average_loss
# 主程序部分
if __name__ == "__main__":
# 调用函数计算平均损失
avg_loss = calculate_average_loss(loss_values)
# 打印结果
print(f"Loss values: {loss_values}")
print(f"Number of recorded losses: {len(loss_values)}")
# 使用 :.4f 格式化浮点数,保留4位小数
print(f"Average loss: {avg_loss:.4f}")
# `if __name__ == "__main__":` 确保这部分代码只在脚本直接运行时执行,
# 而在被其他脚本导入时不会执行。这是 Python 脚本的常用结构。
保存文件: 将上述代码保存为 calculate_loss.py
。
打开终端: 确保你已经激活了之前创建的 dl_env
虚拟环境 (conda activate dl_env
)。
导航到目录: 使用 cd
命令切换到 calculate_loss.py
文件所在的目录。
运行脚本: 在终端中输入以下命令:
python calculate_loss.py
查看输出: 你应该会看到类似以下的输出:
Loss values: [0.5, 0.4, 0.35, 0.3, 0.28, 0.25]
Number of recorded losses: 6
Average loss: 0.3467
调试提示: 如果代码出错,Python 解释器会打印错误信息(Traceback),仔细阅读错误信息通常能帮助定位问题。在 VS Code 中,你可以设置断点并使用调试器逐行执行代码,检查变量的值。
conda
或 python
命令找不到: 通常是环境变量(PATH)未正确配置。检查 Anaconda/Miniconda 安装选项或手动添加路径。conda install
,如果 Conda 源没有该库,再尝试 pip install
。学习编程最有效的方法就是动手实践。不要害怕写代码,尝试修改示例代码,解决小问题,逐步积累经验。遇到问题时,学会搜索、阅读文档和提问。
恭喜你完成了 Python 快速入门的学习!掌握 Python 是开启深度学习大门的关键一步。本文核心内容回顾:
def
, 调用)是编写 Python 程序的基础。在接下来的文章中,我们将深入学习 NumPy、Pandas 等核心库,它们是使用 Python 进行高效数据处理和深度学习计算的基石。准备好迎接更多挑战吧!