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

PyTorch: torch.nn 子模块及其在循环神经网络中的应用

目录

torch.nn子模块详解

nn.utils.rnn.PackedSequence

参数说明

注意事项

示例代码

nn.utils.rnn.pack_padded_sequence

参数说明

返回值

注意事项

示例代码

nn.utils.rnn.pad_packed_sequence

参数说明

返回值

注意事项

示例代码

nn.utils.rnn.pad_sequence

参数说明

返回值

注意事项

示例代码

nn.utils.rnn.pack_sequence

参数说明

返回值

注意事项

示例代码

nn.utils.rnn.unpack_sequence

参数说明

返回值

注意事项

示例代码

nn.utils.rnn.unpad_sequence

参数说明

返回值

注意事项

示例代码

nn.Flatten

形状变换

参数

示例

nn.Unflatten

形状变换

参数

示例

总结


torch.nn子模块详解

nn.utils.rnn.PackedSequence

torch.nn 子模块是 PyTorch 框架的一部分,专门用于构建神经网络。这个模块提供了许多预定义的层(例如全连接层、卷积层、循环神经网络层),以及用于构建自定义网络结构的功能。torch.nn 的一个关键特点是它的模块和层是面向对象的,使得神经网络的构建和实验变得更加简洁和直观。

PackedSequence 类是 torch.nn.utils.rnn 模块中的一个重要类,专门用于处理循环神经网络中的变长序列。在处理像自然语言这样的序列数据时,不同的样本可能会有不同的长度。PackedSequence 允许有效地处理这种不等长的序列数据。

参数说明

  • data (Tensor): 包含打包序列的张量。
  • batch_sizes (Tensor): 包含每个序列步骤中批量大小的整数张量。
  • sorted_indices (Tensor, 可选): 包含如何从序列构建此 PackedSequence 的整数张量。
  • unsorted_indices (Tensor, 可选): 包含如何恢复具有正确顺序的原始序列的整数张量。

注意事项

  • 不应手动创建 PackedSequence 实例。它们应该由诸如 pack_padded_sequence() 之类的函数实例化。
  • batch_sizes 应始终是 CPU 上的 torch.int64 张量。
  • data 可以在任意设备上,有任意的数据类型。但 sorted_indicesunsorted_indices 必须是与 data 相同设备上的 torch.int64 张量。

示例代码

import torch
import torch.nn.utils.rnn as rnn_utils# 假设我们有一些变长的序列数据
sequences = [torch.tensor([1,2,3]), torch.tensor([4,5]), torch.tensor([6])]
# 对序列进行填充并打包
padded_sequences = rnn_utils.pad_sequence(sequences, batch_first=True)
packed_sequences = rnn_utils.pack_padded_sequence(padded_sequences, batch_first=True, lengths=[3, 2, 1])# 使用RNN处理打包的序列
rnn = torch.nn.RNN(input_size=1, hidden_size=5, batch_first=True)
output, hidden = rnn(packed_sequences.data.unsqueeze(-1))# 解包序列
output, output_lengths = rnn_utils.pad_packed_sequence(output, batch_first=True)

在这个例子中,首先通过 pad_sequence 将不同长度的序列填充到相同的长度,然后使用 pack_padded_sequence 将填充后的序列打包。之后,使用 RNN 对这个打包后的序列进行处理。最后,通过 pad_packed_sequence 将输出解包。这种方法可以有效处理变长序列,同时提高 RNN 的效率和性能。

nn.utils.rnn.pack_padded_sequence

torch.nn.utils.rnn.pack_padded_sequence 是 PyTorch 中处理循环神经网络(RNN)时非常重要的一个函数。它用于将填充过的、长度不一的序列数据打包成一个 PackedSequence 对象,以便更高效地在 RNN 中使用。这个函数特别适用于处理像自然语言这样的序列数据,其中每个样本(例如一个句子)的长度可能不同。

参数说明

  • input (Tensor): 填充过的变长序列的批次。它可以是 T x B x * 的形状,其中 T 是最长序列的长度(等于 lengths[0]),B 是批量大小,* 是任意数量的维度(包括 0)。如果 batch_first 为 True,则期望输入为 B x T x * 的格式。
  • lengths (Tensor 或 list(int)): 每个批次元素的序列长度列表(如果提供为张量,则必须在 CPU 上)。
  • batch_first (bool, 可选): 如果为 True,则输入预期为 B x T x * 格式。
  • enforce_sorted (bool, 可选): 如果为 True,则输入应包含按长度递减排序的序列。如果为 False,则无条件对输入进行排序。默认值为 True。

返回值

  • 返回一个 PackedSequence 对象。

注意事项

  • 这个函数接受至少有两个维度的任何输入。你可以将它应用于打包标签,并将 RNN 的输出与它们一起用来直接计算损失。可以通过访问其 .data 属性从 PackedSequence 对象中检索张量。
  • 如果 enforce_sorted 为 True,则序列应按长度降序排序。这在准备进行 ONNX 导出时是必要的。

示例代码

import torch
import torch.nn.utils.rnn as rnn_utils# 假设我们有填充过的变长序列和它们的长度
padded_sequences = torch.tensor([[1, 2, 3, 0], [4, 5, 0, 0], [6, 0, 0, 0]])
lengths = [3, 2, 1]# 将填充过的序列打包
packed_sequences = rnn_utils.pack_padded_sequence(padded_sequences, lengths, batch_first=True)# 现在可以将 packed_sequences 用于 RNN

在这个例子中,padded_sequences 包含三个序列,长度分别为 3、2 和 1。通过 pack_padded_sequence 函数,这些序列被有效地打包成一个 PackedSequence 对象,然后可以直接传递给 RNN 模块进行处理。这种方法有助于提高 RNN 在处理变长序列时的效率和性能。

nn.utils.rnn.pad_packed_sequence

torch.nn.utils.rnn.pad_packed_sequence 是 PyTorch 中用于处理循环神经网络(RNN)的一个重要函数。这个函数执行的是 pack_padded_sequence() 的逆操作,即它将 PackedSequence 对象解压缩并填充回原始维度的张量中。这在 RNN 处理完变长序列后,需要恢复到原始序列形状以进行进一步操作时非常有用。

参数说明

  • sequence (PackedSequence): 需要填充的打包序列批次。
  • batch_first (bool, 可选): 如果为 True,则输出将以 B x T x * 的格式排列。
  • padding_value (float, 可选): 用于填充元素的值。
  • total_length (int, 可选): 如果非 None,则输出将填充至长度为 total_length。如果 total_length 小于序列中的最大序列长度,则此方法将抛出 ValueError。

返回值

  • 返回一个元组,包含填充后的序列的张量,以及一个包含批次中每个序列长度的张量。批次元素将按照它们最初在 pack_padded_sequencepack_sequence 中被排列的顺序重新排序。

注意事项

  • total_length 参数在将序列打包 -> 通过循环网络处理 -> 解压序列的模式在 DataParallel 包装的模块中非常有用。有关详细信息,请参见相关的 FAQ 部分。

示例代码

from torch.nn.utils.rnn import pack_padded_sequence, pad_packed_sequence
import torch# 假设有一些填充过的序列和它们的长度
seq = torch.tensor([[1, 2, 0], [3, 0, 0], [4, 5, 6]])
lens = [2, 1, 3]# 将填充过的序列打包
packed = pack_padded_sequence(seq, lens, batch_first=True, enforce_sorted=False)# 解压打包的序列
seq_unpacked, lens_unpacked = pad_packed_sequence(packed, batch_first=True)print(seq_unpacked)  # 输出解压后的序列
print(lens_unpacked) # 输出解压后的序列长度

 在这个例子中,首先使用 pack_padded_sequence 将填充过的序列进行打包,然后通过 pad_packed_sequence 将打包的序列解压回原始的填充形式。这个过程在 RNN 模型处理变长序列后,需要将输出转换回可理解的形式时非常有用。

nn.utils.rnn.pad_sequence

torch.nn.utils.rnn.pad_sequence 是 PyTorch 中的一个用于处理循环神经网络(RNN)的有用函数。这个函数主要用于将长度不同的一系列张量(tensors)填充至相同的长度,从而可以将它们有效地组合成一个批次(batch)并用于 RNN 操作。

参数说明

  • sequences (list[Tensor]): 需要填充的不同长度序列的列表。
  • batch_first (bool, 可选): 如果为 True,则输出将以 B x T x * 的格式排列;如果为 False,则输出将以 T x B x * 的格式排列。默认为 False。
  • padding_value (float, 可选): 用于填充元素的值。默认值为 0。

返回值

  • 返回一个张量(Tensor),其大小为 T x B x *(如果 batch_first 为 False)或 B x T x *(如果 batch_first 为 True),其中 T 是最长序列的长度。

注意事项

  • 这个函数假设所有序列中的尾随维度和类型是相同的。
  • 这个函数通过在一个新的维度上堆叠一系列张量,并填充它们以使它们具有相同的长度,来工作。例如,如果输入是一系列大小为 L x * 的序列,并且 batch_first 为 False,则输出的大小为 T x B x *。

示例代码

from torch.nn.utils.rnn import pad_sequence
import torch# 假设有几个不同长度的张量
a = torch.ones(25, 300)  # 第一个张量
b = torch.ones(22, 300)  # 第二个张量
c = torch.ones(15, 300)  # 第三个张量# 使用 pad_sequence 来填充这些张量
padded_sequence = pad_sequence([a, b, c])print(padded_sequence.size())  # 输出填充后的张量大小

 在这个例子中,三个不同长度的张量 abc 被填充至相同的长度(最长序列的长度,即 25)。pad_sequence 函数在一个新的维度上堆叠这些张量,并填充较短的张量以匹配最长的张量。这使得它们可以作为一个批次输入到 RNN 中。

nn.utils.rnn.pack_sequence

torch.nn.utils.rnn.pack_sequence 是 PyTorch 中用于处理循环神经网络(RNN)的一个有用函数。它用于将一系列不同长度的张量(tensors)打包成一个 PackedSequence 对象。这个函数实际上是 pad_sequencepack_padded_sequence 这两个函数的连续调用的简化版本。

参数说明

  • sequences (list[Tensor]): 一系列张量的列表,这些张量应按长度递减的顺序排列。
  • enforce_sorted (bool, 可选): 如果为 True,则检查输入是否包含按长度递减排序的序列。如果为 False,则不检查此条件。默认为 True。

返回值

  • 返回一个 PackedSequence 对象。

注意事项

  • 如果 enforce_sorted 为 True,序列应按长度降序排序。这在准备进行 ONNX 导出时是必要的。
  • 每个张量应该是大小为 L x * 的形状,其中 L 是序列的长度,* 是任意数量的尾随维度(包括零)。

示例代码

from torch.nn.utils.rnn import pack_sequence
import torch# 创建几个不同长度的张量
a = torch.tensor([1, 2, 3])  # 第一个张量
b = torch.tensor([4, 5])     # 第二个张量
c = torch.tensor([6])        # 第三个张量# 使用 pack_sequence 将这些张量打包
packed_sequence = pack_sequence([a, b, c])print(packed_sequence)

在这个例子中,三个不同长度的张量 abc 被打包成一个 PackedSequence 对象。这个过程有助于后续将这些序列有效地输入到 RNN 中进行处理。这种方法特别适用于处理像自然语言这样的序列数据,其中每个样本(例如一个句子)的长度可能不同。 

nn.utils.rnn.unpack_sequence

torch.nn.utils.rnn.unpack_sequence 是 PyTorch 中用于处理循环神经网络(RNN)的一个函数。这个函数的作用是将 PackedSequence 对象解包成一系列不同长度的张量(tensors)。这通常在 RNN 处理完 PackedSequence 后,需要将其转换回原始序列形式时使用。

参数说明

  • packed_sequences (PackedSequence): 需要解包的 PackedSequence 对象。

返回值

  • 返回一个由张量(Tensor)对象组成的列表。

注意事项

  • unpack_sequence 函数是 pack_sequence 的逆过程,用于将经过 RNN 处理的数据转换回其原始序列的形式。
  • 请注意,PyTorch 中截至最后更新(2023年4月)并没有名为 unpack_sequence 的官方函数。通常情况下,使用 pad_packed_sequence 来完成类似的解包操作。如果 unpack_sequence 存在于某个特定版本的 PyTorch 中或是新添加的功能,可能需要查阅最新的官方文档以获取最准确的信息。

示例代码

from torch.nn.utils.rnn import pack_sequence, unpack_sequence
import torch# 创建几个不同长度的张量
a = torch.tensor([1, 2, 3])
b = torch.tensor([4, 5])
c = torch.tensor([6])# 将这些张量打包成一个 PackedSequence
sequences = [a, b, c]
packed_sequences = pack_sequence(sequences)# 解包 PackedSequence
unpacked_sequences = unpack_sequence(packed_sequences)print(unpacked_sequences)

在这个例子中,pack_sequence 用于将几个不同长度的张量打包成一个 PackedSequence 对象,然后 unpack_sequence(假设该函数存在)用于将这个打包的对象解包成原始的序列列表。这个过程有助于在 RNN 中处理完数据后,将其恢复到可理解的形式。 

nn.utils.rnn.unpad_sequence

torch.nn.utils.rnn.unpad_sequence 是 PyTorch 中用于处理循环神经网络(RNN)的一个函数。它的作用是将填充过的张量(Tensor)解压缩成一系列原始长度的张量。这个函数在处理经过填充以适应批次处理要求的序列数据后,需要恢复到其原始长度的场景中非常有用。

参数说明

  • padded_sequences (Tensor): 已填充的序列。
  • lengths (Tensor): 原始(未填充)序列的长度。
  • batch_first (bool, 可选): 批次维度是否在前。默认为 False。

返回值

  • 返回一个由张量(Tensor)对象组成的列表。

注意事项

  • unpad_sequencepad_sequence 的逆过程,用于将填充后的序列恢复到其原始长度。
  • 这个函数对于处理那些因为批次处理要求而被填充过的序列数据特别有用,尤其是在序列数据处理完毕后需要还原到它们的原始形式时。

示例代码

from torch.nn.utils.rnn import pad_sequence, unpad_sequence
import torch# 创建几个不同长度的张量
a = torch.ones(25, 300)
b = torch.ones(22, 300)
c = torch.ones(15, 300)
sequences = [a, b, c]# 将这些张量填充成相同长度
padded_sequences = pad_sequence(sequences)
lengths = torch.as_tensor([v.size(0) for v in sequences])# 将填充过的序列解压缩回原始长度
unpadded_sequences = unpad_sequence(padded_sequences, lengths)# 验证解压缩是否正确
assert torch.allclose(sequences[0], unpadded_sequences[0])
assert torch.allclose(sequences[1], unpadded_sequences[1])
assert torch.allclose(sequences[2], unpadded_sequences[2])

在这个例子中,pad_sequence 用于将几个不同长度的张量填充至相同的长度,然后 unpad_sequence 用于将这些填充过的序列恢复到它们的原始长度。通过这样的处理,可以确保在批次处理中的序列数据能够在处理完毕后被正确地还原。 

nn.Flatten

torch.nn.Flatten 是 PyTorch 中的一个神经网络模块,用于将张量中指定范围的连续维度展平。它常用于卷积神经网络(CNN)到全连接层(Dense layer)的过渡,其中需要将多维特征映射转换为一维特征向量。

形状变换

  • 输入: 形状为 \left ( *,S_{start},...,S_{i},...,S_{end},* \right ) 的张量,其中 S_{i} 是第 i 维度的大小,∗ 表示包括零在内的任意数量的维度。
  • 输出: 形状为(*,\prod _{o=start}^{end}S_{i},*)的张量,即从 start_dimend_dim 维度的大小相乘得到的展平维度。

参数

  • start_dim (int): 开始展平的维度(默认为 1)。
  • end_dim (int): 结束展平的维度(默认为 -1)。

示例

  1. 默认参数:

import torch
import torch.nn as nninput = torch.randn(32, 1, 5, 5)
m = nn.Flatten()
output = m(input)
print(output.size())  # 输出: torch.Size([32, 25])

 在这个例子中,Flatten 默认从第 1 维(第一个 1)开始,展平到最后一维,将 5×55×5 的二维特征映射转换为一维的 25 个特征。

    2. 非默认参数:

m = nn.Flatten(0, 2)
output = m(input)
print(output.size())  # 输出: torch.Size([160, 5])

在这个例子中,Flatten 从第 0 维开始,展平到第 2 维,即将原始的 32×1×532×1×5 形状的张量转换为 160×5160×5 的形状。

Flatten 模块在神经网络中非常有用,尤其是在需要处理多维数据并将其转换为一维数据以输入到全连接层的场景中。

nn.Unflatten

torch.nn.Unflatten 是 PyTorch 中的一个神经网络模块,用于将一个张量的指定维度展开为所需的形状。它通常用于神经网络中,尤其是在序列化的数据需要被还原为多维数据时,例如在将一维特征向量转换回原始的多维图像或序列格式。

形状变换

  • 输入: 形状为(∗,Sdim​,∗) 的张量,其中 S_{dim} 是在 dim 维度的大小,∗∗ 表示包括零在内的任意数量的维度。
  • 输出: 形状为(∗,U1​,...,Un​,∗) 的张量,其中 U 是 unflattened_size,且 \prod _{i=1}^{n}U_{i}=S_{dim}​。

参数

  • dim (Union[int, str]): 要展开的维度。
  • unflattened_size (Union[torch.Size, Tuple, List, NamedShape]): 展开维度的新形状。

示例

使用整数元组:

import torch
import torch.nn as nninput = torch.randn(2, 50)
m = nn.Sequential(nn.Linear(50, 50),nn.Unflatten(1, (2, 5, 5))
)
output = m(input)
print(output.size())  # 输出: torch.Size([2, 2, 5, 5])

在这个例子中,Unflatten 将第 1 维展开为形状 (2, 5, 5)。

使用 torch.Size:

m = nn.Sequential(nn.Linear(50, 50),nn.Unflatten(1, torch.Size([2, 5, 5]))
)
output = m(input)
print(output.size())  # 输出: torch.Size([2, 2, 5, 5])

 使用命名形状(NamedShape):

input = torch.randn(2, 50, names=('N', 'features'))
unflatten = nn.Unflatten('features', (('C', 2), ('H', 5), ('W', 5)))
output = unflatten(input)
print(output.size())  # 输出: torch.Size([2, 2, 5, 5])

Unflatten 在需要对数据维度进行灵活操作的神经网络设计中非常有用,特别是在需要从平展的特征向量恢复到多维空间表示的情况下。

总结

本文介绍了 PyTorch 框架中 torch.nn 子模块的关键组成部分及其功能。这个模块提供了多种用于构建神经网络的预定义层,如全连接层、卷积层和循环神经网络层。特别强调了 torch.nn.utils.rnn 中的几个重要类和函数,如 PackedSequencepack_padded_sequencepad_packed_sequencepad_sequencepack_sequenceunpad_sequence,它们在处理变长序列时特别有用。此外,还介绍了 FlattenUnflatten 模块,这两个模块在处理多维数据时非常有用,前者将数据展平为一维,而后者则将一维数据还原为多维格式。整体上,本文提供了对 PyTorch 中重要网络构建模块的全面理解,强调了它们在实际应用中的重要性和灵活性。

相关文章:

PyTorch: torch.nn 子模块及其在循环神经网络中的应用

目录 torch.nn子模块详解 nn.utils.rnn.PackedSequence 参数说明 注意事项 示例代码 nn.utils.rnn.pack_padded_sequence 参数说明 返回值 注意事项 示例代码 nn.utils.rnn.pad_packed_sequence 参数说明 返回值 注意事项 示例代码 nn.utils.rnn.pad_sequence …...

【QT】自定义代理类

目录 1 我们为什么要使用自定义代理类? 2 自定义代理类的基本设计要求 3 自定义代理的功能 4 基于QSpinBox的自定义代理类 5 自定义代理类的使用 1 我们为什么要使用自定义代理类? 传统的模型-视图框架可以让我们实现逻辑展示相分离,我们…...

线程休眠、线程让步、线程优先级相关内容学习笔记

1、线程休眠 (1)sleep() 如果需要让当前正在执行的线程暂停一段时间,并进入阻塞状态(Timed_Waiting),则可以通过调用Thread类的静态sleep()方法来实现。 static void sleep(long millis):让当前正在执行的线…...

paddle指定运行gpu

在PaddlePaddle中指定使用GPU进行运行非常简单。首先,确保你的机器上已经安装了CUDA和cuDNN,并且正确配置了GPU环境。然后,按照以下步骤进行操作: 导入PaddlePaddle库: import paddle设置使用的设备为GPU&#xff1a…...

Java异常及网络编程

异常续 throws关键字 当一个方法中使用throw抛出一个非RuntimeException的异常时,就要在该方法上使用throws声明这个异常的抛出。此时调用该方法的代码就必须处理这个异常,否则编译不通过。 package exception; ​ /*** 测试异常的抛出*/ public clas…...

通过 Elastic Stack 充分利用电信领域生成式 AI 的力量

作者:Elastic Piotr Kobziakowski, Jrgen Obermann 在瞬息万变的电信领域,Elastic Stack 与生成式 AI 的集成正在开创运营效率和创新的新时代。 这些技术不仅增强了网络运营,而且还彻底改变了各个部门的内部流程。 下面,我们将深入…...

Redis:原理速成+项目实战——Redis实战8(基于Redis的分布式锁及优化)

👨‍🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习 🌌上期文章:Redis:原理速成项目实战——Redis实战7(优惠券秒杀细节解决超卖、一人一单问题) &#x1f4d…...

江山易改本性难移之ZYNQ SDK QSPI固化bug及其解决方法

之前在Vivado2018.3通过QSPI方式固化程序时出现问题,显示flash擦除成功,但最后总是不能写入到flash中。 查资料发现从VIVADO 2017.3版本开始,Xilinx官方为了使Zynq-7000和Zynq UltraScale 实现流程相同,在QSPI FLASH使用上做了变化…...

系列三十六、注解版Spring、SpringMVC配置文件

一、注解版Spring、SpringMVC配置文件 1.1、pom <dependencies><!-- SpringMVC --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.1.5.RELEASE</version><…...

爬虫你需要知道的:什么是http请求

1. 什么是http请求 我们将通过发送http请求来获取网页内容。http是HyperText Transfer Protocol的缩写&#xff0c;意思是超文本传输协议&#xff0c;它是一种客户端和服务器之间的请求响应协议。 浏览器就可以看作是一个客户端&#xff0c;当我们在浏览器地址栏输入想访问的…...

MCU FT61F14x入门

目录 前言一、CMIDE的使用二、系统时钟与睡眠2.1 上电复位 (POR)与系统复位2.2 振荡器和系统时钟2.3 SLEEP睡眠模式 (POWER-DOWN)2.4 低电压检测/比较器 (LVD) 三、I/O端口与中断四、串口USART五、定时器六、ADC七、EEPROM 前言 FT61F14x是辉芒微电子的微控制器&#xff0c;是一…...

星火大模型——多模态API调用(图像+文本)

参考文档 图片理解 API 文档 环境配置 pip3 install websocket-client核心代码 import _thread as thread import base64 import datetime import hashlib import hmac import json from urllib.parse import urlparse import ssl from datetime import datetime from time…...

计算机基础面试题 |22.精选计算机基础面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…...

kafka连接失败时springboot项目启动停机问题

问题&#xff1a;springboot整合kafka&#xff0c;作为消费端&#xff0c;对端的kafka系统是在生产环境&#xff0c;在本地开发测试时配置了对端的生产环境的kafka地址。因为开发环境和对端生产环境是不通的&#xff0c;所以连接肯定是失败的&#xff0c;kafka的连接失败导致sp…...

【算法题】46. 全排列

题目 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示例 2&#xff1a; 输入&#xff1…...

可视可交互!在全志H618上用OpenCV读取图像显示到PyQt5窗口上

OpenCV能够处理图像、视频、深度图像等各种类型的视觉数据&#xff0c;在某些情况下&#xff0c;尽管OpenCV可以显示窗口&#xff0c;但PyQt5可能更适合用于创建复杂的交互式应用程序&#xff0c;而自带GPU的H618就成为了这些图像显示的最佳载体。 这里分享一个代码&#xff0…...

现代密码学 补充1:两种窃听不可区分实验的区别

两种窃听不可区分实验 写在最前面两种窃听不可区分实验1. 完美保密中的窃听不可区分实验2. 窃听不可区分实验&#xff08;对称加密算法&#xff09;主要区别 写在最前面 两种窃听不可区分实验 两种窃听不可区分实验&#xff08;Eavesdropping Indistinguishability Experimen…...

多功能号卡推广分销管理系统 流量卡推广分销网站源码-目前市面上最优雅的号卡系统

一套完善,多功能,的号卡分销系统,多接口,包括运营商接口,无限三级代理,最简单易用的PHP~ 目前市面上最优雅的号卡系统!没有之一 软件架构说明 环境要求php7.3以上(建议低于8.0),MySQL5.6以上,Nginx1.16(无要求) 产品特性 自动安装向导 易于安装使用部署 多个第…...

MySQL语法及IDEA使用MySQL大全

在项目中我们时常需要写SQL语句&#xff0c;或简单的使用注解直接开发&#xff0c;或使用XML进行动态SQL之类的相对困难的SQL&#xff0c;并在IDEA中操控我们的SQL&#xff0c;但网上大都图方便或者觉得太简单了&#xff0c;完全没一个涵盖两个方面的讲解。 单表&#xff1a; …...

分布式系统网关和sentinel

1.网关 作用&#xff1a;网关是给分布式系统进行请求路由分配的服务 功能&#xff1a; 请求路由 请求过滤 请求鉴权 流量控制 统一日志 2.搭建网关&#xff08;微服务&#xff09; 2.1依赖、配置文件、启动类 2.2配置路由&#xff08;id&#xff0c;断言&#xff0c;…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象&#xff1a; android studio报错&#xff1a; [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决&#xff1a; 不要动CMakeLists.…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...