ホームページ  >  記事  >  バックエンド開発  >  Pythonクラスのパラメータ定義とデータ展開メソッドunsqueeze/expand

Pythonクラスのパラメータ定義とデータ展開メソッドunsqueeze/expand

WBOY
WBOY転載
2022-08-24 13:32:402412ブラウズ

[関連する推奨事項: Python3 ビデオ チュートリアル ]

クラスのパラメーター定義

conda 環境を次のように設定します。 ai, conda activate ai

このファイルの起源:

yolov1 の pytorch によって実装された損失関数では、nn が継承された .Module であり、パラメーターのうち 2 つは c で指定された型ではありません。そのため、それらの型はどこから来たのでしょうか?

ここでは、そのようなことを調査しています

操作ロジック:

    ##最初にクラス内でコンストラクターとカスタム関数を定義します。
  • コンストラクターは属性 S と B を定義し、カスタム関数は 2 つのパラメーターを導入します。パラメーターを使用した呼び出し
    • パラメータの構造は、パラメータの名前に応じて次のようになります。たとえば、ここでは
    • #N = box1.size(0) M = box2.size (0) と呼ばれます。これは行列のようなものであり、box1 の対応する定義は `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))

であると説明しています。データ拡張

アンスクイーズとエキスパンドの使用方法を調べます。アンスクイーズでは緯度を追加できますが、次元のサイズは 1 のみであり、エキスパンドではデータをコピーしてデータを 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)
## に変更できます。

#【関連する推奨事項:

Python3 ビデオ チュートリアル

]

以上がPythonクラスのパラメータ定義とデータ展開メソッドunsqueeze/expandの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjb51.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。