Heim  >  Artikel  >  Backend-Entwicklung  >  Python-Klassenparameterdefinition und Datenerweiterungsmethode „unsqueeze/expand“.

Python-Klassenparameterdefinition und Datenerweiterungsmethode „unsqueeze/expand“.

WBOY
WBOYnach vorne
2022-08-24 13:32:402412Durchsuche

【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 hier N = 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))

      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)
      ä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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen