Пользовательская инициализация весов для объекта класса Conv1D в PyTorch - PullRequest
0 голосов
/ 05 марта 2019

Я ищу класс torch.nn.Conv1D, который я хотел бы инициализировать с помощью пользовательских весов.

Мне бы хотелось, чтобы эти веса были "дифференцируемыми", так как они будут получены на основе некоторых других параметров.

Вот пример того, что я хотел бы сделать:

# Initialize random convolution of size 3:
m = nn.Conv1d(1, 1, 3, stride=1,bias=False)

# Define custom weights
w1 = 1.
w2 =-2.
w3 = 1.
paramsNP = np.array([w1, w2, w3]).reshape((1,1,3))

# Assign weights to m.weight (THIS PART FAILS)
m.weight = torch.tensor(paramsNP, requires_grad=True)

Это последнее назначение завершается неудачно с

TypeError: невозможно присвоить 'torch.DoubleTensor' в качестве параметра 'weight' (torch.nn.Parameter или None Ожидается)

Этот шов должен быть из-за того, что m.weight имеет тип torch.nn.parameter.Parameter. Каковы были бы хорошие способы выполнения назначения / инициализации объекта Conv1D m?

Вместо этой последней строки я могу выполнить это назначение:

m.weight[0,0,0] = w1
m.weight[0,0,1] = w2
m.weight[0,0,2] = w3
...