AI学习指南深度学习篇-Python实践

news2024/10/7 7:32:35

AI学习指南深度学习篇 - Python实践

引言

在现代深度学习中,学习率是一个至关重要的超参数,它直接影响模型的收敛速度和最终效果。适当的学习率能够加速训练,但过大会导致模型不收敛,过小则可能导致训练过程过慢。因此,学习率衰减成为了深度学习中的一种常见策略,可以帮助我们在训练过程中逐步减小学习率。

在本篇文章中,我们将通过使用Python中的深度学习库(如TensorFlow和PyTorch)来演示学习率衰减的实现。同时,我们还将讨论在模型训练过程中如何进行有效的调参。

1. 学习率衰减的概念

学习率衰减指的是在训练过程中逐渐减小学习率的策略,目的是为了在训练初期快速收敛,并在后期细致优化。常用的学习率衰减策略包括:

  • 固定步长衰减:每隔固定步数就减小学习率。
  • 指数衰减:学习率按一定的指数基数衰减。
  • 余弦退火:学习率在一个固定范围内周期性变化。

2. 使用TensorFlow实现学习率衰减

2.1 环境准备

在开始之前,请确保您已经安装了TensorFlow库。如果未安装,可以通过以下命令进行安装:

pip install tensorflow

2.2 示例代码

在此示例中,我们创建一个简单的全连接神经网络,使用TensorFlow实现学习率衰减。

2.2.1 导入必要的库
import tensorflow as tf
from tensorflow.keras import layers, models, optimizers
import numpy as np
import matplotlib.pyplot as plt
2.2.2 生成数据集

我们将生成一个简单的合成数据集,用于训练模型。

# 生成合成数据集
x_train = np.random.rand(1000, 20)
y_train = (np.sum(x_train, axis=1) > 10).astype(int)
x_test = np.random.rand(200, 20)
y_test = (np.sum(x_test, axis=1) > 10).astype(int)
2.2.3 建立模型
def create_model():
    model = models.Sequential([
        layers.Dense(64, activation="relu", input_shape=(20,)),
        layers.Dense(32, activation="relu"),
        layers.Dense(1, activation="sigmoid")
    ])
    return model
2.2.4 定义学习率衰减策略

这里我们使用ExponentialDecay来实现指数衰减。

initial_learning_rate = 0.1
decay_steps = 100
decay_rate = 0.96

lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
    initial_learning_rate,
    decay_steps=decay_steps,
    decay_rate=decay_rate,
    staircase=True)
2.2.5 编译和训练模型
model = create_model()
model.compile(optimizer=optimizers.Adam(learning_rate=lr_schedule),
              loss="binary_crossentropy",
              metrics=["accuracy"])

history = model.fit(x_train, y_train, epochs=100, validation_split=0.2, verbose=0)
2.2.6 可视化训练过程
plt.plot(history.history["accuracy"], label="accuracy")
plt.plot(history.history["val_accuracy"], label="val_accuracy")
plt.xlabel("Epoch")
plt.ylabel("Accuracy")
plt.legend()
plt.title("Training and Validation Accuracy with Learning Rate Decay")
plt.show()

2.3 结果分析

通过实际运行上述代码,我们可以观察到学习率的变化以及模型性能的提升。我们可以在训练过程中看到训练和验证准确率的折线图,更容易监控模型的学习效果。

3. 使用PyTorch实现学习率衰减

3.1 环境准备

确保您已经安装了PyTorch。如果未安装,可以通过以下命令进行安装:

pip install torch torchvision

3.2 示例代码

同样的,我们将使用PyTorch创建一个简单的神经网络并实现学习率衰减。

3.2.1 导入必要的库
import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
import matplotlib.pyplot as plt
3.2.2 生成数据集

与TensorFlow示例相同,生成合成数据集。

# 生成合成数据集
x_train = np.random.rand(1000, 20).astype(np.float32)
y_train = (np.sum(x_train, axis=1) > 10).astype(np.float32)
x_test = np.random.rand(200, 20).astype(np.float32)
y_test = (np.sum(x_test, axis=1) > 10).astype(np.float32)

# 转换为PyTorch张量
x_train_tensor = torch.tensor(x_train)
y_train_tensor = torch.tensor(y_train).view(-1, 1)
3.2.3 建立模型
class SimpleNN(nn.Module):
    def __init__(self):
        super(SimpleNN, self).__init__()
        self.fc1 = nn.Linear(20, 64)
        self.fc2 = nn.Linear(64, 32)
        self.fc3 = nn.Linear(32, 1)

    def forward(self, x):
        x = torch.relu(self.fc1(x))
        x = torch.relu(self.fc2(x))
        x = torch.sigmoid(self.fc3(x))
        return x

model = SimpleNN()
3.2.4 定义学习率衰减策略

使用torch.optim.lr_scheduler来实现学习率衰减。

initial_lr = 0.1
optimizer = optim.Adam(model.parameters(), lr=initial_lr)
scheduler = optim.lr_scheduler.ExponentialLR(optimizer, gamma=0.96)
3.2.5 训练模型
epochs = 100
train_losses = []

for epoch in range(epochs):
    model.train()
    optimizer.zero_grad()
    
    output = model(x_train_tensor)
    loss = nn.BCELoss()(output, y_train_tensor)
    loss.backward()
    optimizer.step()
    scheduler.step()  # 更新学习率

    train_losses.append(loss.item())
    
    if epoch % 10 == 0:
        print(f"Epoch {epoch}, Loss: {loss.item()}, Learning Rate: {scheduler.get_last_lr()}")
3.2.6 可视化训练过程
plt.plot(train_losses)
plt.xlabel("Epoch")
plt.ylabel("Loss")
plt.title("Training Loss with Learning Rate Decay")
plt.show()

3.3 结果分析

通过观察训练损失的变化,可以记住在学习率衰减策略下模型的学习过程。降低学习率使得模型在训练后期能够更加细致地优化,避免错过局部最优。

4. 调参技巧

学习率衰减是深度学习模型训练中的重要一环,但选择合适的衰减参数(例如:初始学习率、衰减步长和衰减率)对于训练效果有显著影响。以下是一些调参技巧:

  1. 网格搜索(Grid Search):系统性地尝试不同的学习率、衰减率和衰减步长的组合,以找到最佳设置。

  2. 学习率范围测试:以线性或对数方式增加学习率,观察损失变化,从而找到一个合理的初始化学习率。

  3. 早停法和检查点:结合其他技术(如早停法),记住保存最佳模型,以防止过拟合。

  4. 微调策略:对大规模预训练模型进行微调时,使用较小的学习率衰减策略。

5. 小结

本文介绍了在深度学习中如何使用TensorFlow和PyTorch实现学习率衰减策略。我们从基本概念入手,展示了具体的代码示例,并探讨了调参技巧。学习率衰减不仅能够帮助模型更好地收敛,也为我们在深度学习中的其他调参策略提供了启示。

希望这些实践能够帮助到您在深度学习的研究与应用中更进一步!如有任何问题或建议,欢迎交流讨论!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2193754.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

tldr命令介绍

tldr命令介绍 安装 TLDR使用 TLDR更新命令仓库 TLDR 是 “Too Long; Didn’t Read” 的缩写,在 Linux中是一个非常有用的工具,旨在为用户提供简洁的命令行工具或程序的使用说明,TLDR的目标是解决传统手册页信息过于繁杂的问题,通过…

独享动态IP是什么?它有什么独特优势吗?

在网络世界中,IP地址扮演着连接互联网的关键角色。随着互联网的发展,不同类型的IP地址也应运而生,其中独享动态ip作为一种新型IP地址,备受关注。本文将围绕它的定义及其独特优势展开探讨,以帮助读者更好地理解和利用这…

使用keras-tuner微调神经网络超参数

目录 随机搜索RandomSearch HyperBand 贝叶斯优化BayesianOptimization 附录 本文将介绍keras-tuner提供了三种神经网络超参数调优方法。它们分别是随机搜索RandomSearch、HyperBand和贝叶斯优化BayesianOptimization。 首先需要安装keras-tuner依赖库,安装命令如…

State of ChatGPT ---- ChatGPT的技术综述

声明:该文总结自AI菩萨Andrej Karpathy在youtube发布的演讲视频。 原视频连接:State of GPT | BRK216HFS 基础知识: Transformer原文带读与代码实现https://blog.csdn.net/m0_62716099/article/details/141289541?spm1001.2014.3001.5501 H…

【GT240X】【06】Linux文本编辑软件vim

目录 一、说明 二、什么是 vim? 三、vi/vim 的使用 3.1 命令模式 3.2 输入模式 3.3 底线命令模式 四、vi/vim 按键说明 4.1 一般模式可用的光标移动、复制粘贴、搜索替换等 4.2 一般模式切换到编辑模式的可用的按钮说明 4.3 一般模式切换到指令行模式的…

案例-博客页面简单实现

文章目录 本文内容只涉及前端1. 内容要求2. 画面展示初始化面演示视频 3. 注意事项4. 代码区js文件夹下的jquery.min.js内容登录代码列表页面创作页面 本文内容只涉及前端 1. 内容要求 登录页面实现博客列表页面实现博客创作页面实现 链接: 开源在线 Markdown 编辑器文本框可…

布草洗涤厂自动统计单据管理打包标签———未来之窗行业应用跨平台架构

一、布草洗涤厂打包标签 二、大酒店楼层送货单 三、独立三联单销售单 四、职员司机统计报表 五、开通方法 扫码开通

大数据新视界 --大数据大厂之 从 Druid 和 Kafka 到 Polars:大数据处理工具的传承与创新

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

[SAP ABAP] 程序调用

示例数据 学生表(ZDBT_STU_437) 程序: Z437_TEST_20241006 代码如下所示 REPORT Z437_TEST_20241006.* 创建跟表或结构同名的工作区 TABLES: zdbt_stu_437.SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.PARAMETERS: p_1 TYPE c LENGTH 4.SELECT-O…

低组装滚珠导轨:承载力强,适应多样工况!

在自动化行业中,高质量、高效率的生产线是确保产品品质和生产效率的关键。而低组装型滚珠导轨作为生产线中的重要组件之一,能够提供精准的直线运动控制,为自动化设备的稳定运行和高精度检测提供可靠支持。 相对于传统的导轨系统来说&#xff…

网站集群批量管理-Ansible-模块管理

1. 概述 1. 自动化运维: 批量管理,批量分发,批量执行,维护 2. 无客户端,基于ssh进行管理与维护 2. 环境准备 环境主机ansible10.0.0.7(管理节点)nfs01 10.0.0.31(被管理节点)backup10.0.0.41(被管理节点) 2.1 创建密钥认证 安装sshpass yum install -y sshpass #!/bin/bash ##…

Renesas R7FA8D1BH (Cortex®-M85)和蓝牙模块通信

目录 概述 1 软硬件 1.1 软硬件环境信息 1.2 开发板信息 1.3 调试器信息 2 硬件架构 2.1 系统架构 2.2 蓝牙模块介绍 3 软件实现 3.1 FSP配置参数 3.2 代码实现 3.2.1 驱动函数 3.2.2 功能函数 概述 本文主要介绍Renesas R7FA8D1BH (Cortex-M85)和蓝牙模块通信的…

【leetcode】274.H指数

为了方便,将 citations 记为 cs。 所谓的 h 指数是指一个具体的数值,该数值为“最大”的满足「至少发表了 x 篇论文,且每篇论文至少被引用 x 次」定义的合法数,重点是“最大”。 用题面的实例 1 来举个 🌰&#xff0…

hackmyvm-BaseME靶机

主机发现 sudo arp-scan -l 扫描到本地网络靶机ip:192.168.91.173 nmap扫描 sudo nmap 192.168.91.173 发现靶机开放22端口的ssh服务与80端口的http服务 base64加密 我们访问一下80端口,发现了一串加密信息,判读大概是base64加密 base64加密特征&…

软件无线电4-位同步

在数字通信系统中,同步主要有三种方式,载波同步、位同步和群同步。载波同步指在相干解调时,接收机的解调器需要产生一个与调制载波同频同相的相干载波。载波同步又称为载波恢复。位同步指接收机需要产生一个与调制信号符号速率相同&#xff0…

【stm32】ADC的介绍与使用

ADC的介绍与使用 1、ADC介绍2、逐次逼近型ADC3、ADC电路4、ADC基本结构程序代码编写:ADC 通道和引脚复用的关系 5、转换模式(1)单次转换,非扫描模式转换流程:程序编写: (2)连续转换&…

Android一个APP里面最少有几个线程

Android一个APP里面最少有几个线程 参考 https://www.jianshu.com/p/92bff8d6282f https://www.jianshu.com/p/8a820d93c6aa 线程查看 Android一个进程里面最少包含5个线程,分别为: main线程(主线程)FinalizerDaemon线程 终结者守护线程…

pg 视图

1.概念 2.创建 3.修改 3.删除 4.递归

【量子计算】开辟全新计算范式

1. 🚀 引言1.1 🚀 量子计算的现状与发展趋势1.2 📜 量子位、量子门和量子电路的基本概念1.3 🏆 量子计算在科学研究中的作用 2. 🔍 量子计算的演变与创新2.1 🌟 量子计算的发展历程2.2 🧠 量子算…

Dit架构 diffusion范式分类+应用

1.ping 网址 2.ssh nscc/l20 3.crtl,打开vscode的setting 4.win 10修改ssh配置文件及其密钥权限为600 - 晴云孤魂 - 博客园 整体来看: 使用transformer作为其主干网络,代替了原先的UNet 在latent space进行训练,通过transformer处理潜…