簡體   English   中英

如何在 pytorch 的線性層中添加一些錯誤?

[英]How can I add some error to linear layer in pytorch?

我想在參數中添加一些錯誤,如下面的代碼。

import torch
import torch.nn as nn

layer = nn.Linear(10, 100)
plus_weight = torch.randn(100, 10)
layer.weight += plus_weight

但我得到了這個錯誤。

RuntimeError: a leaf Variable that requires grad is being used in an in-place operation.

我怎樣才能避免這個錯誤? 為什么我不能直接更改圖層參數值?

可以使用.data來修改葉子節點的值

layer.weight.data += plus_weight

如果要初始化或更新參數,分配 to.data 是 go 的方式。 但是在前向傳遞的中間進行就地操作來修改葉節點的值是非常危險的,因為它可能會破壞反向結果。

例如

import torch
a = torch.randn(1,1,requires_grad=True)
print(a)
b = a**2
c = torch.sum(b**2)
a.data += 1
c.backward()
print(a.grad)

output 結果將是

tensor([[0.9123]], requires_grad=True)
tensor([[6.3666]])

使用上面的代碼,我們有 c = b**2 = a**2。 c 對 a 的推導應該是 4*a**3。 但是由於您在前進過程的中間更新了 a 的值,因此 b 將是 0.9123**2 而不是 (0.9123+1)**2。 a.grad 的最終結果將是 2*(0.9123**2)*2*1.9123

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM