【深度学习 | 核心概念】那些深度学习路上必经的核心概念,确定不来看看?(三)
🤵♂️ 个人主页: @AI_magician
📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。
👨💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!🐱🏍
🙋♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能&硬件(虽然硬件还没开始玩,但一直很感兴趣!希望大佬带带)
摘要: 本系列旨在普及那些深度学习路上必经的核心概念,文章内容都是博主用心学习收集所写,欢迎大家三联支持!本系列会一直更新,核心概念系列会一直更新!欢迎大家订阅
该文章收录专栏
[✨— 《深入解析机器学习:从原理到应用的全面指南》 —✨]
@toc
牛顿法
牛顿法(Newton’s Method)是一种数值迭代方法,用于求解方程的根。它基于以下思想:通过不断改进初始猜测值,可以逐步逼近方程的根。
具体来说,在使用牛顿法时,我们首先选择一个初始猜测值作为方程根的近似值。然后,通过计算**该点处函数曲线的斜率(即导数),并将其与当前点之间的差异除以斜率来更新位置。**这样就得到了一个新的更接近真实根的猜测值。
重复以上步骤直到满足收敛条件为止,通常是当两次迭代之间的误差小于某个预设精度时停止。最终得到的结果就是方程在给定精度下所对应的根。
牛顿法具有快速收敛和高效性能等优势,并且被广泛应用于各种科学和工程领域中需要求解非线性方程或优化问题时。
对数字进行根号
如果您想要在纯Python中求解一个数字的根,可以使用数值迭代方法,例如牛顿法(Newton’s Method)或二分法(Bisection Method)。下面是一个示例代码来使用牛顿法求解数字的平方根:
def find_square_root(number, epsilon):
guess = number / 2 # 初始猜测为number的一半
while abs(guess * guess - number) > epsilon:
guess = (guess + number / guess) / 2
return guess
number = 16
epsilon = 1e-6
square_root = find_square_root(number, epsilon)
print("Square root of", number, "is:", square_root)
在这个示例代码中,我们定义了一个名为 find_square_root
的函数,它接受参数 number
(待求平方根的数字)和 epsilon
(收敛条件)。该函数使用牛顿法进行迭代计算,并通过比较当前猜测值与实际平方根之间的差异来判断是否达到了指定精度。
请注意,在调用 find_square_root
函数时需要传入待求平方根的数字以及所需精度。在示例代码中,我们计算了数字16的平方根,并将其结果打印出来。
预训练模型
预训练是指在大规模未标注数据上进行的训练,目的是学习到通用的特征表示。与传统的监督学习不同,预训练使用的数据并没有标注好的标签,因此可以大量地获取数据来训练模型。
预训练常用的方法包括自编码器、对抗生成网络等。以自编码器为例,其基本思想是通过将输入数据压缩成低维度编码,然后再将编码解压成输入数据的方式,来学习到数据的特征表示。在预训练过程中,自编码器的目标是最小化输入数据和解压缩后的重构数据之间的差异,同时保持编码维度足够小,以避免过拟合。
由于预训练可以充分利用大规模未标注数据,因此得到的模型具有很好的泛化能力,并且可以被应用于各种不同的任务。例如,在自然语言处理领域,预训练模型如BERT、GPT等已经成为了该领域的主流技术,取得了很好的效果。
需要注意的是,预训练虽然可以充分利用未标注数据来学习特征,但是由于模型的结构相对复杂,预训练需要花费大量的计算资源和时间来完成。
在深度学习中,预训练和训练是两个不同的阶段。
预训练(pre-training)指的是在大规模未标注数据上进行的训练,目的是学习到通用的特征表示。预训练常用的方法包括自编码器、对抗生成网络等。预训练得到的模型通常称为预训练模型,这些模型通常具有很好的泛化能力,并且可以被应用于各种不同的任务。
训练(fine-tuning)则是指在特定任务上对预训练模型进行微调,使其适应该任务。训练通常需要少量的标注数据,并且通常使用反向传播算法进行优化,以最小化模型在该任务上的损失函数。通过训练,模型可以逐渐地适应特定任务的要求,并且在该任务上表现出色。
因此,预训练是一种通用模型的构建过程,而训练是针对具体任务的模型优化过程。
迁移学习
从 HDF5 加载预训练权重时,建议将权重加载到设置了检查点的原始模型中,然后将所需的权重/层提取到新模型中。
示例:
def create_functional_model():
inputs = keras.Input(shape=(784,), name="digits")
x = keras.layers.Dense(64, activation="relu", name="dense_1")(inputs)
x = keras.layers.Dense(64, activation="relu", name="dense_2")(x)
outputs = keras.layers.Dense(10, name="predictions")(x)
return keras.Model(inputs=inputs, outputs=outputs, name="3_layer_mlp")
functional_model = create_functional_model()
functional_model.save_weights("pretrained_weights.h5")
# In a separate program:
pretrained_model = create_functional_model()
pretrained_model.load_weights("pretrained_weights.h5")
# Create a new model by extracting layers from the original model:
extracted_layers = pretrained_model.layers[:-1]
extracted_layers.append(keras.layers.Dense(5, name="dense_3"))
model = keras.Sequential(extracted_layers)
model.summary()
Model: "sequential_6"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_1 (Dense) (None, 64) 50240
dense_2 (Dense) (None, 64) 4160
dense_3 (Dense) (None, 5) 325
=================================================================
Total params: 54,725
Trainable params: 54,725
Non-trainable params: 0
_________________________________________________________________
一般来说我们是使用Tensorflow
的tf.kears.application
来进行迁移学习,但其比较少的种类(主要聚焦在图像分类领域),较多种类可以使用Tensorflow Hub
来实现
🤞到这里,如果还有什么疑问🤞
🎩欢迎私信博主问题哦,博主会尽自己能力为你解答疑惑的!🎩
🥳如果对你有帮助,你的赞是对博主最大的支持!!🥳
- 点赞
- 收藏
- 关注作者
评论(0)