python函数参数的用例

2024-05-19 21:14:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为grids()的python函数,参数中有关键字self,还有一个名为build_targets()的python函数。我想使用gridsizeanchor_vecgrids()到另一个名为build_targets()的python函数。这两项职能如下:

def grids(self, img_size=(608,608), gridsize=(19, 19), device='cpu', type=torch.float32):

    nx, ny = gridsize  # x and y grid size
    self.nx = nx
    self.ny = ny

    if isinstance(img_size, int):
        self.img_size = int(img_size)
    else:
        self.img_size = max(img_size)

    self.stride = self.img_size / max(gridsize)

    yv, xv = torch.meshgrid([torch.arange(ny), torch.arange(nx)])

    self.register_buffer('grid_xy', torch.stack((xv, yv), 2).view((1, 1, ny, nx, 2)).to(device)) 


    self.anchor_vec = self.anchors.to(device) / self.stride
    self.register_buffer('gridsize',torch.Tensor(gridsize).to(device))


def build_targets(model, targets):

    for i in layers_list:
        ng, anchor_vec = gridsize, anchor_vec # from grids() 

有没有办法在build_targets()中使用gridsizeanchor_vec或者如何在build_target()函数中调用它

如有任何意见,将不胜感激


Tags: to函数buildselfimgsizedevicetorch
1条回答
网友
1楼 · 发布于 2024-05-19 21:14:41

看起来grids()是类中的一个方法,那么您有两个选择:

  1. 修改build_targets(),通过在其参数中添加self使其成为类内的方法:
class SomeClass:
    def grids(...):
        self.gridsize = gridsize # (*)
        #some code

    def build_targets(self, model, targets):
        for i in layers_list:
            ng, anchor_vec = self.gridsize, self.anchor_vec # requires (*)
            # or
            ng, anchor_vec = (self.nx, self.ny), self.anchor_vec # does not requires (*)

电话:

some_instance.build_targets(some_model, some_targets)
  1. build_targets()添加更多参数:
def build_targets(model, targets, gridsize, anchor_vec):
    for i in layers_list:
        ng, anchor_vec = gridsize, anchor_vec

电话:

build_targets(some_model, some_targets, (some_instance.nx, some_instance.ny), some_instance.anchor_vec)
# quite long line

通过这种方式,build_targets()与类“独立”。这样做相当于将build_targets()移出类

相关问题 更多 >