日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

基于python实现resnet_【深度学习】基于Pytorch的ResNet实现

發布時間:2025/3/15 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于python实现resnet_【深度学习】基于Pytorch的ResNet实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. ResNet理論

殘差學習基本單元:

在ImageNet上的結果:

效果會隨著模型層數的提升而下降,當更深的網絡能夠開始收斂時,就會出現降級問題:隨著網絡深度的增加,準確度變得飽和(這可能不足為奇),然后迅速降級。

ResNet模型:

2. pytorch實現

2.1 基礎卷積

conv3$\times\(3 和conv1\)\times$1 基礎模塊

def conv3x3(in_channel, out_channel, stride=1, groups=1, dilation=1):

return nn.Conv2d(in_channel, out_channel, kernel_size=3, stride=stride, padding=dilation, groups=groups, bias=False, dilation=dilation)

def conv1x1(in_channel, out_channel, stride=1):

return nn.Conv2d(in_channel, out_channel, kernel_size=1, bias=False)

參數解釋:

in_channel: 輸入的通道數目

out_channel:輸出的通道數目

stride, padding: 步長和補0

dilation: 空洞卷積中的參數

groups: 從輸入通道到輸出通道的阻塞連接數

feature size 計算:

output = (intput - filter_size + 2 x padding) / stride + 1

空洞卷積實際卷積核大小:

K = K + (K-1)x(R-1)

K 是原始卷積核大小

R 是空洞卷積參數的空洞率(普通卷積為1)

2.2 模塊

- resnet34

- _resnet

- ResNet

- _make_layer

- block

- Bottleneck

- BasicBlock

Bottlenect

class Bottleneck(nn.Module):

expansion = 4

__constants__ = ['downsample']

def __init__(self, inplanes, planes, stride=1, downsample=None, groups=1,

base_width=64, dilation=1, norm_layer=None):

super(Bottleneck, self).__init__()

if norm_layer is None:

norm_layer = nn.BatchNorm2d

width = int(planes * (base_width / 64.)) * groups

# Both self.conv2 and self.downsample layers downsample the input when stride != 1

self.conv1 = conv1x1(inplanes, width)

self.bn1 = norm_layer(width)

self.conv2 = conv3x3(width, width, stride, groups, dilation)

self.bn2 = norm_layer(width)

self.conv3 = conv1x1(width, planes * self.expansion)

self.bn3 = norm_layer(planes * self.expansion)

self.relu = nn.ReLU(inplace=True)

self.downsample = downsample

self.stride = stride

def forward(self, x):

identity = x

out = self.conv1(x)

out = self.bn1(out)

out = self.relu(out)

out = self.conv2(out)

out = self.bn2(out)

out = self.relu(out)

out = self.conv3(out)

out = self.bn3(out)

if self.downsample is not None:

identity = self.downsample(x)

out += identity

out = self.relu(out)

return out

BasicBlock

class BasicBlock(nn.Module):

expansion = 1

__constants__ = ['downsample']

def __init__(self, inplanes, planes, stride=1, downsample=None, groups=1,

base_width=64, dilation=1, norm_layer=None):

super(BasicBlock, self).__init__()

if norm_layer is None:

norm_layer = nn.BatchNorm2d

if groups != 1 or base_width != 64:

raise ValueError('BasicBlock only supports groups=1 and base_width=64')

if dilation > 1:

raise NotImplementedError("Dilation > 1 not supported in BasicBlock")

# Both self.conv1 and self.downsample layers downsample the input when stride != 1

self.conv1 = conv3x3(inplanes, planes, stride)

self.bn1 = norm_layer(planes)

self.relu = nn.ReLU(inplace=True)

self.conv2 = conv3x3(planes, planes)

self.bn2 = norm_layer(planes)

self.downsample = downsample

self.stride = stride

def forward(self, x):

identity = x

out = self.conv1(x)

out = self.bn1(out)

out = self.relu(out)

out = self.conv2(out)

out = self.bn2(out)

if self.downsample is not None:

identity = self.downsample(x)

out += identity

out = self.relu(out)

return out

2.3 使用ResNet模塊進行遷移學習

import torchvision.models as models

import torch.nn as nn

class RES18(nn.Module):

def __init__(self):

super(RES18, self).__init__()

self.num_cls = settings.MAX_CAPTCHA*settings.ALL_CHAR_SET_LEN

self.base = torchvision.models.resnet18(pretrained=False)

self.base.fc = nn.Linear(self.base.fc.in_features, self.num_cls)

def forward(self, x):

out = self.base(x)

return out

class RES34(nn.Module):

def __init__(self):

super(RES34, self).__init__()

self.num_cls = settings.MAX_CAPTCHA*settings.ALL_CHAR_SET_LEN

self.base = torchvision.models.resnet34(pretrained=False)

self.base.fc = nn.Linear(self.base.fc.in_features, self.num_cls)

def forward(self, x):

out = self.base(x)

return out

class RES50(nn.Module):

def __init__(self):

super(RES50, self).__init__()

self.num_cls = settings.MAX_CAPTCHA*settings.ALL_CHAR_SET_LEN

self.base = torchvision.models.resnet50(pretrained=False)

self.base.fc = nn.Linear(self.base.fc.in_features, self.num_cls)

def forward(self, x):

out = self.base(x)

return out

class RES101(nn.Module):

def __init__(self):

super(RES101, self).__init__()

self.num_cls = settings.MAX_CAPTCHA*settings.ALL_CHAR_SET_LEN

self.base = torchvision.models.resnet101(pretrained=False)

self.base.fc = nn.Linear(self.base.fc.in_features, self.num_cls)

def forward(self, x):

out = self.base(x)

return out

class RES152(nn.Module):

def __init__(self):

super(RES152, self).__init__()

self.num_cls = settings.MAX_CAPTCHA*settings.ALL_CHAR_SET_LEN

self.base = torchvision.models.resnet152(pretrained=False)

self.base.fc = nn.Linear(self.base.fc.in_features, self.num_cls)

def forward(self, x):

out = self.base(x)

return out

使用模塊直接生成一個類即可,比如訓練的時候:

cnn = RES101()

cnn.train() # 改為訓練模式

prediction = cnn(img) #進行預測

目前先寫這么多,看過了源碼以后感覺寫的很好,不僅僅有論文中最基礎的部分,還有一些額外的功能,模塊的組織也很整齊。

平時使用一般都進行遷移學習,使用的話可以把上述幾個類中pretrained=False參數改為True.

總結

以上是生活随笔為你收集整理的基于python实现resnet_【深度学习】基于Pytorch的ResNet实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精在线 | 红桃视频一区二区三区免费 | 国产资源精品 | 一区影视 | 九九九九九热 | 黄色99| 国产一级做a爰片在线看免费 | 五月婷在线 | 青草视屏 | 长河落日电视连续剧免费观看 | 日本va视频 | 一级全黄男女免费大片 | 依人成人网 | 久草综合在线视频 | 国产成人在线免费视频 | 免费成人深夜在线观看 | 男生和女生差差的视频 | 免费在线黄色片 | 日韩骚片| 三级全黄做爰在线观看 | av在线手机版| jizz日本免费 | 久久久精品在线观看 | 中文字幕人妻精品一区 | 精一区二区 | 少妇一级淫片免费看 | 黄色一大片 | 精品成人在线视频 | 91视频99| 中国大陆一级片 | 国产精品亚洲第一 | 人妻熟人中文字幕一区二区 | 麻豆国产在线播放 | 亚洲黄色在线播放 | 亚洲aⅴ在线观看 | 亚洲成人三区 | 免费毛毛片 | 国产色诱视频 | 色中文在线 | 日日日日操 | 成人妇女淫片aaaa视频 | 精品欧美一区二区三区久久久 | 国产麻豆a毛片 | 在线视频1卡二卡三卡 | 中文字幕精品视频在线观看 | 亚洲国产精品久久久久婷婷老年 | caopeng在线 | 欲色网站 | 少妇人妻精品一区二区三区 | 丰满岳乱妇国产精品一区 | 欧美少妇一区二区三区 | 国产另类综合 | 国产精品日本一区二区在线播放 | 国产在线播放网站 | 亚洲天堂精品一区 | 午夜va | 精品人妻一区二区三区视频 | 毛片黄片免费看 | 华人色| 日本三级中国三级99人妇网站 | 一本色道无码道dvd在线观看 | 黄色视屏软件 | 高h放荡受浪受bl | 秋霞成人午夜鲁丝一区二区三区 | 日批的视频 | 久久久蜜桃 | 婷婷色网| 超碰在线观看97 | 女人床技48动态图 | 成人在线天堂 | aa亚洲| 蜜臀中文字幕 | a在线v| 伊人99re| 97自拍偷拍视频 | 激情噜噜 | 中文字幕导航 | 亚洲午夜精品一区二区三区他趣 | 国产三级全黄裸体 | 国产二区在线播放 | 黄视频在线免费 | 久久精品免费在线观看 | 日日噜噜噜噜久久久精品毛片 | 超碰激情在线 | 久久亚洲一区二区三区四区 | 麻豆视频在线播放 | 99ri视频| 99综合视频 | www日| 日韩在线播放一区二区 | 久久久88| 古装做爰无遮挡三级视频 | 久久久久久久久久艹 | 一道本无吗一区 | 淫欲av | 乌克兰黄色片 | 国产精品无码久久av | 亚洲一区二区av在线 | 亚洲制服一区 |