Python-Klassenparameterdefinition und Datenerweiterungsmethode „unsqueeze/expand'.

WBOY
Freigeben: 2022-08-24 13:32:40
nach vorne
2369 Leute haben es durchsucht

【Verwandte Empfehlung:Python3-Video-Tutorial

Parameterdefinition der Klasse

Setzen Sie die Conda-Umgebung auf ai,conda activate aiconda activate ai

这个文件的由来:

由于在yolov1的pytorch实现的损失函数中,看到继承了nn.Module,并且其中两个参数不像c++那里指定类型,那么他们的类型是哪里来的

这里就是在探索这样一件事

操作逻辑:

  • 先在类中定义了构造函数以及一个自定义函数;
  • 构造函数定义了属性S、B,自定义函数引入两个参数,对两个参数进行调用
    • 这里就说明参数的结构是怎么样的,取决于参数被调用了什么东西,比如这里调用了N = box1.size(0) M = box2.size(0)
    • Der Ursprung dieser Datei :
  • Da wir in der von yolov1s Pytorch implementierten Verlustfunktion sehen, dass nn.Module vererbt wird und zwei der Parameter nicht die angegebenen Typen in C++ haben, woher kommen dann ihre Typen? Hier ist so etwas zu erkunden

Operationslogik:

  • Definieren Sie zunächst einen Konstruktor und eine benutzerdefinierte Funktion in der Klasse
  • Der Konstruktor definiert die Attribute S und B , die Die benutzerdefinierte Funktion führt zwei Parameter ein und ruft die beiden Parameter auf.
    • Hier ist die Struktur der Parameter, abhängig davon, wie die Parameter aufgerufen werden. Beispielsweise wird hierN = box1.size(0) M genannt = box2.size(0)zeigt, dass es sich um so etwas wie eine Matrix handelt, und die entsprechende Definition von box1 ist „torch.rand(10,4)

      import torch import torch.nn as nn import torch.nn.functional as F from torch.autograd import Variable #探究属性S,B是如何产生的,以及box1、box2是如何产生的、如何调用 class yoloLoss(nn.Module): def __init__(self,S,B): self.S=S self.B=B def compute_iot(self,box1,box2): N = box1.size(0) #调用方式就表示了变量是什么类型,这里是一个张量,其中每个元素是一个tensor,所以是N*4的张量 M = box2.size(0) print(M,N) yoloLoss1 =yoloLoss(10, 11) yoloLoss1.compute_iot(torch.rand(10,4),torch.rand(11,4))
      Nach dem Login kopieren

      DatenerweiterungExplore.“ So verwenden Sie Unsqueeze und Expand. Sie können einen Breitengrad hinzufügen, aber die Größe der Dimension beträgt nur 1, und Expand kann die Daten kopieren und in n

      # 获得一开始的初始化数值:tensor([[a1,a2,a3]]) nn1=torch.rand(1,3) print(nn1) # unsqueeze是解压的意思,在第i个维度上进行扩展,将其扩展为tensor([[[a1,a2,a3]]]) nn1=nn1.unsqueeze(0) print("*"*100) print(nn1) #利用expand对数据进行扩展 nn1=nn1.expand(1,3,3) print("*"*100) print(nn1)
      Nach dem Login kopieren
      ändern 】

Das obige ist der detaillierte Inhalt vonPython-Klassenparameterdefinition und Datenerweiterungsmethode „unsqueeze/expand'.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:jb51.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!