Maison  >  Article  >  développement back-end  >  Définition des paramètres de classe Python et méthode d'expansion des données pour décompresser/étendre

Définition des paramètres de classe Python et méthode d'expansion des données pour décompresser/étendre

WBOY
WBOYavant
2022-08-24 13:32:402412parcourir

【Recommandation associée : Tutoriel vidéo Python3

Définition des paramètres de la classe

Définissez l'environnement conda sur ai, conda activate aiconda activate ai

这个文件的由来:

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

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

操作逻辑:

  • 先在类中定义了构造函数以及一个自定义函数;
  • 构造函数定义了属性S、B,自定义函数引入两个参数,对两个参数进行调用
    • 这里就说明参数的结构是怎么样的,取决于参数被调用了什么东西,比如这里调用了N = box1.size(0) M = box2.size(0)
    • L'origine de ce fichier :
  • Puisque dans la fonction de perte implémentée par pytorch de yolov1, on voit que nn.Module est hérité, et que deux des paramètres n'ont pas les types spécifiés en c++, alors d'où viennent leurs types ? Voici Explorer une telle chose

Logique de fonctionnement :

  • Définissez d'abord un constructeur et une fonction personnalisée dans la classe
  • Le constructeur définit les attributs S et B , le la fonction personnalisée introduit deux paramètres et appelle les deux paramètres
    • Voici la structure des paramètres, en fonction de la manière dont les paramètres sont appelés. Par exemple, N = est appelé ici box1.size(0) M. = box2.size(0) montre que c'est quelque chose comme une matrice, et la définition correspondante de box1 est `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))

      Extension des donnéesExplorer comment utiliser décompresser et développer. Décompresser peut ajouter une latitude, mais la taille de la dimension n'est que de 1, et développer peut copier les données et modifier les données en 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)
      🎜🎜🎜🎜【Connexe recommandé : 🎜Tutoriel vidéo Python3🎜 】🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer