蒸馏(Distillation)是一种在机器学习和深度学习中广泛应用的技术,特别是在模型压缩和知识迁移方面。蒸馏的目的是创建一个较小的、计算效率更高的模型,同时尽可能保持原始大模型的性能。这种方法通常用于将一个复杂的模型(如一个大模型或预训练模型)的知识转移到一个小模型上,而小模型通常更容易部署和运行在资源受限的环境中。
蒸馏的基本原理
蒸馏的基本思想是通过最小化一个教师模型(通常是原始大模型)和学生模型(较小或较简单模型)之间的差异来训练学生模型。这种差异通常是通过某种形式的损失函数来衡量的,例如最常见的有温度缩放(Temperature Scaling)方法。
在Python中开发一个大模型程序通常涉及以下几个步骤:
1. 选择合适的库
对于机器学习或深度学习项目,常用的库有:
-
TensorFlow 和 Keras:由Google开发,非常适合构建深度学习模型。
-
PyTorch:由Facebook开发,提供了灵活的张量操作和自动求导功能。
-
Scikit-learn:适合传统的机器学习任务。
- ✅基本数据类型全家福:
- int → 整数(42)
- bool → 布尔值(True/False)
- float → 浮点数(3.14)
- str → 字符串("Hello")
- list → 可变序列([1,2])
- tuple → 不可变序列((1,2))
- set → 无序不重复集合
- dict → 键值对字典
- complex → 复数(1+2j)
- 👉特殊成员:函数/模块/类型本身也是对象!
- 🔢不可不知的常量
- ✔️数学三杰:
- math.pi → 圆周率π
- math.e → 自然对数e
- math.inf → 无穷大∞
- ✔️布尔判官:
- True → 真值开关
- False → 假值开关
- ✔️空值代表:
- None → 表示空(类似null)
- 💡Tips:记得先import math才能调用哦!
- ⚙️运算符冷知识
- 🔀赋值技巧:
- a += 1 等价于 a = a + 1
- (右边算完赋值给左边!)
- 🧮算术运算符:
- // → 地板除(5//2=2)
- @ → 矩阵乘法(numpy常用)
- ** → 幂运算(2**3=8)
- % → 取余(-2%3=1)
- 💥隐藏知识点:fmod vs %
- math.fmod(-2,3) → -2
- -2%3 → 1
- 👉区别:负数取余时方向不同!
- ➖fmod向零取整,%向下取整
- 📝学习贴士:
- 1️⃣ type()函数可查变量类型
- 2️⃣ 浮点数比较用math.isclose()
- 3️⃣ 变量命名避开关键字
- 4️⃣ 逻辑运算符优先级:not>and>or
- 🎯新手常见误区:
- × 用is比较数值(应用==)
- × 把1.0当作整数判断
- × 忘记导入math直接调pi
1 文件操作
1.1 文件打开与关闭
1.1.1 打开文件-open
# 打开文件(默认为只读模式)
file_path = 'example.txt'
with open(file_path, 'r') as file:
# 执行文件操作,例如读取文件内容
file_content = file.read()
print(file_content)
# 文件在with块结束后会自动关闭,无需显式关闭文件
在Python中,对象类型转换可以通过多种方法实现,包括使用内置函数、类型构造函数、显式类型转换等。其中,使用内置函数是最常见的方法,例如可以使用int()
、float()
、str()
等函数进行基本的数据类型转换。此外,对于自定义对象,可以通过实现特殊方法(如__int__()
、__float__()
、__str__()
等)来自定义转换行为。以下将详细介绍Python中几种常见的对象类型转换方法。
eval() 是 Python 内置的一个函数,它可以将字符串当作[有效的] Python 表达式进行求值并返回结果。它的作用是将字符串转换为相应的数据类型、执行计算和执行任意有效的 Python 代码。
然而,使用 eval() 函数需要谨慎,因为它可以执行任意的代码,可能导致安全风险和不受控制的行为。
1. eval() 函数的语法
eval() 函数的语法如下:
eval(expression, globals=None, locals=None)
参数:
expression 是一个字符串,表示要求值的表达式或代码。
内置异常,指预定义的[异常类],当程序运行时遇到错误情况,就会抛出相应的异常。这些异常类构成了一个层次结构,BaseException
是所有[异常的]基类。
1. 顶级异常类
BaseException
:所有异常的基类。通常不直接捕获这个异常,因为它会捕获像SystemExit
、KeyboardInterrupt
等控制流异常。Exception
:大多数内置异常的基类,除了一些系统退出和中断相关的异常。在编写异常处理代码时,通常捕获Exception
及其子类。
在日常的软件测试过程中,测试数据的构造是一个占比非常大的活动。对于测试数据的构造,分为结构化的数据构造方式和非结构化的数据构造方式,反映python代码里分别是:
- 定义数据的class:修改数据中的某一个字段,操作json或者直接针对class的成员变量进行修改。
- 不定义数据的class: 直接操作json(dict),来构造或者修改数据。
两种方式各有优缺点, 对于业务上有明确业务含义的数据,比如请求数据,建议使用第一种方式,对数据进行建模和定义; 而临时的数据构造,可以使用第二种方式,不需要额外定义一些结构,成本会低一些。在使用于第一种方法时,就会涉及到python中json数据与类对象的相互转化的。
在 Python 中,pass
是一个空语句,占位符,表示什么也不做。它通常用于需要一个语法上必须有代码的位置,但暂时还没有实际实现时。
1. 基本语法
pass
不执行任何操作,直接跳过。例如:
if True:
pass # 什么都不做