Я встретил некоторый код во введении в Word2Vec и PyTorch, с которым я не совсем знаком.Я не видел такого типа структуры кода раньше.
>>> import torch
>>> from torch import nn
>>> # an Embedding module containing 10 tensors of size 3
>>> embedding = nn.Embedding(10, 3)
>>> # a batch of 2 samples of 4 indices each
>>> input = torch.LongTensor([[1,2,4,5],[4,3,2,9]])
>>> embedding(input)
tensor([[[-0.0251, -1.6902, 0.7172],
[-0.6431, 0.0748, 0.6969],
[ 1.4970, 1.3448, -0.9685],
[-0.3677, -2.7265, -0.1685]],
[[ 1.4970, 1.3448, -0.9685],
[ 0.4362, -0.4004, 0.9400],
[-0.6431, 0.0748, 0.6969],
[ 0.9124, -2.3616, 1.1151]]])
Я немного озадачен следующей строкой кода.
>>> embedding(input)
Возможно, я случайно проигнорировал этот синтаксисв прошлом, но я не помню, чтобы когда-нибудь передавали переменную в экземпляр класса?Ссылаясь на документацию PyTorch , где определено Class Embedding()
, разрешено ли это поведение с декоратором @weak_script_method
wrapping def forward()
?Приведенный ниже код предполагает, что это может иметь место?
>>> torch.manual_seed(2)
>>> torch.eq(embedding(input), embedding.forward(input)).all()
tensor(1, dtype=torch.uint8)
Почему использование декоратора @weak_script_method
предпочтительнее в этом случае?