用手机域名做网站/优化师培训机构

用手机域名做网站,优化师培训机构,什么专业可以做网站编辑,1万元可以注册公司吗Sliding Window Attention(滑动窗口注意力)解析 Sliding Window Attention(滑动窗口注意力) 是 Longformer (来源:https://arxiv.org/pdf/2004.05150)提出的 稀疏注意力机制,旨在解决 标准 Transformer 计算…

Sliding Window Attention(滑动窗口注意力)解析


Sliding Window Attention(滑动窗口注意力)Longformer (来源:https://arxiv.org/pdf/2004.05150)提出的 稀疏注意力机制,旨在解决 标准 Transformer 计算复杂度随序列长度增加呈二次增长 的问题。它的核心思想是:

  • 每个 token 仅关注局部窗口内的其他 token,而不是整个序列。
  • 计算复杂度从 ( O ( n 2 ) O(n^2) O(n2)) 降至 ( O ( n ⋅ w ) O(n \cdot w) O(nw)),其中 ( w w w) 是窗口大小。
  • 支持更长的文本处理,避免传统 Transformer 处理长序列时的显存和计算瓶颈。

该方法使 Transformer 能够高效处理上千到上万个 token 的长文本,特别适用于 文档级任务,如长文摘要、法律文本分析、医疗文档理解等。


1. 为什么需要 Sliding Window Attention?

1.1 传统 Transformer 的问题

Transformer 的 自注意力(Self-Attention) 机制需要计算所有 token 之间的交互:
Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{softmax} \left(\frac{QK^T}{\sqrt{d_k}} \right) V Attention(Q,K,V)=softmax(dk QKT)V
其中:

  • ( Q, K, V ) 分别是 查询(Query)、键(Key)、值(Value) 矩阵,形状为 ( n × d k n \times d_k n×dk )。
  • 计算量为 ( O ( n 2 d k ) O(n^2 d_k) O(n2dk) ),随着序列长度 ( n n n ) 增加,计算量急剧上升。
  • 这导致 Transformer 无法处理长文本,因为显存需求和计算复杂度都 随 ( n 2 n^2 n2 ) 增长

1.2 Sliding Window Attention 解决了什么问题?

  • 局部注意力(Local Attention):每个 token 仅与附近窗口内的 token 交互,而不是整个序列。
  • 计算复杂度降低:从 ( O ( n 2 ) O(n^2) O(n2) ) 降为 ( O ( n ⋅ w ) O(n \cdot w) O(nw) ),其中 ( w w w ) 是窗口大小。
  • 显存占用减少:只需要存储窗口内的注意力权重,而非完整的 ( n × n n \times n n×n ) 矩阵。

这意味着,Sliding Window Attention 允许 Transformer 处理更长的序列,从传统的 512 tokens 提高到 8K-16K tokens 甚至更长


2. Sliding Window Attention 计算原理

2.1 标准 Transformer Attention

在标准 Transformer 结构中:

  1. 每个 token 计算所有其他 token 的注意力权重
  2. 形成一个 ( n × n n \times n n×n ) 的注意力矩阵
  3. 计算复杂度:( O ( n 2 d ) O(n^2 d) O(n2d) )。

2.2 Sliding Window Attention

Sliding Window Attention 结构中:

  1. 每个 token 仅与窗口内的其他 token 交互
  2. 注意力矩阵变为稀疏矩阵,只有窗口大小 ( w w w ) 内的注意力权重被计算。
  3. 计算复杂度变为:( O ( n ⋅ w ⋅ d ) O(n \cdot w \cdot d) O(nwd) )。

示例:

  • 设 ( w = 5 w = 5 w=5 ),则:
    • 第 10 个 token 仅关注 [8, 9, 10, 11, 12]
    • 第 20 个 token 仅关注 [18, 19, 20, 21, 22]
    • 这样每个 token 只计算 5 个注意力权重,而不是所有 n 个。

3. Sliding Window Attention 的 PyTorch 实现

以下是 Longformer 的 Sliding Window Attention 计算的 PyTorch 实现:

import torch
import torch.nn as nn
import torch.nn.functional as Fclass SlidingWindowAttention(nn.Module):def __init__(self, embed_dim, num_heads, window_size):"""滑动窗口注意力机制Args:embed_dim: 词嵌入维度 dnum_heads: 注意力头的数量 hwindow_size: 滑动窗口大小 w"""super(SlidingWindowAttention, self).__init__()self.embed_dim = embed_dimself.num_heads = num_headsself.window_size = window_sizeself.head_dim = embed_dim // num_heads  # 每个头的维度assert self.head_dim * num_heads == embed_dim, "embed_dim 必须是 num_heads 的整数倍"# 线性投影层self.q_proj = nn.Linear(embed_dim, embed_dim, bias=False)self.k_proj = nn.Linear(embed_dim, embed_dim, bias=False)self.v_proj = nn.Linear(embed_dim, embed_dim, bias=False)self.o_proj = nn.Linear(embed_dim, embed_dim, bias=False)def forward(self, x):"""前向传播Args:x: 输入张量 [batch, seq_len, embed_dim]Returns:输出张量 [batch, seq_len, embed_dim]"""batch_size, seq_len, _ = x.shape# 计算 Q, K, VQ = self.q_proj(x).view(batch_size, seq_len, self.num_heads, self.head_dim).transpose(1, 2)  # [b, h, seq, d]K = self.k_proj(x).view(batch_size, seq_len, self.num_heads, self.head_dim).transpose(1, 2)V = self.v_proj(x).view(batch_size, seq_len, self.num_heads, self.head_dim).transpose(1, 2)# 初始化注意力矩阵attn_scores = torch.full((batch_size, self.num_heads, seq_len, seq_len), float("-inf"), device=x.device)# 计算滑动窗口注意力for i in range(seq_len):start = max(0, i - self.window_size)end = min(seq_len, i + self.window_size + 1)attn_scores[:, :, i, start:end] = torch.matmul(Q[:, :, i, :], K[:, :, start:end, :].transpose(-2, -1))# 归一化attn_scores /= self.head_dim ** 0.5attn_weights = F.softmax(attn_scores, dim=-1)# 计算注意力加权的 Valueoutput = torch.matmul(attn_weights, V)# 重新排列形状output = output.transpose(1, 2).contiguous().view(batch_size, seq_len, self.embed_dim)output = self.o_proj(output)  # 线性变换回原始维度return output

4. Sliding Window Attention 的优缺点

优点

  • 计算复杂度降低:从 ( O ( n 2 ) O(n^2) O(n2) ) 降至 ( O ( n ⋅ w ) O(n \cdot w) O(nw) )。
  • 可扩展到长序列:支持 8K-16K tokens 甚至更长。
  • 适用于文档级任务:如长文摘要、法律分析、医疗 NLP 任务。

缺点

  • 不能捕捉远距离依赖:只能处理窗口范围内的 token 交互。
  • 需要全局注意力补充:必须结合 Global Attention 来补充远程信息(例如 CLS 位置)。

5. 结论

  • Sliding Window Attention 解决了 Transformer 计算复杂度随序列长度二次增长的问题
  • 通过限制每个 token 只关注局部窗口内的 token,使得计算复杂度降低为 ( O ( n ⋅ w ) O(n \cdot w) O(nw) )
  • 适用于长文本处理,并可结合 Global Attention 进一步提升模型性能

🚀 这是 Transformer 在长文本任务上的关键优化方案之一!

Sliding Window Attention 如何支持长序列,并处理远距离依赖?


你提到的 “Sliding Window Attention 只能处理局部信息,那为什么还能支持 8K-16K 甚至更长的序列?” 这个问题很好。我们来详细拆解这个机制,看看它如何 既能高效处理长序列,又能解决远距离依赖问题


1. Sliding Window Attention 适用于长序列的原因

(1) 计算复杂度降低

传统 全自注意力(Full Self-Attention) 计算复杂度为:
O ( n 2 ⋅ d ) O(n^2 \cdot d) O(n2d)
即随着序列长度 ( n n n ) 增加,计算量呈二次增长。例如:

  • ( n = 1024 n = 1024 n=1024 ) 时,需要计算 百万级 注意力分数。
  • ( n = 8192 n = 8192 n=8192 ) 时,需要计算 千万级 注意力分数,显存消耗极大。

Sliding Window Attention 仅在局部窗口 ( w w w ) 内计算注意力:
O ( n ⋅ w ⋅ d ) O(n \cdot w \cdot d) O(nwd)
通常 ( w ≪ n w \ll n wn )(如 ( w = 512 , n = 8192 w=512, n=8192 w=512,n=8192 )),计算复杂度大幅降低,使得 处理长序列成为可能


(2) 通过层级叠加,间接传播长距离信息

虽然单个 Sliding Window 只能看到局部范围的 token,但 Transformer 具有多层结构,可以通过 层级叠加 逐步扩展信息传播范围。

示例:

  • 设窗口大小 ( w = 512 ),模型有 12 层 Transformer
  • 第 1 层:每个 token 只看到 相邻 512 个 token
  • 第 2 层:由于前一层已经融合了 512 个 token 信息,相当于 间接看到 1024 个 token
  • 第 3 层:可看到 1536 个 token
  • ……
  • 第 12 层:最终可以捕捉 6144+ token 的信息

这意味着,即使单层 Sliding Window 只能看到局部信息,但多层叠加后, 整个 Transformer 仍然能捕捉远程依赖

这类似 CNN 中的感受野(Receptive Field)扩展:

  • 低层捕捉局部信息,高层逐步扩大感受野。
  • 顶层的 CLS token 可以聚合全局信息。

2. 如何进一步增强远程依赖能力?

(1) 结合全局注意力(Global Attention)

Sliding Window 主要用于局部注意力,但为了处理关键任务位置(如 CLS,任务相关实体),通常会额外增加 Global Attention
Hybrid Attention = Sliding Window + Global Attention \text{Hybrid Attention} = \text{Sliding Window} + \text{Global Attention} Hybrid Attention=Sliding Window+Global Attention

  • Global Attention 让 CLS token 直接看到所有位置,用于捕捉全局信息。
  • 关键 token(如问题 token、摘要 token)可被全局注意力连接,使远距离 token 之间的信息传递更高效。

(2) 结合 Dilated Attention(扩张窗口注意力)

为了提高远程依赖能力,可以使用 Dilated Sliding Window Attention(扩张窗口注意力)

  • 例如,窗口间隔 gap = 2,每个 token 除了看到最近的 512 个 token,还能看到更远的 token。
  • 这种方法 类似 CNN 的 Dilated Convolution,可以扩大感受野,而不会增加太多计算量。

3. Sliding Window Attention 如何影响长文本任务?

  • 适用于 8K+ 长文本摘要(Summarization)

    • 长文摘要模型(如 Longformer)使用 Sliding Window + Global Attention,使 CLS 位置能整合全局信息。
    • 例如:arXiv 论文摘要任务,输入 16K tokens,模型仍然可以高效运行。
  • 适用于长文 QA(Long Document QA)

    • 传统 QA 需要截断上下文(如 BERT 只能用 512 tokens)。
    • Longformer 可以处理 8K+ tokens,保证所有信息被覆盖,提升答案查找准确率。
  • 适用于长文分类(Long Document Classification)

    • CLS 位置的 Global Attention 可以整合 8K+ tokens 的全局信息,提高分类准确度。

4. 结论

Sliding Window Attention 可以扩展到 8K+ 序列,原因如下:

  1. 降低计算复杂度,从 ( O ( n 2 ) O(n^2) O(n2) ) 变为 ( O ( n ⋅ w ) O(n \cdot w) O(nw) ),可扩展到长文本。
  2. 通过 Transformer 层级堆叠,多层次传递信息,间接覆盖全局依赖
  3. 结合 Global Attention,让关键 token 直接连接全局,提高远程依赖建模能力
  4. 结合 Dilated Attention(扩张窗口)可以进一步提升长距离信息传播

🔹 最终,Sliding Window Attention + Global Attention + Dilated Attention 让 Transformer 既能高效处理长文本,又能捕捉全局依赖! 🚀

Hybrid Attention(滑动窗口注意力 + 全局注意力)解析


Longformer 等长序列 Transformer 结构中,Hybrid Attention 结合了 Sliding Window Attention(局部注意力)和 Global Attention(全局注意力),以同时实现:

  • 高效计算:滑动窗口注意力降低计算复杂度到 ( O ( n ⋅ w ) O(n \cdot w) O(nw) ),适用于长文本。
  • 全局依赖捕捉:全局注意力允许关键 token(如 CLS、问题 token)能访问所有 tokens,确保长距离信息流通。

1. 什么是 Global Attention?

在标准 全自注意力(Self-Attention) 机制中:

  • 每个 token 计算所有 token 的注意力权重,计算复杂度 ( O ( n 2 ) O(n^2) O(n2) )。
  • Sliding Window Attention 仅计算局部窗口内的 token,无法直接建模远程依赖。

Global Attention 的作用:

  • 指定部分 token 作为“全局节点”,这些 token 可以访问所有 tokens,同时 所有 tokens 也可以访问这些全局节点
  • 一般用于关键任务相关 tokens,例如:
    • [CLS](分类任务)
    • 问题 tokens(问答任务)
    • 摘要 tokens(摘要任务)

Hybrid Attention 结合两者的方式:
Hybrid Attention = Sliding Window Attention + Global Attention \text{Hybrid Attention} = \text{Sliding Window Attention} + \text{Global Attention} Hybrid Attention=Sliding Window Attention+Global Attention

  • 大部分 tokens 采用 Sliding Window 计算注意力,计算复杂度为 ( O ( n ⋅ w ) O(n \cdot w) O(nw) )。
  • 关键 tokens 采用 Global Attention,可以访问整个序列,补充长距离信息。

2. Hybrid Attention 计算方法

假设:

  • window_size = 512
  • global_mask 指定哪些 token 需要全局注意力(如 CLS)。

计算步骤:

  1. 计算 Sliding Window Attention
    • 每个 token 仅计算 窗口范围内的注意力
  2. 计算 Global Attention
    • 只有被标记为全局注意力的 token 计算 全局 self-attention
    • 这些 token 可以访问所有 tokens,所有 tokens 也可以访问它们。
  3. 合并两种注意力机制
    • 局部 token 使用 Sliding Window Attention。
    • 全局 token 额外加上 Global Attention 权重,确保远程依赖信息传递。

3. PyTorch 实现(可运行)

下面是完整的 Hybrid Attention(滑动窗口注意力 + 全局注意力) 的 PyTorch 实现:

import torch
import torch.nn as nn
import torch.nn.functional as Fclass HybridAttention(nn.Module):def __init__(self, embed_dim, num_heads, window_size):"""Hybrid Attention: Sliding Window Attention + Global AttentionArgs:embed_dim: 词嵌入维度 dnum_heads: 注意力头数量 hwindow_size: 滑动窗口大小 w"""super(HybridAttention, self).__init__()self.embed_dim = embed_dimself.num_heads = num_headsself.window_size = window_sizeself.head_dim = embed_dim // num_heads  # 每个头的维度assert self.head_dim * num_heads == embed_dim, "embed_dim 必须是 num_heads 的整数倍"# 线性投影层self.q_proj = nn.Linear(embed_dim, embed_dim, bias=False)self.k_proj = nn.Linear(embed_dim, embed_dim, bias=False)self.v_proj = nn.Linear(embed_dim, embed_dim, bias=False)self.o_proj = nn.Linear(embed_dim, embed_dim, bias=False)def forward(self, x, global_mask):"""Args:x: 输入张量 [batch, seq_len, embed_dim]global_mask: 是否是全局注意力的 mask [batch, seq_len],1 表示全局注意力,0 表示普通窗口注意力Returns:输出张量 [batch, seq_len, embed_dim]"""batch_size, seq_len, _ = x.shape# 计算 Q, K, VQ = self.q_proj(x).view(batch_size, seq_len, self.num_heads, self.head_dim).transpose(1, 2)  # [b, h, seq, d]K = self.k_proj(x).view(batch_size, seq_len, self.num_heads, self.head_dim).transpose(1, 2)V = self.v_proj(x).view(batch_size, seq_len, self.num_heads, self.head_dim).transpose(1, 2)# 初始化注意力分数attn_scores = torch.full((batch_size, self.num_heads, seq_len, seq_len), float("-inf"), device=x.device)# 计算 Sliding Window Attentionfor i in range(seq_len):start = max(0, i - self.window_size)end = min(seq_len, i + self.window_size + 1)attn_scores[:, :, i, start:end] = torch.matmul(Q[:, :, i, :], K[:, :, start:end, :].transpose(-2, -1))# 计算 Global Attentionglobal_mask_expanded = global_mask.unsqueeze(1).unsqueeze(1)  # [batch, 1, 1, seq_len]global_indices = global_mask_expanded.expand(-1, self.num_heads, seq_len, -1)  # 扩展到注意力头维度attn_scores.masked_fill_(global_indices == 0, float("-inf"))  # 让非全局 token 只计算滑动窗口注意力global_attn_scores = torch.matmul(Q, K.transpose(-2, -1))  # 全局 attention 计算attn_scores = torch.where(global_indices == 1, global_attn_scores, attn_scores)  # 合并全局和局部注意力# 归一化 softmaxattn_scores /= self.head_dim ** 0.5attn_weights = F.softmax(attn_scores, dim=-1)# 计算注意力加权的 Valueoutput = torch.matmul(attn_weights, V)# 重新排列形状output = output.transpose(1, 2).contiguous().view(batch_size, seq_len, self.embed_dim)output = self.o_proj(output)  # 线性变换回原始维度return output

4. 代码解读

  1. 计算 Sliding Window Attention

    • 只在窗口范围内计算注意力分数,保证计算复杂度 ( O(n \cdot w) )。
  2. 计算 Global Attention

    • 通过 global_mask 选择需要全局注意力的 token(如 CLS)。
    • 计算这些 token 与所有 tokens 之间的注意力分数。
  3. 融合全局 & 局部注意力

    • 使用 torch.where() 选择是否应用全局注意力:
      • 全局 token:使用全局 self-attention 计算的权重。
      • 局部 token:仅计算滑动窗口内的注意力。

5. 运行示例

# 测试 Hybrid Attention
batch_size, seq_len, embed_dim, num_heads, window_size = 2, 16, 64, 8, 4
x = torch.randn(batch_size, seq_len, embed_dim)
global_mask = torch.zeros(batch_size, seq_len, dtype=torch.long)  # 默认无全局注意力
global_mask[:, 0] = 1  # 让 CLS 位置作为全局注意力hybrid_attn = HybridAttention(embed_dim, num_heads, window_size)
output = hybrid_attn(x, global_mask)
print(output.shape)  # 预期: (batch_size, seq_len, embed_dim)

6. 结论

  • Hybrid Attention 结合了 Sliding Window 和 Global Attention,使 Transformer 既高效又能捕捉远程依赖
  • PyTorch 实现支持运行,适用于长文本任务(如长文摘要、QA、分类等)
  • 适用于 8K+ 长文本,提高推理效率,同时保持全局信息流通!🚀

Hybrid Attention 计算 Global Attention 详细解析


代码段

# 计算 Global Attention
global_mask_expanded = global_mask.unsqueeze(1).unsqueeze(1)  # [batch, 1, 1, seq_len]
global_indices = global_mask_expanded.expand(-1, self.num_heads, seq_len, -1)  # 扩展到注意力头维度
attn_scores.masked_fill_(global_indices == 0, float("-inf"))  # 让非全局 token 只计算滑动窗口注意力
global_attn_scores = torch.matmul(Q, K.transpose(-2, -1))  # 全局 attention 计算
attn_scores = torch.where(global_indices == 1, global_attn_scores, attn_scores)  # 合并全局和局部注意力

1. 代码解析


(1) 处理 global_mask

global_mask_expanded = global_mask.unsqueeze(1).unsqueeze(1)  # [batch, 1, 1, seq_len]
作用
  • global_mask 是一个 [batch, seq_len] 形状的张量,标识哪些 token 是全局注意力。
  • unsqueeze(1).unsqueeze(1) 作用是扩展维度,使其形状变成 [batch, 1, 1, seq_len],以便后续 expand() 操作匹配 attn_scores 形状。
示例

假设 global_mask

global_mask = torch.tensor([[1, 0, 0, 0, 0],  # Batch 0:CLS(位置 0)是全局 token[0, 0, 1, 0, 0]   # Batch 1:位置 2 是全局 token
])

经过 unsqueeze() 变成:

global_mask_expanded = torch.tensor([[[[1, 0, 0, 0, 0]]],  # Batch 0[[[0, 0, 1, 0, 0]]],  # Batch 1
])  # 形状 [batch=2, 1, 1, seq_len=5]

(2) 扩展 global_mask 维度以匹配 attn_scores

global_indices = global_mask_expanded.expand(-1, self.num_heads, seq_len, -1)  # [batch, num_heads, seq_len, seq_len]
作用
  • expand(-1, self.num_heads, seq_len, -1) 扩展维度,使 global_indices 形状与 attn_scores 匹配。
示例(假设 num_heads = 2
global_indices = torch.tensor([# Batch 0[[[1, 0, 0, 0, 0],  # 头 1[1, 0, 0, 0, 0]]], # 头 2# Batch 1[[[0, 0, 1, 0, 0],  # 头 1[0, 0, 1, 0, 0]]]  # 头 2
])  # 形状 [batch=2, num_heads=2, seq_len=5, seq_len=5]
  • 现在,每个 batch 的 global_indices 里:
    • 1 表示全局注意力 token。
    • 0 表示普通 token。

(3) 让普通 token 只计算滑动窗口内的注意力

attn_scores.masked_fill_(global_indices == 0, float("-inf"))
作用
  • 非全局 token 的注意力变成 -inf,确保它们只能计算滑动窗口范围的注意力。
示例

假设 attn_scores 初始值:

attn_scores = torch.tensor([[[10, 20, 30, 40, 50],  [15, 25, 35, 45, 55]],  [[5, 10, 15, 20, 25],  [10, 15, 20, 25, 30]]
], dtype=torch.float32)

执行 masked_fill_() 后:

attn_scores = torch.tensor([[[10, -inf, -inf, -inf, -inf],  [15, -inf, -inf, -inf, -inf]],  [[-inf, -inf, 15, -inf, -inf],  [-inf, -inf, 20, -inf, -inf]]
])

现在:

  • 普通 token 的注意力分数变成 -inf,它们只能计算滑动窗口范围内的 token
  • 全局 token(如 CLS)不受影响,它们仍然可以访问所有 token

(4) 计算全局 Attention

global_attn_scores = torch.matmul(Q, K.transpose(-2, -1))  # 计算全局注意力
作用
  • 全局 token 应该能访问所有 token,所以这里 计算完整的注意力分数矩阵
  • Q @ K^T 计算所有 QK 之间的点积注意力。

(5) 合并全局和滑动窗口注意力

attn_scores = torch.where(global_indices == 1, global_attn_scores, attn_scores)
作用
  • global_indices == 1 位置使用 完整的全局注意力 global_attn_scores
  • 其他位置仍然使用 滑动窗口注意力 attn_scores
示例

假设 global_attn_scores

global_attn_scores = torch.tensor([[[100, 110, 120, 130, 140],  [105, 115, 125, 135, 145]],  [[50, 60, 70, 80, 90],  [55, 65, 75, 85, 95]]
])

执行 torch.where() 后:

attn_scores = torch.tensor([[[100, -inf, -inf, -inf, -inf],  [105, -inf, -inf, -inf, -inf]],  [[-inf, -inf, 70, -inf, -inf],  [-inf, -inf, 75, -inf, -inf]]
])

现在:

  • 全局 token (global_indices == 1) 采用全局注意力 global_attn_scores
  • 普通 token (global_indices == 0) 继续使用滑动窗口注意力(-inf 表示屏蔽)

6. 结论

代码作用
global_mask_expanded = global_mask.unsqueeze(1).unsqueeze(1)扩展 global_mask 形状,方便与 attn_scores 匹配
global_indices = global_mask_expanded.expand(-1, self.num_heads, seq_len, -1)复制 global_mask 到所有注意力头
attn_scores.masked_fill_(global_indices == 0, float("-inf"))让普通 token 只能访问滑动窗口内的 token
global_attn_scores = torch.matmul(Q, K.transpose(-2, -1))计算完整的全局注意力分数
attn_scores = torch.where(global_indices == 1, global_attn_scores, attn_scores)让全局 token 采用全局注意力,而普通 token 继续使用滑动窗口

🚀 最终,我们的 Hybrid Attention 既能高效计算长文本,又能让 CLS 等关键 token 访问全局信息! 🎯

后记

2025年2月23日14点36分于上海,在GPT 4o大模型辅助下完成。

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

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

相关文章

【运维】内网服务器借助通过某台可上外网的服务器实现公网访问

背景: 内网服务器无法连接公网,但是办公电脑可以连接内网服务器又可以连接公网。 安装软件 1、frp 2、ccproxy 配置 1、内网服务器 # 内网服务器启动frp服务配置文件参考vi frps.ini# frps.ini [common] bind_port 7000# 备注: bind_port端口可以随意配置。配置完…

【图像的读写与基本操作】

图像的读写与基本操作 目录 图像的读写与基本操作目标知识点1. 图像的读写 :2. 图像的缩放 :3. 图像的翻转 :4. 图像的裁剪 :5. 颜色空间转换 : 示例代码1. 图像的读写 :2. 图像的缩放 :3. 图像…

《数字图像处理》笔记

文章目录 第一章 绪论1.1 什么是数字图像处理数字图像的概念数字图像的组成数字图像处理的概念 1.4 数字图像处理的基本步骤 第二章 数字图像基础2.2 光和电磁波谱可见光单色光灰度级发光强度光通量亮度 2.3 图像感知和获取将照射能量变换为数字图像的传感器简单的图像形成模型…

网络安全扫描--基础篇

前言 1、了解互联网安全领域中日趋重要的扫描技术 2、了解在不同网络场景下扫描技术手段 3、熟悉linux下系统内核防护策略并能大件一个有效的系统防护体系 4、增强工作安全意识,并能有效的实践于工作场景中 目录 1、熟悉主机扫描工具(fping,…

基于Spring Boot的供应商管理系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

Redis|事务

文章目录 是什么能干嘛Redis 事务 VS 数据库事务怎么玩小总结 是什么 首先回想一下什么是数据库的事务?数据库事务是指作为单个逻辑单元执行的一系列操作,具备以下四个关键特性(ACID): 原子性(Atomicity&am…

一周学会Flask3 Python Web开发-Jinja2模板继承和include标签使用

锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 不管是开发网站还是后台管理系统,我们页面里多多少少有公共的模块。比如博客网站,就有公共的头部&…

用pyside6创建一个界面并实现一个小功能且能打包成问题记录

现在我们要开发一个程序,让用户输入一段文本包含:员工姓名、薪资、年龄。该程序可以把薪资在 2万 以上、以下的人员名单分别打印出来。 1用designer创建界面并生成UI文件; 2直接调用ui文件实现功能; from PySide6.QtWidgets im…

包子凑数——蓝桥杯真题Python

包子凑数 输入输出样例 示例 1 输入 2 4 5输出 6样例说明 凑不出的数目包括:1, 2, 3, 6, 7, 11。 示例 2 输入 2 4 6输出 INF样例说明 所有奇数都凑不出来,所以有无限多个 运行限制 最大运行时间:1s最大运行内存: 256M 最大公约数 最大公…

文档检索服务平台

文档检索服务平台是基于Elasticsearch的全文检索,包含数据采集、数据清洗、数据转换、数据检索等模块。 项目地址:Github、国内Gitee 演示地址:http://silianpan.cn/gdss/ 以下是演示角色和账号(密码同账号)&#xf…

关于Postman自动获取token

在使用postman测试联调接口时,可能每个接口都需要使用此接口生成的令牌做Authorization的Bearer Token验证,最直接的办法可能会是一步一步的点击,如下图: 在Authorization中去选择Bearer Token,然后将获取到的token粘贴…

清华大学DeepSeek文档下载,清华大学deepseek下载(完成版下载)

文章目录 前言一、清华大学DeepSeek使用手册下载二、清华大学DeepSeek使用手册思维导图 前言 这是一篇关于清华大学deepseek使用手册pdf的介绍性文章,主要介绍了DeepSeek的定义、功能、使用方法以及如何通过提示语设计优化AI性能。以下是对这些核心内容的简要概述&…

Linux:(3)

一:Linux和Linux互传(压缩包) scp:Linux scp 命令用于 Linux 之间复制文件和目录。 scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。 scp 是加密的,rcp 是不加密的,scp 是…

Arcgis 实用制图技巧--如何制作“阴影”效果

今天给大家介绍arcgis中阴影效果的制作方法,操作很简单,在ArcMap当中使用制图表达和移动几何方式就可以轻松实现。 左侧地图的图形背景组织很差。右侧地图通过使用阴影效果突出了重点内容。今天,我将要介绍两种阴影效果的创建方法:第一,纯色阴影(single color);第二,渐变…

pandas如何在dataframe上再添加一个dataframe

在pandas中,通常将一个DataFrame与另一个DataFrame进行合并或连接操作,主要有concat函数、merge函数和join方法三种方式,以下是具体介绍: ### 使用concat函数 concat函数可以沿着指定轴将多个DataFrame连接在一起,默认…

YOLOv12 ——基于卷积神经网络的快速推理速度与注意力机制带来的增强性能结合

概述 实时目标检测对于许多实际应用来说已经变得至关重要,而Ultralytics公司开发的YOLO(You Only Look Once,只看一次)系列一直是最先进的模型系列,在速度和准确性之间提供了稳健的平衡。注意力机制的低效阻碍了它们在…

OpenAI开放Deep Research权限,AI智能体大战升级,DeepSeek与Claude迎来新对决

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

鸿蒙5.0实战案例:基于RichEditor的评论编辑

往期推文全新看点(文中附带全新鸿蒙5.0全栈学习笔录) ✏️ 鸿蒙(HarmonyOS)北向开发知识点记录~ ✏️ 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ ✏️ 鸿蒙应用开发与鸿蒙系统开发哪个更有前景&#…

RIP-AV:使用上下文感知网络进行视网膜动脉/静脉分割的联合代表性实例预训练

文章目录 RIP-AV: Joint Representative Instance Pre-training with Context Aware Network for Retinal Artery/Vein Segmentation摘要方法实验结果 RIP-AV: Joint Representative Instance Pre-training with Context Aware Network for Retinal Artery/Vein Segmentation …

单片机总结【GPIO/TIM/IIC/SPI/UART】

一、GPIO 1、概念 通用输入输出口;开发者可以根据自己的需求将其配置为输入或输出模式,以实现与外部设备进行数据交互、控制外部设备等功能。简单来说,GPIO 就像是计算机或微控制器与外部世界沟通的 “桥梁”。 2、工作模式 工作模式性质特…