У меня есть график следующим образом, где вход x имеет два пути для достижения y. Они объединены с gModule, который использует cMulTable. Теперь, если я делаю gModule: назад (x, y), я получаю таблицу из двух значений. Соответствуют ли они производной ошибки, полученной из двух путей? факел назад через gModule
Но так как path2 содержит другие nn-слои, я полагаю, что мне нужно выводить производные по этому пути поэтапно. Но почему я получил таблицу из двух значений для dy/dx?
Для того, чтобы прояснить ситуацию, код, чтобы проверить это следующим образом:
input1 = nn.Identity()()
input2 = nn.Identity()()
score = nn.CAddTable()({nn.Linear(3, 5)(input1),nn.Linear(3, 5)(input2)})
g = nn.gModule({input1, input2}, {score}) #gModule
mlp = nn.Linear(3,3) #path2 layer
x = torch.rand(3,3)
x_p = mlp:forward(x)
result = g:forward({x,x_p})
error = torch.rand(result:size())
gradient1 = g:backward(x, error) #this is a table of 2 tensors
gradient2 = g:backward(x_p, error) #this is also a table of 2 tensors
Так что случилось с моими шагами?
P.S, возможно, я выяснил причину, потому что g: назад ({x, x_p}, ошибка) приводит к той же таблице. Поэтому я думаю, что эти два значения означают dy/dx и dy/dx_p соответственно.
Привет, Алекс, спасибо за ваш ответ. Вместо того, чтобы использовать один вход x, я создал gModule с двумя входами a и b, а значение b зависит от a. Я сделал это таким образом, потому что слой nn более сложный, чем линейное преобразование. Он имеет структуру LSTM. –
Я также включил мое моделирование кода, пожалуйста, проверьте его @ Александр Луценко –