gpt4 book ai didi

PyTorch实现ResNet50、ResNet101和ResNet152示例

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章PyTorch实现ResNet50、ResNet101和ResNet152示例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

PyTorch: https://github.com/shanglianlm0525/PyTorch-Networks 。

PyTorch实现ResNet50、ResNet101和ResNet152示例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import torch
import torch.nn as nn
import torchvision
import numpy as np
 
print ( "PyTorch Version: " ,torch.__version__)
print ( "Torchvision Version: " ,torchvision.__version__)
 
__all__ = [ 'ResNet50' , 'ResNet101' , 'ResNet152' ]
 
def Conv1(in_planes, places, stride = 2 ):
   return nn.Sequential(
     nn.Conv2d(in_channels = in_planes,out_channels = places,kernel_size = 7 ,stride = stride,padding = 3 , bias = False ),
     nn.BatchNorm2d(places),
     nn.ReLU(inplace = True ),
     nn.MaxPool2d(kernel_size = 3 , stride = 2 , padding = 1 )
   )
 
class Bottleneck(nn.Module):
   def __init__( self ,in_places,places, stride = 1 ,downsampling = False , expansion = 4 ):
     super (Bottleneck, self ).__init__()
     self .expansion = expansion
     self .downsampling = downsampling
 
     self .bottleneck = nn.Sequential(
       nn.Conv2d(in_channels = in_places,out_channels = places,kernel_size = 1 ,stride = 1 , bias = False ),
       nn.BatchNorm2d(places),
       nn.ReLU(inplace = True ),
       nn.Conv2d(in_channels = places, out_channels = places, kernel_size = 3 , stride = stride, padding = 1 , bias = False ),
       nn.BatchNorm2d(places),
       nn.ReLU(inplace = True ),
       nn.Conv2d(in_channels = places, out_channels = places * self .expansion, kernel_size = 1 , stride = 1 , bias = False ),
       nn.BatchNorm2d(places * self .expansion),
     )
 
     if self .downsampling:
       self .downsample = nn.Sequential(
         nn.Conv2d(in_channels = in_places, out_channels = places * self .expansion, kernel_size = 1 , stride = stride, bias = False ),
         nn.BatchNorm2d(places * self .expansion)
       )
     self .relu = nn.ReLU(inplace = True )
   def forward( self , x):
     residual = x
     out = self .bottleneck(x)
 
     if self .downsampling:
       residual = self .downsample(x)
 
     out + = residual
     out = self .relu(out)
     return out
 
class ResNet(nn.Module):
   def __init__( self ,blocks, num_classes = 1000 , expansion = 4 ):
     super (ResNet, self ).__init__()
     self .expansion = expansion
 
     self .conv1 = Conv1(in_planes = 3 , places = 64 )
 
     self .layer1 = self .make_layer(in_places = 64 , places = 64 , block = blocks[ 0 ], stride = 1 )
     self .layer2 = self .make_layer(in_places = 256 ,places = 128 , block = blocks[ 1 ], stride = 2 )
     self .layer3 = self .make_layer(in_places = 512 ,places = 256 , block = blocks[ 2 ], stride = 2 )
     self .layer4 = self .make_layer(in_places = 1024 ,places = 512 , block = blocks[ 3 ], stride = 2 )
 
     self .avgpool = nn.AvgPool2d( 7 , stride = 1 )
     self .fc = nn.Linear( 2048 ,num_classes)
 
     for m in self .modules():
       if isinstance (m, nn.Conv2d):
         nn.init.kaiming_normal_(m.weight, mode = 'fan_out' , nonlinearity = 'relu' )
       elif isinstance (m, nn.BatchNorm2d):
         nn.init.constant_(m.weight, 1 )
         nn.init.constant_(m.bias, 0 )
 
   def make_layer( self , in_places, places, block, stride):
     layers = []
     layers.append(Bottleneck(in_places, places,stride, downsampling = True ))
     for i in range ( 1 , block):
       layers.append(Bottleneck(places * self .expansion, places))
 
     return nn.Sequential( * layers)
 
 
   def forward( self , x):
     x = self .conv1(x)
 
     x = self .layer1(x)
     x = self .layer2(x)
     x = self .layer3(x)
     x = self .layer4(x)
 
     x = self .avgpool(x)
     x = x.view(x.size( 0 ), - 1 )
     x = self .fc(x)
     return x
 
def ResNet50():
   return ResNet([ 3 , 4 , 6 , 3 ])
 
def ResNet101():
   return ResNet([ 3 , 4 , 23 , 3 ])
 
def ResNet152():
   return ResNet([ 3 , 8 , 36 , 3 ])
 
 
if __name__ = = '__main__' :
   #model = torchvision.models.resnet50()
   model = ResNet50()
   print (model)
 
   input = torch.randn( 1 , 3 , 224 , 224 )
   out = model( input )
   print (out.shape)

以上这篇PyTorch实现ResNet50、ResNet101和ResNet152示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.

原文链接:https://blog.csdn.net/shanglianlm/article/details/86376627 。

最后此篇关于PyTorch实现ResNet50、ResNet101和ResNet152示例的文章就讲到这里了,如果你想了解更多关于PyTorch实现ResNet50、ResNet101和ResNet152示例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com