pytorch输出网络结构各层 &

您所在的位置:网站首页 pytorch模型预测结果输出 pytorch输出网络结构各层 &

pytorch输出网络结构各层 &

2024-03-15 00:37| 来源: 网络整理| 查看: 265

model.modules() & model.children()

modules()与children()都是返回网络模型里的组成元素,但是children()返回的是最外层的元素,modules()返回的是所有的元素,包括不同级别的子元素。

用list举例就是

 

model.modules()

from torch import nn from torch.nn import functional as F from torchvision import models class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.fc1 = nn.Linear(28 * 28, 256) self.fc2 = nn.Linear(256, 64) self.fc3 = nn.Linear(64, 10) def forward(self, x): x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = self.fc3(x) return x net = Net() vgg = models.vgg19(pretrained=True).features print('net--------------------------') for i in net.modules(): print(i) print() print('vgg--------------------------') for i in vgg.modules(): print(i)

 

model.children()

from torch import nn from torch.nn import functional as F from torchvision import models class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.fc1 = nn.Linear(28 * 28, 256) self.fc2 = nn.Linear(256, 64) self.fc3 = nn.Linear(64, 10) def forward(self, x): x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = self.fc3(x) return x net = Net() vgg = models.vgg19(pretrained=True).features print('net--------------------------') for i in net.children(): print(i) print() print('vgg--------------------------') for i in vgg.children(): print(i)

在这里和model.modules()的结果是一样的

 

 

它们的区别展现在例如网络结构有嵌套的时候

class Net4(torch.nn.Module): def __init__(self): super(Net4, self).__init__() self.conv = torch.nn.Sequential( OrderedDict( [ ("conv1", torch.nn.Conv2d(3, 32, 3, 1, 1)), ("relu1", torch.nn.ReLU()), ("pool1", torch.nn.MaxPool2d(2)) ] )) self.dense = torch.nn.Sequential( OrderedDict([ ("dense1", torch.nn.Linear(32 * 3 * 3, 128)), ("relu2", torch.nn.ReLU()), ("dense2", torch.nn.Linear(128, 10)) ]) ) def forward(self, x): conv_out = self.conv1(x) res = conv_out.view(conv_out.size(0), -1) out = self.dense(res) return out print("Method 4:") model4 = Net4() # modules方法将整个模型的所有构成(包括包装层Sequential、单独的层、自定义层等)由浅入深依次遍历出来,直到最深处的单层 for i in model4.modules(): print(i) print('==============================') print('=============华丽分割线=================') # named_modules()同上,但是返回的每一个元素是一个元组,第一个元素是名称,第二个元素才是层对象本身。 for i in model4.named_modules(): print(i) print('==============================') ''' 离模型最近即最浅处,就是模型本身 Net4( (conv): Sequential( (conv1): Conv2d(3, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (relu1): ReLU() (pool1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) ) (dense): Sequential( (dense1): Linear(in_features=288, out_features=128, bias=True) (relu2): ReLU() (dense2): Linear(in_features=128, out_features=10, bias=True) ) ) ============================== 由浅入深,到模型的属性 Sequential( (conv1): Conv2d(3, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (relu1): ReLU() (pool1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) ) ============================== 由浅入深,再到模型的属性的内部 Conv2d(3, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) ============================== 由浅入深,再到模型的属性的内部,依次将这个属性遍历结束 ReLU() ============================== MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) 由浅入深,再到模型的属性的内部,依次将这个属性遍历结束,再遍历另个属性 ============================== Sequential( (dense1): Linear(in_features=288, out_features=128, bias=True) (relu2): ReLU() (dense2): Linear(in_features=128, out_features=10, bias=True) ) ============================== Linear(in_features=288, out_features=128, bias=True) ============================== ReLU() ============================== Linear(in_features=128, out_features=10, bias=True) ============================== =============华丽分割线================= ('', Net4( (conv): Sequential( (conv1): Conv2d(3, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (relu1): ReLU() (pool1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) ) (dense): Sequential( (dense1): Linear(in_features=288, out_features=128, bias=True) (relu2): ReLU() (dense2): Linear(in_features=128, out_features=10, bias=True) ) )) ============================== ('conv', Sequential( (conv1): Conv2d(3, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (relu1): ReLU() (pool1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) )) ============================== ('conv.conv1', Conv2d(3, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))) ============================== ('conv.relu1', ReLU()) ============================== ('conv.pool1', MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)) ============================== ('dense', Sequential( (dense1): Linear(in_features=288, out_features=128, bias=True) (relu2): ReLU() (dense2): Linear(in_features=128, out_features=10, bias=True) )) ============================== ('dense.dense1', Linear(in_features=288, out_features=128, bias=True)) ============================== ('dense.relu2', ReLU()) ============================== ('dense.dense2', Linear(in_features=128, out_features=10, bias=True)) ============================== '''

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3