首页
/
每日頭條
/
圖文
/
torch模型僅更新部分參數
torch模型僅更新部分參數
更新时间:2025-12-01 21:40:09

torch模型僅更新部分參數(關于Torch中的scatter)1

scatter_ 和 one hot

看了很多博客,中國人寫博客有一個特點就是複制來複制去,根本沒有講到重點,好了廢話不多扯,今天講下 scatter_ 函數。

操作一:

import torch # 導入 torch模塊,這裡操作的都是張量數據 src = torch.arange(1, 11).reshape((2, 5)) # 這裡創建一個 2行5列的數據 print(src) # 打印出來 tensor([[ 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10]])

上面這個是準備數據,是一個兩行五列的數據。再創建一個索引數據

index = torch.tensor([[0, 1, 2, 0, 2]]) print(index) tensor([[0, 1, 2, 0, 2]])

在這之前都是很簡單的,相比讀者肯定能看到,無非就是兩個數據,請耐心往下看

result_1 = torch.zeros(3, 5, dtype=src.dtype) # 創建一個3行5列的數據全是0 print(result_1) tensor([[0, 0, 0, 0 0], [0, 0 0, 0, 0], [0, 0, 0, 0, 0]])

解析來就是使用 scatter_函數: 也就是根據相關索引,把result_1的指定位置填充下

result = result_1.scatter_(0, index, src)

這裡是什麼意思呢, 0 表示按列來處理,result_1 是需要被更改的數據,index是索引位置, src數用來填充的數據,舉例子: 如上面描述:

result_1 = tensor([[0, 0, 0, 0 0],

[0, 0 0, 0, 0],

[0, 0, 0, 0, 0]])

index = tensor([[0, 1, 2, 0, 2]])

tensor([[ 1, 2, 3, 4, 5],

[ 6, 7, 8, 9, 10]])

第一個參數 0 表示按列來處理

索引第1個值為0,這表示第1列的第1個數據設置為scr中的第2個數據

ensor([[1, 0, 0, 0 0],

[0, 0 0, 0, 0],

[0, 0, 0, 0, 0]])

索引第2個值為1,這表示第2列的第2個數據設置為scr中的第2個數據

ensor([[1, 0, 0, 0 0],

[0, 2 0, 0, 0],

[0, 0, 0, 0, 0]])

索引第3個值為2,這表示第3列的第3個數據設置為scr中的第3個數據

ensor([[1, 0, 0, 0 0],

[0, 2 0, 0, 0],

[0, 0, 3, 0, 0]])

索引第4個值為0,這表示第4列的第1個數據設置為scr中的第4個數據

ensor([[1, 0, 0, 4 0],

[0, 2 0, 0, 0],

[0, 0, 3, 0, 0]])

索引第5個值為2,這表示第5列的第3個數據設置為scr中的第5個數據

ensor([[1, 0, 0, 4 0],

[0, 2 0, 0, 0],

[0, 0, 3, 0, 5]])

以上就是詳細的計算流程

操作2:

idx = torch.tensor([[0, 1, 2, 3,4]]) last = torch.zeros(3, 5, dtype=src.dtype).scatter_(dim=1, index=idx, value=2)

這裡第一步我相信大家都熟悉,就是創建一個數據而已,這裡我們理解為索引數據

1、torch.zeros(3, 5, dtype=src.dtype). 表示的是創建一個3行5列的數據矩陣,全是0

tensor([[0, 0, 0, 0 0],

[0, 0 0, 0, 0],

[0, 0, 0, 0, 0]])

2、dim=1,表示是按行計算

3、value,表示相應的位置上設置為某個值

idx = torch.tensor([[0, 1, 2, 3,4]])

表示的是第一行的第 0 1 2 3 4 的位置上全是設置為2,也就是

tensor([[2, 2, 2, 2, 2],

[0, 0, 0, 0, 0],

[0, 0, 0, 0, 0]])

當然,我相信某些人還是一臉懵逼,再繼續往下看

idx = torch.tensor([[0, 1, 2, 3,4],[0,0,0,0,4]]) last = torch.zeros(3, 5, dtype=src.dtype).scatter_(dim=1, index=idx, value=2)

這裡我們看到idx為 torch.tensor([[0, 1, 2, 3,4],[0,0,0,0,4]])

這個idx有兩行,那麼他對應的也是 torch.zeros(3, 5, dtype=src.dtype)中的兩行數據,

[0, 1, 2, 3,4] 表示的是第一行的第 0 1 2 3 4 的位置上全是設置為2

[0,0,0,0,4]]表示的是第二行的第 0 、4 的位置上設置為2,其他地方不變

因此整體數據變成了

tensor([[2, 2, 2, 2, 2],

[2, 0, 0, 0, 2],

[0, 0, 0, 0, 0]])

好了,這個函數介紹到此為止,希望能幫到大家

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
word表格出現兩頁怎麼解決(Word表格從中間斷了)
word表格出現兩頁怎麼解決(Word表格從中間斷了)
  簡介:word中的表格有時候從中間斷開,分布在兩頁,顯得非常難看。如圖所示:      圖1   問:這是什麼原因?答:因為文字内容所占據的空間太大,表格在一頁放不下去,自動溢出到下一頁。   問:怎麼調整到一頁?答:把字号縮小,把行距縮小,删除多餘的段落标記、删減不必要的内容等。當縮小到一定程度時,表格會自動變成一頁。   如圖所示:      圖2 ...
2025-12-01
鄭州國際馬拉松公交改線(鄭州欲開通馬拉松)
鄭州國際馬拉松公交改線(鄭州欲開通馬拉松)
  大河報·大河客戶端記者 甯田甜 通訊員 羅鵬   核心提示丨   11月3日,鄭州國際馬拉松将鳴槍開跑,當天,鄭州市部分道路将實施臨時交通管制。鄭州公交總公司将于當天開通馬拉松公交專線,方便市民前往參賽觀賽。      哪些路段會實施臨時交通管制?   據了解,3日淩晨5:30至上午11:00,鄭州市中原東路(工人路至京廣路段)雙向、嵩山北路(建設西路至...
2025-12-01
一分鐘了解衛生巾(關于衛生巾的一切)
一分鐘了解衛生巾(關于衛生巾的一切)
     寫在前面   衛生巾再次在網絡上引起熱議,這已經是今年第二次大規模讨論。對女性來說,這是一個平常不過卻又值得嚴肅讨論的話題。事關女性健康,對于衛生巾,不僅是每一位女性,女性身邊的他,更應該了解這一切。   近日,#散裝衛生巾#的話題不斷發酵,詞條被閱讀了13.7億次以上。      三無衛生巾、女性月經貧困、女性月經健康等各種問題都得到了廣泛讨論。...
2025-12-01
南甯濕地公園考拉河(南甯那考河濕地公園)
南甯濕地公園考拉河(南甯那考河濕地公園)
  今天我們來介紹一個鹹魚是如何翻身的。那考河,原本是一條臭水溝,也沒有什麼人關注,畢竟哪裡都不缺臭水溝。一個臭水溝都是讓人避而不及的。但是突然有一天……它一改過去的容貌,變成了如今的濕地公園。   公園據說總投資超過11個億,使用了各種技術用來淨化水體。如今的那考河早已不是過去的臭水溝了,兩岸有梯田式遞進的淨水植物帶。還種植的大片的花田。      公園是...
2025-12-01
愛豆的邪笑殺合集(搖滾愛豆們是如何被玩壞的)
愛豆的邪笑殺合集(搖滾愛豆們是如何被玩壞的)
     追星之路千千萬。作為骨灰級歌迷的我們曾經曆過日複一日的單曲循環,穿到塑性形變的Logo文化衫,逢人便安利的變态志願宣傳……這其中有思君不見之苦,也有超然自得之甜。然而近日外網流傳的幾部“追星”小說成了追星界的一大奇談與壯舉。妄想長得像現實,歌迷們此刻揚眉吐氣。快搬好小闆凳,我們來一探究竟。   翻譯編輯:李僞搖      瑪麗蓮·曼森奇遇記    ...
2025-12-01
Copyright 2023-2025 - www.tftnews.com All Rights Reserved