亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

沒有所有連接的神經網絡層

沒有所有連接的神經網絡層

大話西游666 2023-08-08 10:55:08
神經網絡密集層中的權重是一個 (n,d) 矩陣,我想強制其中一些權重始終為零。我有另一個 (n,d) 矩陣,它是其條目可以非零的掩碼。這個想法是,該層不應該是真正密集的,而是缺少一些連接(即等于 0)。在使用 PyTorch(或 Tensorflow)訓練時如何實現這一目標?我不希望這些權重在訓練時變得非零。一種方法(如果不直接支持)是在每次訓練迭代后將所需的條目清零。
查看完整描述

2 回答

?
慕村225694

TA貢獻1880條經驗 獲得超4個贊

您可以利用 pytorch 的稀疏數據類型:


class SparseLinear(nn.Module):

? def __init__(self, in_features, out_features, sparse_indices):

? ? super(SparseLinear, self).__init__()

? ? self.weight = nn.Parameter(data=torch.sparse.FloatTensor(sparse_indices, torch.randn(sparse_indices.shape[1]), [in_features, out_features]), requires_grad=True)

? ? self.bias = nn.Parameter(data=torch.randn(out_features), requires_grad=True)


? def forward(self, x):

? ? return torch.sparse.admm(self.bias, self.weight, x, 1., 1.)


查看完整回答
反對 回復 2023-08-08
?
HUX布斯

TA貢獻1876條經驗 獲得超6個贊

我假設您想使用密集張量來實現這種稀疏連接層。如果是這樣,您可以將要屏蔽(無連接)的元素的屏蔽矩陣(張量)定義為 0.0,否則為 1.0。在前向傳遞中,您可以簡單地將權重張量與掩碼張量相乘(您想要采用逐元素乘積,這是您在 PyTorch 中使用 * 運算符時的默認值),然后再與輸入進行矩陣乘法對于你的稀疏層。

為了使其正常工作,您必須確保您的掩模張量沒有收到梯度,否則它會在您訓練模型時更新并變得無效。為此,您只需requires_grad=False在創建掩模張量時進行設置。


查看完整回答
反對 回復 2023-08-08
  • 2 回答
  • 0 關注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號