Pytorch張量和損失函數

文章目錄

  • 張量
    • 張量類型
    • 張量例子
    • 使用概率分布創建張量
      • 正態分布創建張量 (torch.normal)
      • 正態分布創建張量示例
      • 標準正態分布創建張量
      • 標準正態分布創建張量示例
      • 均勻分布創建張量
      • 均勻分布創建張量示例
  • 激活函數
    • 常見激活函數
  • 損失函數(Pytorch API)
    • L1范數損失函數
    • 均方誤差損失函數
    • 交叉熵損失函數
    • 余弦相似度損失
      • 計算兩個向量的余弦相似度
      • 計算兩個矩陣的余弦相似度(逐行計算)
      • 計算兩個 batch 數據的余弦相似度

張量

張量類型

  • 張量是一個多維數組,它的每個方向都被稱為模(Mode)。張量的階數就是它的維數,一階張量就是向量,二階張量就是矩陣,三界以上的張量統稱為高階張量。

  • Tensor是Pytorch的基本數據結構,在使用時表示為torch.Tensor形式。主要屬性包括以下內容(前四個屬性與數據相關,后四個屬性與梯度求導相關):
    • data:被包裝的張量。
    • dtype:張量的數據類型。
    • shape:張量的形狀/維度。
    • device:張量所在的設備,加速計算的關鍵(CPU、GPU)
    • grad:data的梯度
    • grad_fn:創建張量的Function(自動求導的關鍵)
    • requires_grad:指示是否需要計算梯度
    • is_leaf:指示是否為葉子節點

  • torch.dtype是表示torch.Tensor數據類型的對象,PyTorch支持以下9種數據類型:
數據類型dtype表示CPU張量類型GPU張量類型
32位浮點數torch.float32torch.floattorch.FloatTensortorch.cuda.FloatTensor
64位浮點數torch.float64torch.doubletorch.DoubleTensortorch.cuda.DoubleTensor
16位浮點數torch.float16torch.halftorch.HalfTensortorch.cuda.HalfTensor
8位無符號整數torch.uint8torch.ByteTensortorch.cuda.ByteTensor
8位有符號整數torch.int8torch.CharTensortorch.cuda.CharTensor
16位有符號整數torch.int16torch.shorttorch.ShortTensortorch.cuda.ShortTensor
32位有符號整數torch.int32torch.inttorch.IntTensortorch.cuda.IntTensor
64位有符號整數torch.int64torch.longtorch.LongTensortorch.cuda.LongTensor
布爾型torch.booltorch.BoolTensortorch.cuda.BoolTensor

  1. 浮點類型默認使用torch.float32
  2. 整數類型默認使用torch.int64
  3. 布爾類型用于存儲True/False值
  4. GPU張量類型需在CUDA環境下使用

張量例子

import torch
import numpy as np
# 1. 創建Tensor
x = torch.tensor([[1, 2], [3, 4.]])  # 自動推斷為float32類型
print("Tensor x:\n", x)
y=torch.tensor(np.ones((3,3)))
print("Tensor y:\n", y)
Tensor x:tensor([[1., 2.],[3., 4.]])
Tensor y:tensor([[1., 1., 1.],[1., 1., 1.],[1., 1., 1.]], dtype=torch.float64)
# 2. 查看Tensor屬性
print("\nTensor屬性:")
print("data:", x.data)        # 被包裝的張量
print("dtype:", x.dtype)      # 數據類型 torch.float32
print("shape:", x.shape)      # 形狀/維度 torch.Size([2, 2])
print("device:", x.device)    # 所在設備 cpu
print("requires_grad:", x.requires_grad)  # 是否需要計算梯度 False
print("is_leaf:", x.is_leaf)  # 是否為葉子節點 True
Tensor屬性:
data: tensor([[1., 2.],[3., 4.]])
dtype: torch.float32
shape: torch.Size([2, 2])
device: cpu
requires_grad: False
is_leaf: True
# 3. 設置requires_grad=True以跟蹤計算
x = torch.tensor([[1., 2], [3, 4]], device='cpu', requires_grad=True)
print("\n設置requires_grad=True后的x:", x)
設置requires_grad=True后的x: tensor([[1., 2.],[3., 4.]], requires_grad=True)
# 4. 進行一些計算操作
y = x + 2
z = y * y * 3
out = z.mean()print("\n計算過程:")
print("y = x + 2:\n", y)
print("z = y * y * 3:\n", z)
print("out = z.mean():", out)
計算過程:
y = x + 2:tensor([[3., 4.],[5., 6.]], grad_fn=<AddBackward0>)
z = y * y * 3:tensor([[ 27.,  48.],[ 75., 108.]], grad_fn=<MulBackward0>)
out = z.mean(): tensor(64.5000, grad_fn=<MeanBackward0>)
# 5. 反向傳播計算梯度
out.backward()
print("\n梯度計算:")
print("x.grad:\n", x.grad)  # d(out)/dx
梯度計算:
x.grad:tensor([[4.5000, 6.0000],[7.5000, 9.0000]])
# 6. 查看grad_fn
print("\n梯度函數:")
print("y.grad_fn:", y.grad_fn)  # <AddBackward0>
print("z.grad_fn:", z.grad_fn)  # <MulBackward0>
print("out.grad_fn:", out.grad_fn)  # <MeanBackward0>
梯度函數:
y.grad_fn: <AddBackward0 object at 0x0000025AD0B28670>
z.grad_fn: <MulBackward0 object at 0x0000025AD0B919A0>
out.grad_fn: <MeanBackward0 object at 0x0000025AD0B28670>
# 7. 設備管理
if torch.cuda.is_available():device = torch.device("cuda")x_cuda = x.to(device)print("\nGPU Tensor:")print("x_cuda device:", x_cuda.device)
else:print("\nCUDA不可用")
GPU Tensor:
x_cuda device: cuda:0
# 8. 數據類型轉換
x_int = x.int()
print("\n數據類型轉換:")
print("x_int dtype:", x_int.dtype)  # torch.int32
數據類型轉換:
x_int dtype: torch.int32

使用概率分布創建張量

正態分布創建張量 (torch.normal)

  • 通過torch.normal()函數從給定參數的離散正態分布中抽取隨機數創建張量。
torch.normal(mean, std, size=None, out=None)
  • mean (Tensor/float): 正態分布的均值(支持標量或張量)
  • std (Tensor/float): 正態分布的標準差(支持標量或張量)
  • size (tuple): 輸出張量的形狀(僅當mean/std為標量時必需)
  • out (Tensor): 可選輸出張量
  1. 均值和標準差均為標量
  2. 均值為張量,標準差為標量
  3. 均值為標量,標準差為張量
  4. 均值和標準差均為張量(需同形狀)

正態分布創建張量示例

import torch# 模式1:標量均值和標準差
normal_tensor1 = torch.normal(mean=0.0, std=1.0, size=(2,2))
print("標量參數:\n", normal_tensor1)# 模式2:張量均值 + 標量標準差
mean_tensor = torch.arange(1, 5, dtype=torch.float)
normal_tensor2 = torch.normal(mean=mean_tensor, std=1.0)
print("\n張量均值:\n", normal_tensor2)# 模式4:張量均值 + 張量標準差
std_tensor = torch.linspace(0.1, 0.4, steps=4)
normal_tensor3 = torch.normal(mean=mean_tensor, std=std_tensor)
print("\n雙張量參數:\n", normal_tensor3)
標量參數:tensor([[-1.5585,  0.2315],[-1.5771, -0.0783]])張量均值:tensor([0.9710, 1.2523, 3.6285, 4.2808])雙張量參數:tensor([1.0566, 2.1025, 3.1653, 3.3020])

標準正態分布創建張量

  • torch.randn
torch.randn(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
  • size (tuple): 定義張量形狀的整數序列

  • dtype (torch.dtype): 指定數據類型(如torch.float32)

  • device (torch.device): 指定設備(‘cpu’或’cuda’)

  • requires_grad (bool): 是否啟用梯度計算

  • torch.randn_like

torch.randn_like(input, dtype=None, layout=None, device=None, requires_grad=False)
  • input (Tensor): 參考張量(復制其形狀)

標準正態分布創建張量示例

# 基礎用法
randn_tensor = torch.randn(3, 4, dtype=torch.float64)
print("標準正態張量:\n", randn_tensor)# 類似張量創建
base_tensor = torch.empty(2, 3)
randn_like_tensor = torch.randn_like(base_tensor)
print("\n類似形狀創建:\n", randn_like_tensor)# GPU張量創建(需CUDA環境)
if torch.cuda.is_available():gpu_tensor = torch.randn(3, 3, device='cuda')print("\nGPU張量:", gpu_tensor.device)
標準正態張量:tensor([[-0.3266, -0.9314,  0.1892, -0.3418],[ 0.4397, -1.2986, -0.7380, -0.6443],[ 0.7485,  0.4076, -0.6021, -0.9000]], dtype=torch.float64)類似形狀創建:tensor([[-0.8994,  0.5934, -1.3246],[-0.1019,  0.8172, -1.3164]])GPU張量: cuda:0

均勻分布創建張量

  • torch.rand:生成[0,1)區間內的均勻分布
torch.rand(*size, out=None, dtype=None, layout=torch.strided, device=None,requires_grad=False) → Tensor
  • torch.rand_like
torch.rand_like(input, dtype=None, layout=None, device=None, requires_grad=False)

均勻分布創建張量示例

# 基礎均勻分布
uniform_tensor = torch.rand(2, 2)
print("均勻分布張量:\n", uniform_tensor)# 指定范圍的均勻分布(需線性變換)
a, b = 5, 10
scaled_tensor = a + (b - a) * torch.rand(3, 3)
print("\n[5,10)區間張量:\n", scaled_tensor)# 整數均勻分布(需結合random.randint)
int_tensor = torch.randint(low=0, high=10, size=(4,))
print("\n整數均勻分布:\n", int_tensor)
均勻分布張量:tensor([[0.4809, 0.6847],[0.9278, 0.9965]])[5,10)區間張量:tensor([[8.6137, 5.9940, 7.2302],[5.1680, 7.0532, 5.9403],[8.3315, 6.1549, 8.5181]])整數均勻分布:tensor([8, 5, 9, 6])

激活函數

  • 激活函數是指在神經網絡的神經元上運行的函數,其負責將神經元的輸入映射到輸出端。

常見激活函數

  • 參看深度學習系統學習系列【5】之深度學習基礎

損失函數(Pytorch API)

  • 在監督學習中,損失函數表示樣本真實值與模型預測值之間的偏差,其值通常用于衡量模型的性能。現有的監督學習算法不僅使用了損失函數,而且求解不同應用場景的算法會使用不同的損失函數。即使在相同場景下,不同的損失函數度量同一樣本的性能時也存在差異。
  • 損失函數的選用是否合理直接決定著監督學習算法預測性能的優劣。
  • 在PyTorch中,損失函數通過torch.nn包實現調用。

L1范數損失函數

  • L1范數損失即L1LoSS,原理就是取預測值和真實值的絕對誤差的平均數,計算模型預測輸出output和目標target之差的絕對值,可選擇返回同維度的張量或者標量。
    l o s s ( x , y ) = 1 N ∑ i = 1 N ∣ x ? y ∣ loss(x,y)=\frac{1}{N}\sum_{i=1}^{N}|x-y| loss(x,y)=N1?i=1N?x?y
torch.nn.L1Loss (size_average=None, reduce=None, reduction='mean')
  • size_average:為True時,返回的loss為平均值;為False時,返回的loss為各樣本的loss值之和。
  • reduce:返回值是否為標量,默認為True
import torch
import torch.nn as nn
loss=nn.L1Loss(eduction='mean')
input=torch.tensor([1.0,2.0,3.0,4.0])
target=torch.tensor([4.0,5.0,6.0,7.0])
output=loss(input,target)
print(output) # tensor(3.)
  • 兩個輸入類型必須一致,reduction是損失函數一個參數,有三個值:'none’返回的是一個向量(batch_size),'sum’返回的是和,'mean’返回的是均值。

均方誤差損失函數

  • 均方誤差損失即MSELoss,計算公式是預測值和真實值之間的平方和的平均數,計算模型預測輸出output和目標target之差的平方,可選返回同維度的張量或者標量。
    l o s s ( x , y ) = 1 N ∑ i = 1 N ∣ x ? y ∣ 2 loss(x,y)=\frac{1}{N}\sum_{i=1}^{N}|x-y|^2 loss(x,y)=N1?i=1N?x?y2
torch.nn.MSELoss(reduce=True,size average=True,reduction='mean')
  • reduce:返回值是否為標量,默認為True。
  • size_average:當reduce=True時有效。為True時,返回的loss為平均值;為False時,返回的loss為各樣本的loss值之和。
import torch
import torch.nn as nn
loss=nn.MSELoss(reduction='mean')
input=torch.tensor([1.0,2.0,3.0,4.0])
target=torch.tensor([4.0,5.0,6.0,7.0])
output=loss(input,target)
print(output) # tensor(9.)

交叉熵損失函數

  • 交叉熵損失(Cross Entropy Loss)函數結合了nn.LogSoftmax()和nn.NLLLoss()兩個函數,在做分類訓練的時候非常有用。
  • 交叉熵的概念,它用來判定實際輸出與期望輸出的接近程度。也就是說,用它來衡量網絡的輸出與標簽的差異,利用這種差異通過反向傳播來更新網絡參數。交叉熵主要刻畫的是實際輸出概率與期望輸出概率的距離,也就是交叉熵的值越小,兩個概率分布就越接近,假設概率分布p為期望輸出,概率分布q為實際輸出,計算公式如下:
    H ( p , q ) = ? ∑ x p ( x ) × l o g q ( x ) H(p, q)=-\sum_x p(x) \times logq(x) H(p,q)=?x?p(x)×logq(x)
torch.nn.CrossEntropyLoss(weight=None, size_average=None,ignore_index=-100,reduce=None,reduction='mean')
  • weight(tensor):n個元素的一維張量,分別代表n類權重,如果訓練樣本很不均衡的話,則非常有用,默認值為None。
  • size_average:當reduce=True時有效。為True時,返回的loss為平均值;為False時,返回的loss為各樣本的loss值之和。
  • ignore_index:忽略某一類別,不計算其loss,并且在采用size_average時,不會計算那一類的loss值。
  • reduce:返回值是否為標量,默認為True。
import torch.nn as nn
entroy=nn.CrossEntropyLoss(reduction='mean')
input=torch.tensor([[-0.011,-0.022,-0.033,-0.044]])
target=torch.tensor([0])
output=entroy(input,target)
print(output)

余弦相似度損失

  • 余弦相似度損失(Cosine SimilarityLoss)通常用于度量兩個向量的相似性,可以通過最大化這個相似度來進行優化。
    l o s s ( x , y ) = { l ? c o s ( x 1 , x 2 ) , y = 1 m a x ( 0 , c o s ( x 1 , x 2 ) ? m a r g i n ) , y = ? 1 \begin{array} { r } { \mathrm { l o s s } ( x , y ) = \left\{ \begin{array} { l l } { \mathrm { l } - \mathrm { c o s } ( x _ { 1 } , x _ { 2 } ) , \quad } & { y = 1 } \\ { \mathrm { m a x } ( 0 , \mathrm { c o s } ( x _ { 1 } , x _ { 2 } ) - \mathrm { m a r g i n } ) , \quad } & { y = - 1 } \end{array} \right. } \end{array} loss(x,y)={l?cos(x1?,x2?),max(0,cos(x1?,x2?)?margin),?y=1y=?1??
  • torch.nn.functional.cosine_similarity是 PyTorch 提供的用于計算兩個張量之間 余弦相似度(Cosine Similarity) 的函數。余弦相似度衡量的是兩個向量在方向上的相似程度,取值范圍為 [-1, 1],值越大表示方向越相似。
torch.nn.functional.cosine_similarity(x1,  x2, dim=1,  eps=1e-8)
參數類型說明
x1Tensor第一個輸入張量
x2Tensor第二個輸入張量
dimint計算相似度的維度,默認 dim=1表示對每個樣本計算特征向量的相似度。
epsfloat防止除零的小數值,默認 1e-8 防止分母為零(當某個向量的 L2 范數為 0 時)

常見用途

  1. 文本/圖像相似度計算(如對比學習、檢索任務)。
  2. 損失函數設計(如 1 - cosine_similarity 用于最小化方向差異)。
  3. 特征匹配(如計算兩個嵌入向量的相似度)。

計算兩個向量的余弦相似度

  1. 輸入要求x1x2 必須具有 相同的形狀shape)。如果輸入是 1D 張量(向量),需要先 unsqueeze(0) 變成 2D(矩陣)才能計算。例如:
import torch
import torch.nn.functional as Fa = torch.tensor([1.0, 2.0, 3.0])
b = torch.tensor([4.0, 5.0, 6.0])# 需要 unsqueeze(0) 變成 2D
similarity = F.cosine_similarity(a.unsqueeze(0), b.unsqueeze(0), dim=1)
print(similarity)  # 輸出:tensor([0.9746])

計算兩個矩陣的余弦相似度(逐行計算)

import torch
import torch.nn.functional as F
x1 = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
x2 = torch.tensor([[5.0, 6.0], [7.0, 8.0]])similarity = F.cosine_similarity(x1, x2, dim=1)
print(similarity)  # 輸出:tensor([0.9689, 0.9974])

計算兩個 batch 數據的余弦相似度

import torch
import torch.nn.functional as F
batch_a = torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
batch_b = torch.tensor([[4.0, 5.0, 6.0], [7.0, 8.0, 9.0]])similarity = F.cosine_similarity(batch_a, batch_b, dim=1)
print(similarity)  # 輸出:tensor([0.9746, 0.9989])

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81156.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81156.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81156.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大模型在數據分析領域的研究綜述

大模型在業務指標拆解中的應用場景與方法研究 隨著人工智能技術的快速發展&#xff0c;大模型&#xff08;Large Language Models, LLMs&#xff09;在數據分析領域的應用日益廣泛。尤其是在業務指標拆解這一復雜任務中&#xff0c;大模型展現了其獨特的價值和潛力。通過對多維…

JAVA:ResponseBodyEmitter 實現異步流式推送的技術指南

1、簡述 在許多場景下,我們希望后端能夠以流式、實時的方式推送數據給前端,比如消息通知、日志實時展示、進度條更新等。Spring Boot 提供了 ResponseBodyEmitter 機制,可以讓我們在 Controller 中異步地推送數據,從而實現實時流式輸出。 樣例代碼:https://gitee.com/lh…

Spring Boot循環依賴的陷阱與解決方案:如何打破“Bean創建死循環”?

引言 在Spring Boot開發中&#xff0c;你是否遇到過這樣的錯誤信息&#xff1f; The dependencies of some of the beans in the application context form a cycle 這表示你的應用出現了循環依賴。盡管Spring框架通過巧妙的機制解決了部分循環依賴問題&#xff0c;但在實際開…

如何閱讀、學習 Tcc (Tiny C Compiler) 源代碼?如何解析 Tcc 源代碼?

閱讀和解析 TCC&#xff08;Tiny C Compiler&#xff09; 的源代碼需要對編譯器的基本工作原理和代碼結構有一定的了解。以下是分步驟的指南&#xff0c;幫助你更高效地學習和理解 TCC 的源代碼&#xff1a; 1. 前置知識準備 C 語言基礎&#xff1a;TCC 是用 C 語言編寫的&…

Java Set系列集合詳解:HashSet、LinkedHashSet、TreeSet底層原理與使用場景

Java Set系列集合詳解&#xff1a;HashSet、LinkedHashSet、TreeSet底層原理與使用場景 一、Set系列集合概述 1. 核心特點 無序性&#xff1a;存取順序不一致&#xff08;LinkedHashSet除外&#xff09;。唯一性&#xff1a;元素不重復。無索引&#xff1a;無法通過索引直接訪…

解決 CentOS 7 鏡像源無法訪問的問題

在國內使用 CentOS 系統時&#xff0c;經常會遇到鏡像源無法訪問或者下載速度慢的問題。尤其是默認的 CentOS 鏡像源通常是國外的&#xff0c;如果你的網絡環境無法直接訪問國外服務器&#xff0c;就會出現無法下載包的情況。本文將介紹如何修改 CentOS 7 的鏡像源為國內鏡像源…

云計算與大數據進階 | 26、解鎖云架構核心:深度解析可擴展數據庫的5大策略與挑戰(上)

在云應用/服務的 5 層架構里&#xff0c;數據庫服務層穩坐第 4 把交椅&#xff0c;堪稱其中的 “硬核擔當”。它的復雜程度常常讓人望而生畏&#xff0c;不少人都將它視為整個架構中的 “終極挑戰”。 不過&#xff0c;也有人覺得可擴展存儲系統才是最難啃的 “硬骨頭”&#…

Linux——UDP/TCP協議理論

1. UDP協議 1.1 UDP協議格式 系統內的UDP協議結構體&#xff1a; 注1&#xff1a;UDP協議的報頭大小是確定的&#xff0c;為8字節 注2&#xff1a;可以通過報頭中&#xff0c;UDP長度將UDP協議的報頭和有效載荷分離&#xff0c;有效載荷將存儲到接收緩沖區中等待上層解析。 注…

考研復習全年規劃

25考研以330分成功上岸。 備考期間&#xff0c;我深知學習規劃的重要性&#xff0c;為大家精心整理了一份初試備考時間線任務規劃&#xff0c;希望能為正在備考的同學們提供參考。如果你對如何規劃學習路線仍感迷茫&#xff0c;不妨參考這份時間表&#xff0c;合理分配時間&…

PhpStudy | PhpStudy 環境配置 —— PhpStudy 目錄結構 環境變量配置 · Windows 篇

&#x1f31f;想了解這個工具的其它相關筆記&#xff1f;看看這個&#xff1a;[網安工具] 服務器環境配置工具 —— PhpStudy 使用手冊 在前面的章節中&#xff0c;筆者詳細介紹了如何在 Windows 和 Linux 系統中安裝 PhpStudy&#xff0c;但可能會有崽崽在安裝完成后發現依舊…

DDS(數據分發服務) 和 P2P(點對點網絡) 的詳細對比

1. 核心特性對比 維度 DDS P2P 實時性 微秒級延遲&#xff0c;支持硬實時&#xff08;如自動駕駛&#xff09; 毫秒至秒級&#xff0c;依賴網絡環境&#xff08;如文件傳輸&#xff09; 架構 去中心化發布/訂閱模型&#xff0c;節點自主發現 完全去中心化&#xff0c;節…

java中XML的使用

文章目錄 什么是XML特點XML作用XML的編寫語法基本語法特殊字符編寫 約束XML的書寫格式DTD文檔schema文檔屬性命名空間XML命名空間的作用 解析XML的方法??DOM解析XMLDOM介紹DOM解析包&#xff1a;org.w3c.dom常用接口DOM解析包的使用保存XML文件添加DOM節點修改/刪除DOM節點 S…

Spring Boot異步任務失效的8大原因及解決方案

Spring Boot異步任務失效的8大原因及解決方案 摘要:在使用Spring Boot的@Async實現異步任務時,你是否遇到過異步不生效的問題?本文總結了8種常見的異步失效場景,并提供對應的解決方案,幫助你徹底解決異步任務失效的難題。 一、異步失效的常見場景 1. 未啟用異步支持 ? …

QT6 源(104)篇一:閱讀與注釋QAction,其是窗體菜單欄與工具欄里的菜單項,先給出屬性測試,再給出成員函數測試,最后給出信號函數的學習于舉例測試

&#xff08;1&#xff09; &#xff08;2&#xff09; &#xff08;3&#xff09;接著給出成員函數測試 &#xff1a; &#xff08;4&#xff09; 給個信號函數的舉例 &#xff1a; &#xff08;5&#xff09; 謝謝

visual studio生成動態庫DLL

visual studio生成動態庫DLL 創建動態庫工程 注意 #include “pch.h” 要放在上面 完成后點擊生成 創建一個控制臺項目 設置項目附加目錄為剛才創建的動態庫工程Dll1&#xff1a; 配置附加庫目錄&#xff1a; 配置動態庫的導入庫&#xff08;.lib&#xff09;&#xff1a;鏈…

matlab多智能體網絡一致性研究

一個基于連續時間多智能體系統&#xff08;Multi-Agent Systems, MAS&#xff09;的一階一致性協議的MATLAB仿真代碼&#xff0c;包含網絡拓撲建模、一致性協議設計和收斂性分析。代碼支持固定拓撲和時變拓撲&#xff0c;適用于學術研究。 1. 基礎模型與代碼框架 (1) 網絡拓撲…

【omnet++】omnet++6.0.3中調用python

版本&#xff1a; omnet 6.0.3 Ubuntu 20.04.6 LTS omnet的installguide中對ubuntu版本是有要求的&#xff0c;找到對應版本下載即可 先安裝omnet再安裝anaconda omnet 6.0.3安裝 別在網上找教程了&#xff0c;官方的installguide手冊是最好的。按照手冊安裝一些依賴包后 so…

【C++】 —— 筆試刷題day_29

一、排序子序列 題目解析 一個數組的連續子序列&#xff0c;如果這個子序列是非遞增或者非遞減的&#xff1b;這個連續的子序列就是排序子序列。 現在給定一個數組&#xff0c;然后然我們判斷這個子序列可以劃分成多少個排序子序列。 例如&#xff1a;1 2 3 2 2 1 可以劃分成 …

UE RPG游戲開發練手 第二十七課 普通攻擊2

UE RPG游戲開發練手 第二十七課 普通攻擊2 1. 創建普通攻擊的蒙太奇動畫 2.打開4個蒙太奇動畫&#xff0c;修改插槽為FullBody,修改動畫速度 3.編輯動畫藍圖&#xff0c;插入FullBody插槽讓普通攻擊動畫得以播放 4. 編輯GA_LightAttack技能藍圖

MySQL——日志

undo log(回滾日志)&#xff1a;引擎層生成的日志&#xff0c;實現了事務的原子性&#xff0c;用于事務回滾和MVCC。redo log(重做日志)&#xff1a;引擎層生成的日志&#xff0c;實現了事務的持久性&#xff0c;用于非正常關閉的數據恢復。bin log(歸檔日志)&#xff1a;Serve…