torch.nn.Module()
torch.nn.Module()
如果自己想研究,官方文檔
它是所有的神經(jīng)網(wǎng)絡的根父類! 你的神經(jīng)網(wǎng)絡必然要繼承!
模塊也可以包含其他模塊,允許將它們嵌套在樹結構中。所以呢,你可以將子模塊指定為常規(guī)屬性。常規(guī)定義子模塊的方法如下:
以這種方式分配的子模塊將被注冊(也就是成為你的該分支下的子類),當你調(diào)用to()等方法的時候時,它們的參數(shù)也將被轉換,等等。
當然子模塊就可以包含各種線性or卷積等操作了! 也就是模型
變量:
1. training (bool) - Boolean表示該模塊是處于培訓模式還是評估模式。
方法:
1. add_module(name, module):
將子模塊添加到當前模塊。
可以使用給定的名稱作為屬性訪問該模塊。
參數(shù):
- name: 該處填寫子模塊的名稱
- module: 該處是要添加的子模塊!
2. apply(fn)
遞歸地將fn函數(shù)應用于每個子模塊(由.children()返回) 和 self。典型的用法包括初始化模型的參數(shù)(參見torch.nn.init)。
參數(shù):
fn (Module -> None):用于每個子模塊的函數(shù),中間的參數(shù)必然是子模塊! 如果用于參數(shù)的初始化,那么就該遞歸該模塊下的各個函數(shù)
返回:
self
返回類型:
Module
3. children()
返回直接子模塊上的迭代器。
4. cpu()
將所有模型參數(shù)和緩沖區(qū)移動到CPU。
此方法將就地修改模塊(應該當前代碼之前的所有立刻移動到別處)。
5. cuda(device=None)
將所有模型參數(shù)和緩沖區(qū)移動到GPU。
這也使得相關的參數(shù)和緩沖區(qū)成為不同的對象。因此,如果模塊將在GPU上運行而被優(yōu)化,則應該在構建優(yōu)化器之前調(diào)用它。
同樣的,此方法將就地修改模塊。
參數(shù):
Device (int,optional)-如果指定了,所有參數(shù)將被復制到該設備
返回:
slef
返回類型:
Module
6. eval()
將模塊設置為評估模式。
這只對某些模塊有效。如果他們在培訓/評估模式中受到影響,請參閱特定模塊的文檔以了解他們的行為細節(jié),如Dropout, BatchNorm等。
同時這和 self.train(False) 是同等的!
返回:
slef
返回類型:
Module
7. float()
將所有浮點參數(shù)和緩沖區(qū)強制轉換為浮點數(shù)據(jù)類型。
此方法將就地修改模塊。
返回:
- slef
返回類型: - Module
8. forward()
定義在每次調(diào)用時執(zhí)行的計算。
應該被所有子類覆蓋。
注意: 雖然前向傳遞的方法需要在這個函數(shù)中定義,但是應該在之后調(diào)用Module實例而不是這個,因為前者負責運行已注冊的鉤子,而后者則會默默地忽略它們。
9. get_buffer(target)
如果存在,返回target給出的緩沖區(qū),否則拋出錯誤。
有關此方法的功能以及如何正確指定目標的更詳細的解釋,請參閱get_submodule的文檔字符串。
參數(shù):
- target - 要查找的緩沖區(qū)的全限定字符串名稱。(參見get_submodule了解如何指定全限定字符串。)
Returns
目標引用的緩沖區(qū)
Return type
torch.Tensor
Raises:
AttributeError—如果目標字符串引用了無效的路徑或解析為非緩沖區(qū)的內(nèi)容
10.get_parameter(target)
如果target指定的參數(shù)存在,則返回該參數(shù),否則拋出錯誤。
有關此方法的功能以及如何正確指定目標的更詳細的解釋,請參閱get_submodule的文檔字符串。
參數(shù):
- target - 要查找的參數(shù)的全限定字符串名稱。(參見get_submodule了解如何指定全限定字符串。)
Returns
目標引用的參數(shù)
Return type
torch.nn.Parameter
Raises:
AttributeError—如果目標字符串引用了無效的路徑或解析到不是nn.Parameter
11.get_submodule(target)
如果target給出的子模塊存在,則返回子模塊,否則拋出錯誤。
例如,假設你有一個nn.Module A是這樣的:
(圖中顯示了一個神經(jīng)網(wǎng)絡。模塊A有一個嵌套的子模塊net_b,它本身有兩個子模塊net_c和linear。然后Net_c有一個子模塊conv。)
要檢查是否有線性子模塊,可以調(diào)用get_submodule(“net_b.linear”)。要檢查是否有conv子模塊,可以調(diào)用get_submodule(“net_b.net_c.conv”)。
get_submodule運行時受模塊在target中的嵌套程度的限制。對named_modules的查詢獲得了相同的結果,但是傳遞模塊的數(shù)量是O(N)。因此,對于檢查是否存在子模塊的簡單檢查,應該始終使用get_submodule。
參數(shù):
- target - 要查找的子模塊的全限定字符串名稱。(參見上面的示例,了解如何指定全限定字符串。)
Returns
被target引用的子模塊
Return type
torch.nn.Modules
Raises:
AttributeError—如果目標字符串引用了無效的路徑或解析到不是nn.Module
12.load_state_dict(state_dict, strict=True)
將state_dict中的參數(shù)和緩沖區(qū)復制到該模塊及其后代模塊中。如果strict為True,則state_dict的鍵必須與該模塊的*state_dict()*函數(shù)返回的鍵完全匹配。
參數(shù):
- State_dict (dict): 一個包含參數(shù)和持久緩沖區(qū)的字典。
- Strict (bool,optional): 是否嚴格強制state_dict中的鍵與該模塊的*state_dict()*函數(shù)返回的鍵相匹配。默認值:Ture
Returns - Missing_keys是一個包含丟失鍵的STR列表
- unexpected keys是一個包含意外鍵的STR列表
Return type
NamedTuple with missing_keys and unexpected_keys fields
13. modules()
返回包含網(wǎng)絡中所有模塊的一個迭代器。
**迭代器的意思就是可以被for循環(huán)訪問!**而經(jīng)過for循環(huán)后得到的就是一個又一個的tuple!
產(chǎn)生:
Module – a module in the network
重復的模塊只返回一次。在下面的示例中,l 將只返回一次。
例子:
14. named_children()
返回直接子模塊上的迭代器,生成模塊名和模塊本身(模塊本身啥子哦? )。
如果返回的是兩個,可以記住這個格式,如果滿足條件就輸出特定模塊!
產(chǎn)生:
(string, Module) – 包含名稱和子模塊的元組
例子:
for name, module in model.named_children(): if name in ['conv4', 'conv5']:print(module)15. parameters(recurse=True)
返回模塊參數(shù)上的迭代器。
這通常被傳遞給優(yōu)化器。
參數(shù):
recurse (bool) -如果為True,則生成該模塊和所有子模塊的參數(shù)。否則,只生成該模塊的直接成員參數(shù)。
產(chǎn)生:
Parameter – module parameter
舉例:
for param in model.parameters():print(type(param), param.size()) <class 'torch.Tensor'> (20L,) <class 'torch.Tensor'> (20L, 1L, 5L, 5L)16. requires_grad_(requires_grad=True)
更改autograd是否應該記錄此模塊中參數(shù)的操作。
該方法就地設置參數(shù)的requires_grad屬性。
這種方法有助于凍結模塊的一部分,以便對模型的各個部分進行微調(diào)或單獨訓練(如GAN訓練)。
請參閱Locally disabling gradient computation 來比較**.requires_grad_()**和幾個可能與之混淆的類似機制。
參數(shù):
Requires_grad (bool) - autograd是否應該記錄對該模塊中的參數(shù)的操作。默認值:真的。
返回:
self
Return type:
Module
17. state_dict(destination=None, prefix=’’, keep_vars=False)
返回包含整個模塊狀態(tài)的字典。
**參數(shù)和持久緩沖區(qū)(**例如運行平均值)都包括在內(nèi)。鍵是相應的參數(shù)和緩沖區(qū)名稱。
返回:
包含模塊的整個狀態(tài)的字典
Return type:
dict
舉例:
18. to(*args, **kwargs)
移動和/或強制轉換參數(shù)和緩沖區(qū)。
這里可以被叫做:
它的簽名類似于torch.Tensor.to(),但只接受浮點數(shù)或復雜的dtype’s。此外,該方法只將浮點數(shù)或復雜參數(shù)和緩沖區(qū)強制轉換為:attr: ’ dtype(如果給定)。
如果給定,整型參數(shù)和緩沖區(qū)將被移到device,但dtype不變。當設置non_blocking時,如果可能的話,它會嘗試相對于主機進行異步轉換/移動,例如,將帶有固定內(nèi)存的CPU張量移動到CUDA設備。
此方法將就地修改模塊。
Parameters
- device(torch.device) -在這個模塊中參數(shù)和緩沖器的期望設備
- Dtype(torch.dtype) -這個模塊中參數(shù)和緩沖區(qū)的浮點型或復雜的Dtype
- tensor(torch.tensor)-張量的dtype和設備是這個模塊中所有參數(shù)和緩沖區(qū)所需的dtype和設備
- memory_format (torch.memory_format) -該模塊中4D參數(shù)和緩沖區(qū)所需的內(nèi)存格式(僅關鍵字參數(shù))
返回:
self
Return type:
Module
舉例:
>>> linear = nn.Linear(2, 2) >>> linear.weight Parameter containing: tensor([[ 0.1913, -0.3420],[-0.5113, -0.2325]]) >>> linear.to(torch.double) Linear(in_features=2, out_features=2, bias=True) >>> linear.weight Parameter containing: tensor([[ 0.1913, -0.3420],[-0.5113, -0.2325]], dtype=torch.float64) >>> gpu1 = torch.device("cuda:1") >>> linear.to(gpu1, dtype=torch.half, non_blocking=True) Linear(in_features=2, out_features=2, bias=True) >>> linear.weight Parameter containing: tensor([[ 0.1914, -0.3420],[-0.5112, -0.2324]], dtype=torch.float16, device='cuda:1') >>> cpu = torch.device("cpu") >>> linear.to(cpu) Linear(in_features=2, out_features=2, bias=True) >>> linear.weight Parameter containing: tensor([[ 0.1914, -0.3420],[-0.5112, -0.2324]], dtype=torch.float16)>>> linear = nn.Linear(2, 2, bias=None).to(torch.cdouble) >>> linear.weight Parameter containing: tensor([[ 0.3741+0.j, 0.2382+0.j],[ 0.5593+0.j, -0.4443+0.j]], dtype=torch.complex128) >>> linear(torch.ones(3, 2, dtype=torch.cdouble)) tensor([[0.6122+0.j, 0.1150+0.j],[0.6122+0.j, 0.1150+0.j],[0.6122+0.j, 0.1150+0.j]], dtype=torch.complex128)19. train(mode=True)
將模塊設置為訓練模式。
這只對某些模塊有效。如果他們在培訓/評估模式中受到影響,請參閱特定模塊的文檔以了解他們的行為細節(jié),如Dropout, BatchNorm等。
參數(shù):
mode (bool) -是否設置訓練模式(True)或評估模式(False)。默認值:真的。
返回:
self
Return type:
Module
20. zero_grad(set_to_none=False)
設置所有模型參數(shù)的梯度為零。更多內(nèi)容請查看torch. optim. optimizer下的類似函數(shù)。
參數(shù):
set_to_none (bool) -不設置為零,而是將梯度值設置為None。詳見torch. optimizer . optimizer .zero_grad()。
總結
以上是生活随笔為你收集整理的torch.nn.Module()的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: react获取id_解决React应用界
- 下一篇: mysql去重取最大值,逻辑类似orac