¿Qué significa "*" operador de hacer antes del tensor de tamaño en PyTorch?

YOLOv4:

Ahora estoy aprendiendo la construcción de redes neuronales en PyTorch. Estos son los códigos de corte del .pyarchivo:

x = torch.unsqueeze(torch.linspace(-1, 1, 1000), dim=1)
y = x.pow(2) + 0.1*torch.normal(torch.zeros(*x.size()))

Estoy bastante comfused acerca de la utilidad del *operador antes x.size(). Traté de eliminarlo y trazar el gráfico de dispersión, que se probó el mismo que el uno con *no eliminado.

También comprobé la documentación oficial sizeen https://pytorch.org/docs/stable/tensors.html pero no podía entenderlo.

Imagen del artículo torch.size en la documentación

Se lo agradecería mucho si me puede ayudar.

Crystin:

la razón de que * no hace ninguna diferencia en los resultados que aquí se debe a torch.zerosalvo tanto un número variable de argumentos y una colección como una lista o tupla como se ha mencionado aquí . Esto no significa que * sí mismo es inútil.

Entonces, puesto que torch.Size()la clase es una subclase de tupla Python, uno puede descomprimirlo usando *. ( x.size()Devolverá un torch.Size()objeto)

Así que para concluir, x.size()le daría (1000, 1)y *x.size() en el argumento le daría 1000, 1y ambos son aceptados portorch.zeros()

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=408845&siteId=1
Recomendado
Clasificación