【发布时间】:2016-02-06 07:59:25
【问题描述】:
我有一个如下图,其中输入 x 有两条到达 y 的路径。它们与使用 cMulTable 的 gModule 相结合。现在,如果我执行 gModule:backward(x,y),我会得到一个包含两个值的表。它们是否对应于从两条路径导出的误差导数?
但是由于 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:backward({x,x_p}, error) 导致同一张表。所以我猜这两个值分别代表 dy/dx 和 dy/dx_p。
【问题讨论】:
标签: lua neural-network torch backpropagation