当前位置: 首页 > news >正文

深入理解 PyTorch:从入门到精通的深度学习框架

📌  友情提示
本文内容由银河易创AI(https://ai.eaigx.com)创作平台的gpt-4-turbo模型生成,旨在提供技术参考与灵感启发。文中观点或代码示例需结合实际情况验证,建议读者通过官方文档或实践进一步确认其准确性。

在当今的人工智能和深度学习领域,框架的选择至关重要。在众多的深度学习框架中,PyTorch 以其灵活性和易用性赢得了广泛的欢迎。本文将探讨 PyTorch 的核心特性、基本用法,及其在深度学习中的应用。

一、什么是 PyTorch?

PyTorch 是一个基于 Python 的开源深度学习框架,最初由 Facebook 的人工智能研究院(FAIR)于 2016 年推出。随着时间的推移,PyTorch 逐渐成为机器学习和深度学习领域中最受欢迎的框架之一。它的设计理念旨在提供一种易于使用的工具,使得研究人员和开发者能够高效地构建和训练深度学习模型。

1. 动态计算图

PyTorch 的一个核心特性是它使用动态计算图(Dynamic Computation Graph),这与许多深度学习框架(如 TensorFlow 1.x)中的静态计算图有所不同。在静态计算图中,计算过程在模型构建时就被定义和固定,这使得调试和修改模型变得困难。而在 PyTorch 中,计算图在每次前向传播时都是动态生成的,这意味着用户可以在运行时灵活地改变模型的结构。这种特性对于快速试验新想法和方法非常有利,尤其是在研究领域。

例如,假设研究者希望在训练过程中动态添加或更改层,只需修改前向传播函数,PyTorch 会自动处理相应的计算图更新。这种灵活性在构建递归神经网络(RNN)或处理变长输入时显得尤为重要。

2. 张量(Tensor)操作

PyTorch 前所未有的强大张量操作是其高效性的基础。张量是 PyTorch 中的基本数据结构,可以被视为多维数组。PyTorch 的张量具有以下几个特性:

  • GPU 支持:PyTorch 允许用户将张量轻松地从 CPU 移动到 GPU,这使得并行运算变得高效。用户可以通过简单的方法在 GPU 和 CPU 之间切换。

  • 丰富的操作:PyTorch 提供了丰富的线性代数、矩阵运算和广播操作,可以处理多维张量的计算。这些操作的设计使得许多常见的深度学习任务变得简单。

  • 自动微分:PyTorch 的 autograd 模块允许用户自动计算梯度。只需在计算过程中使用 requires_grad=True 创建张量,PyTorch 会跟踪所有操作,并在反向传播时自动计算梯度。这为实现复杂模型的训练提供了极大的便利。

3. 模块化设计

PyTorch 的设计遵循了模块化原则,允许用户构建和训练复杂的神经网络模型。用户通过继承 torch.nn.Module 类来定义自己的模型架构,将各个层(如卷积层、全连接层等)组合起来形成完整的模型结构。每个模型可以拥有自己独立的前向传播逻辑,这大大提高了代码的可读性和可维护性。

此外,PyTorch 还提供了多种常用的预定义模块,例如:

  • 神经网络层:如 nn.Conv2dnn.Linear 和 nn.LSTM
  • 损失函数:如 nn.CrossEntropyLoss 和 nn.MSELoss
  • 优化器:如 torch.optim.SGD 和 torch.optim.Adam

这种模块化的设计使得构建复杂模型变得更为直观,用户可以专注于算法而不必过多关注底层实现。

4. 生态系统与社区支持

PyTorch 拥有一个活跃而庞大的开发者和用户社区。无论是新手还是资深研究者,都可以在官方文档、论坛、GitHub 和 Stack Overflow 等平台找到丰富的资源和支持。PyTorch 还衍生出了多个子库,专门用于处理特定任务:

  • TorchVision:提供计算机视觉相关的数据集、模型和转换工具,常用于图像分类、目标检测和图像增强。
  • TorchText:专门处理文本数据,支持文本数据集的加载、预处理和文本向量化。
  • TorchAudio:用于音频信号处理,提供音频信号加载和预处理的功能。

这使得用户能够在多个领域快速上手,构建和实验不同的模型。

5. 工业应用与科研成果

因为其灵活性和易用性,PyTorch 逐渐被业界和学术界广泛采用。许多知名的科研项目和产品已经基于 PyTorch 开发,如 OpenAI 的 GPT 系列、Facebook 的 DINO、AlphaFold 等。PyTorch 还被数个前沿研究所和大学作为教学和科研的主要工具。

总之,PyTorch 是一个功能强大、灵活且易于使用的深度学习框架,适用于初学者和研究人员的高效建模需求。其独特的设计理念和社区支持使得它在快速发展的深度学习领域中脱颖而出。随着技术的进步,PyTorch 将继续推动人工智能和机器学习的研究与应用。

二、PyTorch 的核心特性

PyTorch 之所以在众多深度学习框架中脱颖而出,主要归功于其几个核心特性。这些特性不仅使得模型的构建和训练变得更加高效,也提高了用户的开发体验。以下是 PyTorch 的几个核心特性,详细介绍其背景、应用和优缺点:

1. 动态计算图(Dynamic Computation Graph)

动态计算图是 PyTorch 的核心特性之一,它允许用户在运行时根据需要构建计算图。这种灵活性与静态计算图(如 TensorFlow 1.x)形成鲜明对比,后者在模型定义时就创建了整个计算图,导致在调试和修改过程中较为繁琐。

应用场景

  • 变长输入:在处理自然语言处理任务时,如文本分类或机器翻译,输入序列的长度是变化的。动态计算图可以根据当前输入的大小动态调整计算过程,无需手动进行 padding 或 truncation 处理。
  • 模型结构的实验:研究人员可以快速尝试不同的网络结构。例如,在训练期间添加或删除神经网络层,并在确保功能的基础上对其进行调试。这种灵活性很大程度上降低了开发门槛,使得实验设计更加流畅。

优缺点

  • 优点:灵活性高,易于调试和修改、快速原型开发。
  • 缺点:由于每次前向传播时都需要构建计算图,可能在计算性能上不及预定义的静态计算图框架(在某些特定场景下)。
2. 张量操作(Tensors)

张量是 PyTorch 中最基本的数据结构,类似于 Numpy 中的多维数组。PyTorch 的张量操作为构建复杂的深度学习模型提供了方便的工具。以下是 PyTorch 张量的一些关键特性:

特性

  • 多维:张量可以是任意维度的,例如,标量(0D)、向量(1D)、矩阵(2D)和更高维度的张量(3D、4D等)都可以通过 PyTorch 创建。
  • GPU 支持:PyTorch 允许用户将张量存储在 GPU 上,从而利用 GPU 的高并行计算能力。用户可以使用 .to(device) 方法轻松地在 CPU 和 GPU 之间移动张量。
  • 广播机制:PyTorch 支持 NumPy 风格的广播,让不同形状的张量能够进行运算。比如,当一个二维张量与一个一维张量相乘时,PyTorch 会自动扩展一维张量的维度,以适配二维张量的形状。

应用场景

  • 处理大规模数据集时,通过张量计算实现高效数据处理。
  • 在图像处理任务中,对图像进行像素级的运算。
3. 自动微分(Autograd)

自动微分是 PyTorch 的一个强大功能,简化了梯度计算过程。通过引入 autograd 模块,用户可以自动执行反向传播,无需手动计算梯度。其工作原理是在创建张量时标记其为需要梯度计算(requires_grad=True),后续的所有操作都会被跟踪。

工作机制

  • PyTorch 会自动构建一个计算图,将每个操作的张量和关系存储在桩上。当用户调用 .backward() 方法时,PyTorch 会根据这种关系自动计算各个张量的梯度。
  • 此外,用户可以通过修改 grad 属性,自定义反向传播的行为,这在实现某些复杂的优化算法时显得尤为重要。

应用场景

  • 训练神经网络模型时,通过自动微分计算损失函数对模型参数的梯度,进而执行优化步骤。
  • 在开发新型优化算法或复杂的学习策略时,利用灵活的微分控制来调节模型的学习过程。
4. 模块化设计(Modularity)

PyTorch 强调了模块化设计,允许用户通过继承 torch.nn.Module 来创建自定义神经网络。每个模型都可以包含多个层,并且每个层又可以自定义其前向传播和后向传播过程。

主要组件

  • 模型(Model) :通过组合的方式将不同层连接起来,形成复杂的神经网络。
  • 层(Layers) :如 nn.Linearnn.Conv2dnn.LSTM 等,允许用户灵活组建模型。
  • 损失函数(Loss Functions) :如 nn.MSELossnn.CrossEntropyLoss,用于指导模型训练的目标。

优越性

  • 使得遵循单一责任原则,每个模块负责特定的功能,提高了代码的可读性和可维护性。
  • 促进了代码的复用性,用户能够轻松组合不同的层,建立新的网络结构。
5. 生态系统与社区支持

PyTorch 发展出了一个庞大的生态系统,并且拥有活跃的开发者社区。这个生态系统包括多个相关库,以满足不同领域的需求。

相关生态系统

  • TorchVision:为计算机视觉提供了丰富的预处理工具和数据集,适用于图像处理任务。
  • TorchText:专门为自然语言处理提供数据加载、数据预处理和文本向量化的功能。
  • TorchAudio:处理音频数据,为音频信号分析和处理提供工具。

社区支持

  • PyTorch 具有良好的文档、教程和多种在线学习资源,方便初学者上手。
  • 通过 GitHub、Stack Overflow 等平台,开发者可以分享自己的见解和解决方案,形成良好的知识共享。

总结

PyTorch 的核心特性相辅相成,共同构成了一个灵活而强大的深度学习框架。动态计算图使得模型实验变得简单易行,强大的张量操作提供了高效的计算能力,自动微分简化了梯度计算过程,模块化设计则提高了代码的可维护性和复用性。而庞大的生态系统和活跃的社区支持更为用户提供了丰厚的资源与便利。综上所述,PyTorch 是一个极其适合从入门到研究的多用途深度学习工具。

三、PyTorch 的基本用法

要有效地使用 PyTorch,理解其基本用法是非常重要的。通过以下几个关键环节,包括张量创建、模型定义、训练过程和模型评估,本文将详细介绍如何利用 PyTorch 构建并训练深度学习模型。

1. 安装 PyTorch

在开始使用 PyTorch 之前,首先需要在本地环境中安装它。用户可以访问 PyTorch 官方网站 来获取适合其系统的安装命令,包括支持 CUDA 的 GPU 版本或 CPU 版本。

安装示例如下:

bash

# 安装 CPU 版本
pip install torch torchvision torchaudio# 安装 GPU 版本(选择合适的CUDA版本)
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113

通过安装完成后,可以在 Python 脚本或 Jupyter Notebook 中导入 PyTorch:

python

import torch
import torchvision
2. 创建张量

张量是 PyTorch 中的基本数据结构,类似于 NumPy 中的数组。创建张量有多种方式,以下是一些常用的方法:

python

# 创建一个 1D 张量
tensor_1d = torch.tensor([1, 2, 3, 4, 5])# 创建一个 2D 张量(矩阵)
tensor_2d = torch.tensor([[1, 2], [3, 4]])# 创建指定大小的随机张量
random_tensor = torch.rand(2, 3)  # 形状为 2x3# 创建全零张量
zeros_tensor = torch.zeros(3, 4)  # 形状为 3x4# 创建全一张量
ones_tensor = torch.ones(5)  # 形状为 5

此外,我们还可以利用 requires_grad 参数来指示是否跟踪梯度计算:

python

# 创建一个需要计算梯度的张量
data_tensor = torch.ones(2, 2, requires_grad=True)

这些张量可以在 CPU 和 GPU 之间高效地进行移动,使用 to(device) 方法即可。例如:

python

# 使用 GPU(假设 CUDA 可用)
if torch.cuda.is_available():device = torch.device("cuda")  # 使用 GPUtensor_on_gpu = tensor_1d.to(device)
else:device = torch.device("cpu")  # 否则使用 CPU
3. 定义模型

在 PyTorch 中,定义模型的标准做法是继承 torch.nn.Module 类。一个模型包含多个层和前向传播方法。以下是定义一个简单的神经网络模型的示例:

python

import torch.nn as nn
import torch.nn.functional as Fclass SimpleNN(nn.Module):def __init__(self):super(SimpleNN, self).__init__()# 定义层self.fc1 = nn.Linear(2, 2)  # 输入层,输出层self.fc2 = nn.Linear(2, 1)  # 隐藏层到输出层def forward(self, x):# 前向传播x = F.relu(self.fc1(x))  # 使用 ReLU 激活函数x = self.fc2(x)          # 输出层return x# 实例化模型
model = SimpleNN()
4. 定义损失函数和优化器

为了训练模型,我们需要定义损失函数和优化器。损失函数用来计算模型预测与真实值之间的差距,优化器则用于更新模型参数以减少损失。

python

# 定义损失函数
criterion = nn.MSELoss()  # 均方误差损失# 定义优化器
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)  # 随机梯度下降
5. 训练模型

训练模型的流程通常包括前向传播、计算损失、反向传播和优化步骤。以下是整个训练过程的代码示例:

python

# 假设输入和目标
inputs = torch.tensor([[1.0, 2.0], [2.0, 3.0]], requires_grad=False)
targets = torch.tensor([[1.0], [0.0]], requires_grad=False)# 训练过程
num_epochs = 100
for epoch in range(num_epochs):# 前向传播outputs = model(inputs)# 计算损失loss = criterion(outputs, targets)# 清零梯度optimizer.zero_grad()# 反向传播loss.backward()# 更新参数optimizer.step()if epoch % 10 == 0:print(f'Epoch [{epoch}/{num_epochs}], Loss: {loss.item():.4f}')
6. 模型评估

训练完模型后,需要对其进行评估。评估过程的关键是在验证集或测试集上计算损失和准确性。以下是评估的示例:

python

# 模型评估
with torch.no_grad():  # 不需要计算梯度test_inputs = torch.tensor([[3.0, 4.0]])predicted_outputs = model(test_inputs)print("Predicted output:", predicted_outputs)

在实际应用中,评估时可以使用更全面的指标,例如准确率、召回率、F1-score 等。

7. 保存与加载模型

模型训练完成后,常常需要保存模型以便后续使用和推理。PyTorch 提供了简单的 API 来保存和加载模型:

python

# 保存模型
torch.save(model.state_dict(), 'model.pth')# 加载模型
loaded_model = SimpleNN()
loaded_model.load_state_dict(torch.load('model.pth'))
loaded_model.eval()  # 切换到评估模式

通过这些基本操作,开发者可以利用 PyTorch 构建、训练和评估深度学习模型,满足不同的应用需求。PyTorch 的易用性和灵活性,结合广泛的社区支持和扩展库,形成了一个强大的深度学习工具链,帮助研究者和工程师更高效地完成工作。

四、PyTorch 的应用

PyTorch 是一个强大的深度学习框架,由于其灵活性和易用性,广泛应用于多个领域,包括计算机视觉、自然语言处理、强化学习、生成模型等。下面将详细探讨 PyTorch 在这些领域中的应用和具体案例。

1. 计算机视觉

计算机视觉是一个热门的研究领域,涉及到从图像和视频中提取信息。PyTorch 在这个领域内被广泛使用,提供了丰富的工具和预训练模型,极大地促进了研究和应用的进展。

  • 图像分类:使用卷积神经网络(CNN)对图像进行分类。PyTorch 提供了 torchvision 库,内置多个预训练模型(如 ResNet、VGG、Inception 等),用户可以快速实现迁移学习。例如:

    python

    from torchvision import models, transforms
    from PIL import Image# 加载预训练模型
    model = models.resnet50(pretrained=True)
    model.eval()  # 切换到评估模式# 图像预处理
    preprocess = transforms.Compose([transforms.Resize(256),transforms.CenterCrop(224),transforms.ToTensor(),transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
    ])# 加载并预处理图像
    image = Image.open("example.jpg")
    input_tensor = preprocess(image).unsqueeze(0)  # 增加批处理维度# 进行预测
    with torch.no_grad():output = model(input_tensor)
  • 目标检测:PyTorch 也支持目标检测任务,利用 torchvision 中的 Faster R-CNN、Mask R-CNN 等模型,用户可以实现实时的对象检测。

  • 图像分割:对于医学图像分割、图像背景迁移等任务,PyTorch 提供了多种分割网络的实现,如 U-Net 和 DeepLab。

应用案例

  • Facebook 利用 PyTorch 的计算机视觉功能提升了其图像内容审核的准确性。
2. 自然语言处理 (NLP)

自然语言处理是另一个重要的应用领域,PyTorch 正在逐渐成为研究者的首选框架。NLP 包括文本分类、情感分析、机器翻译等多种任务。

  • 文本分类:通过构建循环神经网络(RNN)或 Transformer 模型,PyTorch 可以轻松实现不同类型的文本分类任务,例如情感分析或主题识别。

    python

    # 示例:使用 RNN 进行文本分类
    class RNNModel(nn.Module):def __init__(self, input_size, hidden_size, output_size):super(RNNModel, self).__init__()self.rnn = nn.RNN(input_size, hidden_size, batch_first=True)self.fc = nn.Linear(hidden_size, output_size)def forward(self, x):out, _ = self.rnn(x)out = self.fc(out[:, -1, :])  # 取最后一个时间步的输出return out
  • 机器翻译:利用序列到序列(Seq2Seq)模型和注意力机制,PyTorch 可用于自然语言翻译任务。用户可以通过构建编码器-解码器架构来处理这一需求。

  • 语言模型:近年来,基于 Transformer 结构的模型(如 BERT、GPT、T5 等)在 NLP 领域取得了巨大成功,PyTorch 提供了完整的支持。

应用案例

  • OpenAI 的 GPT 系列模型和 Google 的 BERT 模型均基于 PyTorch,推动了强化学习、自然语言理解等技术的发展。
3. 强化学习

强化学习是一个复杂的学习领域,涉及智能体通过与环境的交互学习最优策略。PyTorch 凭借其动态计算图和灵活性,适合在这一领域进行探索。

  • Q 学习:通过构建基于价值的强化学习模型,用户可以利用 PyTorch 实现 Q-learning、DQN 等方法。这些方法使智能体在不同状态下选择最佳动作。

    python

    # 示例:简单的 Q-learning 更新
    def update_q_values(q_table, state, action, reward, next_state, alpha, gamma):best_next_action = torch.argmax(q_table[next_state])td_target = reward + gamma * q_table[next_state][best_next_action]td_delta = td_target - q_table[state][action]q_table[state][action] += alpha * td_delta
  • 策略梯度:使用策略优化算法,如 Actor-Critic 方法,通过直接优化策略函数来提升智能体的表现。

  • 自适应算法:例如使用 A3C(异步优势actor-critic)、PPO(近端策略优化)等现代算法进行强化学习求解。

应用案例

  • DeepMind 的 AlphaGo 和 AlphaStar 是基于 PyTorch 构建的强化学习模型,在围棋和星际争霸等复杂环境中实现了超越人类的表现。
4. 生成模型

生成模型领域包括生成对抗网络(GAN)、变分自编码器(VAE)等,广泛应用于图像生成、图像变换和数据增强等任务。

  • 生成对抗网络 (GAN) :GAN 通过训练一个生成器和一个判别器,使生成器能够生成看起来真实的图像。PyTorch 提供高度灵活的接口来构建各种类型的 GAN。

    python

    class Generator(nn.Module):def __init__(self):super(Generator, self).__init__()self.fc = nn.Sequential(nn.Linear(100, 256),nn.ReLU(),nn.Linear(256, 784),nn.Tanh())def forward(self, z):return self.fc(z)# 创建生成器实例
    generator = Generator()
  • 变分自编码器 (VAE) :VAE 可用于生成新的数据样本,如图像和声音,用户在 PyTorch 中可以非常方便地实现这一方法。

应用案例

  • GAN 的应用已在艺术创作、图像超分辨率、样本生成等领域取得成功,在诸如风格转移和人脸生成的应用中表现优异。
5. 实时推理和生产部署

随着模型训练完成,如何将其应用于实际场景中是研究的一部分。PyTorch 通过 TorchScript 和 TorchServe 等工具,使得模型的转换为高效的推理流程变得简单。

  • TorchScript:可以将 PyTorch 模型转换为一个独立且可优化的模型,用于在生产环境中进行高效推理。

    python

    # 导出模型为 TorchScript 格式
    scripted_model = torch.jit.script(model)
    scripted_model.save("model.pt")
  • TorchServe:用于服务化部署 PyTorch 模型。开发者可以在 Flask、FastAPI 等框架中集成 TorchServe,从而实现快速访问和多个实例的管理。

bash

# 启动 TorchServe 以提供模型服务
torchserve --start --ncs --ts-config config.properties

PyTorch 由于其灵活性、动态计算图、强大的生态系统、丰富的工具和社区支持,在多个领域中取得了显著的应用效果。从计算机视觉到自然语言处理,再到强化学习和生成模型,PyTorch 正在推动深度学习研究和实际应用的快速发展。通过利用 PyTorch 的关键特性,研究人员和工程师可以深入探索前沿技术,解决复杂的现实问题。

五、结论

PyTorch 以其简洁明了的 API、动态计算图的灵活性和丰富的生态系统,已成为深度学习领域的重要工具。无论是初学者还是资深研究者,都能在 PyTorch 中找到适合自己的方法和工具。希望通过这篇博文,能够帮助你更好地理解和使用 PyTorch,开启你的深度学习之旅。

相关文章:

深入理解 PyTorch:从入门到精通的深度学习框架

📌 友情提示: 本文内容由银河易创AI(https://ai.eaigx.com)创作平台的gpt-4-turbo模型生成,旨在提供技术参考与灵感启发。文中观点或代码示例需结合实际情况验证,建议读者通过官方文档或实践进一步确认其准…...

子串-滑动窗口的最大值

滑动窗口的最大值 给你一个整数数组 nums,有一个大小为 k 的滑动窗 口从数组的最左侧移动到数组的最右侧。你只可以看 到在滑动窗口内的 k 个数字。滑动窗口每次只向右移 动一位。 返回 滑动窗口中的最大值 。输入:整型数组,最大值k 输出&am…...

老龄化遇上数字化丨适老化改造:操作做“减法”,服务做“加法”

当中国 60 岁以上人口突破 2.8 亿,银发浪潮与数字时代的碰撞催生了一道必答题:如何让技术红利真正惠及老年人?传统适老化改造常陷入 "技术崇拜" 误区。 智能设备功能复杂如 "科技迷宫",操作界面充满 "数…...

【计算机网络】网络基础(协议,网络传输流程、Mac/IP地址 、端口号)

目录 1.协议简述2.网络分层结构2.1 软件分层2.2 网络分层为什么? 是什么?OSI七层模型TCP/IP五层(或四层)结构 3. 网络与操作系统之间的关系4.从语言角度理解协议5.网络如何传输局域网通信(同一网段) 不同网…...

【Java编程】【计算机视觉】一种简单的图片加/解密算法

by Li y.c. 一、内容简介 本文介绍一种简单的图片加/解密算法,算法的基本原理十分简单,即逐个(逐行、逐列)地获取图片的像素点颜色值,对其进行一些简单的算数运算操作进行加密,解密过程则相应地为加密运算…...

61.评论日记

老人摔倒无人扶最终死亡,家属将路人告上法庭,法院这样宣判!_哔哩哔哩_bilibili 2025年4月14日16:01:25...

每日一题——云服务计费问题

云服务计费问题(哈希表 排序)| 附详细 C源码解析 一、题目描述二、输入描述三、输出描述四、样例输入输出输入示例:输出示例:说明: 五、解题思路分析六、C实现源码详解(完整)七、复杂度分析 一…...

android-根据java文件一键生成dex文件脚本

安装7z命令 7-Zip官方下载网址 生成dex脚本文件 echo off setlocal enabledelayedexpansion:: 获取当前日期和时间 for /f "tokens2 delims" %%i in ("wmic os get localdatetime /value | findstr LocalDateTime") do set datetime%%i:: 提取年、月、日…...

OpenCV直方图均衡化全面解析:从灰度到彩色图像的增强技术

目录 一、直方图均衡化基础:原理与核心思想 二、彩色图像的直方图均衡化:挑战与解决方案 三、进阶技巧与注意事项 四、应用场景与典型案 一、直方图均衡化基础:原理与核心思想 1. 直方图的本质与作用 直方图是图像像素强度分布的统计图表…...

Node.js技术原理分析系列7——Node.js模块加载方式分析

Node.js 是一个开源的、跨平台的JavaScript运行时环境,它允许开发者在服务器端运行JavaScript代码。Node.js 是基于Chrome V8引擎构建的,专为高性能、高并发的网络应用而设计,广泛应用于构建服务器端应用程序、网络应用、命令行工具等。 本系…...

BFD:网络链路检测与联动配置全攻略

目录 BFD简介 BFD会话建立方式和检测机制 BFD会话建立过程 BFD工作流程 联动功能 BFD与OSPF联动配置需求 BFD与OSPF联动配置实现 BFD与VRRP联动配置需求 BFD与VRRP联动配置实现 单臂回声 BFD默认参数及调整方法 BFD简介 一种全网统一、检测迅速、监控网络中链…...

预防WIFI攻击,保证网络安全

文章总结(帮你们节约时间) WiFi协议存在多种安全漏洞,从去认证攻击到KRACK和PMKID攻击,这些都源于协议设计中的历史遗留问题。ESP32S3微控制器结合Arduino环境,成为强大的WiFi安全研究平台,可用于网络扫描…...

循环神经网络 - 门控循环单元网络

为了解决循环神经网络在学习过程中的长程依赖问题,即梯度消失或爆炸问题,一种非常好的解决方案是在简单循环网络的基础上引入门控机制来控制信息的累积速度,包括有选择地加入新的信息,并有选择地遗忘之前累积的信息。这一类网络可…...

Java 正则表达式综合实战:URL 匹配与源码解析

在 Web 应用开发中,我们经常需要对 URL 进行格式验证。今天我们结合 Java 的 Pattern 和 Matcher 类,深入理解正则表达式在实际应用中的强大功能,并剖析一段实际的 Java 示例源码。 package com.RegExpInfo;import java.util.regex.Matcher; …...

TCPIP详解 卷1协议 六 DHCP和自动配置

6.1——DHCP和自动配置 为了使用 TCP/IP 协议族,每台主机和路由器需要一定的配置信息。基本上采用3种方法:手工获得信息;通过一个系统获得使用的网络服务;使用某种算法自动确定。 拥有一个IP 地址和子网掩码,以及 DN…...

面试宝典(C++基础)-01

文章目录 1. C++基础1.1 C++特点1.2 说说C语言和C++的区别1.3 说说 C++中 struct 和 class 的区别1.4 include头文件的顺序以及双引号""和尖括号<>的区别1.5 说说C++结构体和C结构体的区别1.6 导入C函数的关键字是什么,C++编译时和C有什么不同?1.7 C++从代码…...

【笔记ing】AI大模型-04逻辑回归模型

一个神经网络结构&#xff0c;其中的一个神经网络层&#xff0c;本质就是一个逻辑回归模型 深度神经网络的本质就是多层逻辑回归模型互相连接或采用一定的特殊连接的方式连接在一起构成的。其中每一个层本质就是一个逻辑回归模型。 逻辑回归模型基本原理 逻辑回归&#xff0…...

【Android】常用参数实践 用户界面UI 布局文件XML

本文将系统总结 Android XML 布局的通用参数和常用布局类型的专属规则 一、通用布局参数 这些参数适用于所有 View 和 ViewGroup&#xff0c;是布局设计的基石。 1. 尺寸控制 android:layout_width 与 android:layout_height 定义视图的宽度和高度&#xff0c;可选值&#xf…...

音乐产业新玩法:NFTs如何颠覆传统与挑战未来?

音乐产业新玩法&#xff1a;NFTs如何颠覆传统与挑战未来&#xff1f; 近年来&#xff0c;NFT&#xff08;Non-Fungible Token&#xff0c;非同质化代币&#xff09;像一颗新星&#xff0c;迅速在数字艺术、游戏等领域掀起了革命。而在音乐产业&#xff0c;NFT不仅是一种数字所…...

测试基础笔记第三天

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 ⼀、缺陷介绍定义&#xff1a;软件中使⽤中任何问题都为缺陷&#xff0c;简称&#xff1a;bug 二、缺陷编写三、注册模块测试点练习 ⼀、缺陷介绍 定义&#xff1a…...

HTML5 Web 存储:超越 Cookie 的本地存储新选择

一、引言 在当今的 Web 开发领域&#xff0c;对于用户数据的本地存储需求日益增长。HTML5 带来了一种比传统 cookie 更强大、更安全、更高效的本地存储方式 ——Web 存储。本文将深入探讨 HTML5 Web 存储的相关知识&#xff0c;包括其基本概念、浏览器支持情况、localStorage …...

基于 DB、EAST、SAST 的文本检测算法详解及应用综述

摘要 近年来&#xff0c;随着深度学习在计算机视觉领域的广泛应用&#xff0c;自然场景文字检测技术取得了飞速发展。针对复杂背景、任意形状、多角度文本等问题&#xff0c;学术界和工业界陆续提出了 DB、EAST、SAST 等多种算法。本文详细介绍了这几种主流文本检测方法的原理…...

牙刷生产中的视觉检测,让刷毛缺陷检测高效便捷!

在日常口腔护理中&#xff0c;一把优质牙刷至关重要&#xff0c;而刷毛质量直接决定了牙刷品质。从生产端来看&#xff0c;牙刷制造行业正面临着品质管控的严峻挑战。人工目检在检测刷毛缺陷时&#xff0c;不仅效率低下&#xff0c;还极易因主观因素导致漏检、误检&#xff0c;…...

面向对象编程(OOP)核心概念进阶

面向对象编程&#xff08;OOP&#xff09;核心概念进阶 final 关键字 行为特征&#xff1a;作为终结者关键字&#xff0c;用于限制类、方法、变量的可修改性 三层控制力&#xff1a; - 修饰类&#xff1a; 定义不可继承的最终类&#xff08;如 String、Integer 等不可变类核…...

AI与教育的协奏曲:重构未来学习生态

📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 引言:教育的“智变”来临 在经历了千年的教与学之后,教育终于迎来了最大规模的技术变革浪潮。随着ChatGPT、DeepSeek、Grok 等大语言模型的诞生与不断演进,AI正以前所未有的方式深入影响每一个学生、老师…...

性能炸裂的数据可视化分析工具:DataEase!

今天分享一款开源的数据可视化分析工具&#xff0c;帮助用户快速分析数据并洞察业务趋势&#xff0c;从而实现业务的改进与优化。支持丰富的数据源连接&#xff0c;能够通过拖拉拽方式快速制作图表&#xff0c;并可以方便地与他人分享。 技术栈 前端&#xff1a;Vue.js、Elemen…...

9.thinkphp的请求

请求对象 当前的请求对象由think\Request类负责&#xff0c;该类不需要单独实例化调用&#xff0c;通常使用依赖注入即可。在其它场合则可以使用think\facade\Request静态类操作。 项目里面应该使用app\Request对象&#xff0c;该对象继承了系统的think\Request对象&#xff…...

UBUNTU20.04安装ros2

ubuntu20.04安装ROS2 详细教程_ubuntu20.04 ros2-CSDN博客...

数据可视化工具LightningChart .NET v12.2.1全新发布——支持新的 .NET 目标框架

LightningChart.NET完全由GPU加速&#xff0c;并且性能经过优化&#xff0c;可用于实时显示海量数据-超过10亿个数据点。 LightningChart包括广泛的2D&#xff0c;高级3D&#xff0c;Polar&#xff0c;Smith&#xff0c;3D饼/甜甜圈&#xff0c;地理地图和GIS图表以及适用于科学…...

Python + Playwright:规避常见的UI自动化测试反模式

Python + Playwright:规避常见的UI自动化测试反模式 前言反模式一:整体式页面对象(POM)反模式二:具有逻辑的页面对象 - POM 的“越界”行为反模式三:基于 UI 的测试设置 - 缓慢且脆弱的“舞台搭建”反模式四:功能测试过载 - “试图覆盖一切”的测试反模式之间的关联与核…...

蓝宝石狼组织升级攻击工具包,利用新型紫水晶窃密软件瞄准能源企业

网络安全专家发现&#xff0c;被称为"蓝宝石狼"&#xff08;Sapphire Werewolf&#xff09;的威胁组织正在使用升级版"紫水晶"&#xff08;Amethyst&#xff09;窃密软件&#xff0c;对能源行业企业发起复杂攻击活动。此次攻击标志着该组织能力显著提升&am…...

高光谱相机:温室盆栽高通量植物表型光谱成像研究

传统植物表型测量依赖人工观察与手工记录&#xff0c;存在效率低、主观性强、无法获取多维数据&#xff08;如生化成分、三维形态&#xff09;等缺陷。例如&#xff0c;叶片氮含量需破坏性取样检测&#xff0c;根系表型需挖掘植株&#xff0c;导致数据不连续且难以规模化。此外…...

Android Studio安装平板的虚拟机

其实很简单&#xff0c;但是我刚开始也是一窍不通&#xff0c;所以也查了好多资料才会的&#xff0c;本文仅作为个人学习笔记分享&#xff0c;有跟我一样的小白可以当做一个参考&#xff0c;有什么问题也欢迎大家提出建议&#xff0c;俺会虚心接受并改进的~ 首先我们打开项目&…...

Redis 常问知识

1.Redis 缓存穿透问题 缓存穿透&#xff1a;当请求的数据在缓存和数据库中不存在时&#xff0c;该请求就跳出我们使用缓存的架构&#xff08;先从缓存找&#xff0c;再从数据库查找、这样就导致了一直去数据库中找&#xff09;&#xff0c;因为这个数据缓存中永远也不会存在。…...

UnityUI:Canvas框架获取鼠标悬浮UI

将下面脚本挂在主体Canvas上&#xff0c;Canvas会对下面所有Image挂上PointerHandler脚本&#xff0c;并且可以通过GetPointEnter方法判断当前鼠标是否悬停在UI上 public class BaseCanvas : MonoBehaviour {public static BaseCanvas Main;private void Awake(){Main this;I…...

NLP实战(3):RNN英文名国家分类

目录 1. 项目需求 2. 模型解析 2.1 网络模型 2.2 准备数据 2.3 双向循环神经网络 3. 代码解析 4. 完整代码 5. 结果 1. 项目需求 对名字的分类&#xff0c;几千个名字&#xff0c;总共来自于18个国家 2. 模型解析 对于自然语言处理来说&#xff0c;输入是一个序列&am…...

东方博宜OJ ——1335 - 土地分割

递归 入门 ————1335 - 土地分割 1335 - 土地分割题目描述输入输出样例问题分析递归解法&#xff08;欧几里得算法&#xff09;代码实现总结 1335 - 土地分割 题目描述 把一块m * n米的土地分割成同样大的正方形&#xff0c;如果要求没有土地剩余&#xff0c;分割出的正方形…...

在轨道交通控制系统中如何实现μs级任务同步

轨道交通作为现代城市化进程中的重要支柱&#xff0c;承载着数以亿计的乘客出行需求&#xff0c;同时也是城市经济运行的命脉。无论是地铁、轻轨还是高速铁路&#xff0c;其控制系统的稳定性和可靠性直接关系到运营安全和效率。在这样一个高风险、高复杂度的环境中&#xff0c;…...

【C++教程】进制转换的实现方法

在C中进行进制转换可以通过标准库函数或自定义算法实现。以下是两种常见场景的转换方法及示例代码&#xff1a; 一、使用C标准库函数 任意进制转十进制 #include <string> #include <iostream>int main() {std::string num "1A3F"; // 十六进制数int…...

日志文件爆满_配置使用logback_只保留3天日志文件_每天定时生成一个日志文件---SpringCloud工作笔记206

日志文件爆满,springCloud微服务架构中的,日志爆满如何解决,使用脚本直接删除,会导致, 如果要删除的日志文件,还正在被进程占用,那么你即使使用脚本定时删除了,这个日志文件,那么这个日志文件实际上还是不会删除的,他的大小,依然占用磁盘,就是因为,有进程还在占用它,所以之前说…...

DICOM通讯(ACSE->DIMSE->Worklist)

DICOM 通讯协议中的 ACSE → DIMSE → Worklist 这条通讯链路。DICOM 通讯栈本身是一个多层的协议结构&#xff0c;就像 OSI 模型一样&#xff0c;逐层封装功能。 一、DICOM 通讯协议栈总体架构 DICOM 通讯使用 TCP/IP 建立连接&#xff0c;其上面封装了多个协议层次&#xf…...

QML与C++:基于ListView调用外部模型进行增删改查(附自定义组件)

目录 引言相关阅读项目结构文件组织 核心技术实现1. 数据模型设计联系人项目类 (datamodel.h)数据模型类 (datamodel.h)数据模型实现 (datamodel.cpp) 2. 主程序入口点 (main.cpp)3. 主界面设计 (Main.qml)4. 联系人对话框 (ContactDialog.qml)5. 自定义组件CustomTextField.qm…...

# linux 设置宽容模式

linux 设置宽容模式 在Linux系统中&#xff0c;通常没有直接称为“宽容模式”的设置选项&#xff0c;但你可以通过几种方式来模拟或调整系统行为&#xff0c;使其表现得更加“宽容”&#xff0c;特别是在处理错误、权限问题或其他潜在问题时。以下是一些常见的方法&#xff1a…...

#1 理解物联网

物联不是一个新概念&#xff0c;物联网如其中文译名&#xff0c; 虚拟和物的对应和联接。 对于人类的梦想而言&#xff0c;总是希望自己无比强大&#xff0c;但受限于外部条件而只能为此悻悻念念。 所以人们的目光聚焦在&#xff0c;上世纪70年代发展的传感器、大规模电路、通…...

物联网场景实战:智能电表数据管理与分析(二)

数据管理 数据清洗与预处理 智能电表在数据采集、传输和存储过程中&#xff0c;不可避免地会引入噪声、出现缺失值和异常值等问题&#xff0c;这些问题会严重影响数据的质量和后续分析的准确性&#xff0c;因此数据清洗至关重要。 噪声数据通常是由于测量误差、通信干扰等原…...

linux一次启动多个jar包

linux一次启动多个jar包并且可以自定义路径和端口号 代码使用 分享公司大神使用的一个脚步,可以一次启动多个jar包,也可以指定启动jar包 代码 #! /bin/sh # 端口号 PORTS(8080 8081 8082 8083) # 模块 MODULES(gateway auth system file) # 模块名称 MODULE_NAMES(网关服务 认…...

自然语言交互:NAS进化的下一站革命

自然语言交互&#xff1a;NAS进化的下一站革命 在数据爆炸式增长的数字时代&#xff0c;网络附加存储设备&#xff08;NAS&#xff09;早已突破企业级应用的边界&#xff0c;成为个人数字资产管理的核心枢纽。当全球NAS市场年复合增长率稳定在15%之际&#xff0c;耘想科技推出…...

go中我遇到的问题总结

go问题总结 1 - go中的nil等于java中的null吗 在 Go 和 Java 中,nil 和 null 都用于表示“空值”,但它们的实现和使用方式有所不同。 以下是 Go 中的 nil 和 Java 中的 null 之间的对比: 1. Go 中的 nil 在 Go 中,nil 是一个预定义的常量,表示零值。它的行为根据数据类…...

java面试题带答案2025最新整理

文章目录 一、java面试题集合框架1. 请简要介绍 Java 集合框架的体系结构2. ArrayList 和 LinkedList 的区别是什么3. HashMap 的工作原理是什么&#xff0c;它在 JDK 7 和 JDK 8 中有哪些不同4. 如何解决 HashMap 的线程安全问题5. TreeSet 是如何保证元素有序的 二、java面试…...

第七届浙江省大学生网络与信息安全竞赛决赛Unserialize深度解析 1.0

花还会重新开&#xff0c;不同的春来了又来。 - 2025.4.11 0x01 声明 仅作为个人学习使用&#xff0c;仅供参考&#xff0c;欢迎交流 可能是新生赛缘故&#xff0c;突发奇想&#xff0c;想好好梳理此题&#xff0c;顺便写成参考&#xff0c;于是有了这篇文章 当然很多理解可…...