Pytorch 統計模型參數量的操作 param.numel()
param.numel()
返回param中元素的數量
統計模型參數量
num_params = sum(param.numel() for param in net.parameters()) print(num_params)
補充:Pytorch 查看模型參數
Pytorch 查看模型參數
查看利用Pytorch搭建模型的參數,直接看程序
import torch # 引入torch.nn並指定別名 import torch.nn as nn import torch.nn.functional as F class Net(nn.Module): def __init__(self): # nn.Module子類的函數必須在構造函數中執行父類的構造函數 super(Net, self).__init__() # 卷積層 '1'表示輸入圖片為單通道, '6'表示輸出通道數,'3'表示卷積核為3*3 self.conv1 = nn.Conv2d(1, 6, 3) #線性層,輸入1350個特征,輸出10個特征 self.fc1 = nn.Linear(1350, 10) #這裡的1350是如何計算的呢?這就要看後面的forward函數 #正向傳播 def forward(self, x): print(x.size()) # 結果:[1, 1, 32, 32] # 卷積 -> 激活 -> 池化 x = self.conv1(x) #根據卷積的尺寸計算公式,計算結果是30,具體計算公式後面第二張第四節 卷積神經網絡 有詳細介紹。 x = F.relu(x) print(x.size()) # 結果:[1, 6, 30, 30] x = F.max_pool2d(x, (2, 2)) #我們使用池化層,計算結果是15 x = F.relu(x) print(x.size()) # 結果:[1, 6, 15, 15] # reshape,‘-1'表示自適應 #這裡做的就是壓扁的操作 就是把後面的[1, 6, 15, 15]壓扁,變為 [1, 1350] x = x.view(x.size()[0], -1) print(x.size()) # 這裡就是fc1層的的輸入1350 x = self.fc1(x) return x net = Net()
for parameters in net.parameters(): print(parameters)
輸出為:
Parameter containing:
tensor([[[[-0.0104, -0.0555, 0.1417],
[-0.3281, -0.0367, 0.0208],
[-0.0894, -0.0511, -0.1253]]],[[[-0.1724, 0.2141, -0.0895],
[ 0.0116, 0.1661, -0.1853],
[-0.1190, 0.1292, -0.2451]]],[[[ 0.1827, 0.0117, 0.2880],
[ 0.2412, -0.1699, 0.0620],
[ 0.2853, -0.2794, -0.3050]]],[[[ 0.1930, 0.2687, -0.0728],
[-0.2812, 0.0301, -0.1130],
[-0.2251, -0.3170, 0.0148]]],[[[-0.2770, 0.2928, -0.0875],
[ 0.0489, -0.2463, -0.1605],
[ 0.1659, -0.1523, 0.1819]]],[[[ 0.1068, 0.2441, 0.3160],
[ 0.2945, 0.0897, 0.2978],
[ 0.0419, -0.0739, -0.2609]]]])
Parameter containing:
tensor([ 0.0782, 0.2679, -0.2516, -0.2716, -0.0084, 0.1401])
Parameter containing:
tensor([[ 1.8612e-02, 6.5482e-03, 1.6488e-02, …, -1.3283e-02,
1.8715e-02, 5.4037e-03],
[ 1.8569e-03, 1.8022e-02, -2.3465e-02, …, 1.6527e-03,
2.0443e-02, -2.2009e-02],
[ 9.9104e-03, 6.6134e-03, -2.7171e-02, …, -5.7119e-03,
2.4532e-02, 2.2284e-02],
…,
[ 6.9182e-03, 1.7279e-02, -1.7783e-03, …, 1.9354e-02,
2.1105e-03, 8.6245e-03],
[ 1.6877e-02, -1.2414e-02, 2.2409e-02, …, -2.0604e-02,
1.3253e-02, -3.6008e-03],
[-2.1598e-02, 2.5892e-02, 1.9372e-02, …, 1.4159e-02,
7.0983e-03, -2.3713e-02]])
Parameter containing:
tensor(1.00000e-02 *
[ 1.4703, 1.0289, 2.5069, -2.2603, -1.5218, -1.7019, 1.2569,
0.4617, -2.3082, -0.6282])
for name,parameters in net.named_parameters(): print(name,':',parameters.size())
輸出:
conv1.weight : torch.Size([6, 1, 3, 3])
conv1.bias : torch.Size([6])
fc1.weight : torch.Size([10, 1350])
fc1.bias : torch.Size([10])
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- 解決pytorch 的state_dict()拷貝問題
- pytorch查看網絡參數顯存占用量等操作
- PyTorch零基礎入門之構建模型基礎
- Pytorch模型中的parameter與buffer用法
- pytorch模型的保存和加載、checkpoint操作