婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > Python深度學(xué)習(xí)之使用Pytorch搭建ShuffleNetv2

Python深度學(xué)習(xí)之使用Pytorch搭建ShuffleNetv2

熱門(mén)標(biāo)簽:幫人做地圖標(biāo)注收費(fèi)算詐騙嗎 溫州旅游地圖標(biāo)注 蘇州電銷機(jī)器人十大排行榜 外呼不封號(hào)系統(tǒng) 悟空智電銷機(jī)器人6 荊州云電銷機(jī)器人供應(yīng)商 電信營(yíng)業(yè)廳400電話申請(qǐng) 江蘇房產(chǎn)電銷機(jī)器人廠家 遼寧400電話辦理多少錢(qián)

一、model.py

1.1 Channel Shuffle




def channel_shuffle(x: Tensor, groups: int) -> Tensor:

    batch_size, num_channels, height, width = x.size()
    channels_per_group = num_channels // groups

    # reshape
    # [batch_size, num_channels, height, width] -> [batch_size, groups, channels_per_group, height, width]
    x = x.view(batch_size, groups, channels_per_group, height, width)

    x = torch.transpose(x, 1, 2).contiguous()

    # flatten
    x = x.view(batch_size, -1, height, width)

    return x

1.2 block



class InvertedResidual(nn.Module):
    def __init__(self, input_c: int, output_c: int, stride: int):
        super(InvertedResidual, self).__init__()

        if stride not in [1, 2]:
            raise ValueError("illegal stride value.")
        self.stride = stride

        assert output_c % 2 == 0
        branch_features = output_c // 2
        # 當(dāng)stride為1時(shí),input_channel應(yīng)該是branch_features的兩倍
        # python中 '' 是位運(yùn)算,可理解為計(jì)算×2的快速方法
        assert (self.stride != 1) or (input_c == branch_features  1)

        if self.stride == 2:
            self.branch1 = nn.Sequential(
                self.depthwise_conv(input_c, input_c, kernel_s=3, stride=self.stride, padding=1),
                nn.BatchNorm2d(input_c),
                nn.Conv2d(input_c, branch_features, kernel_size=1, stride=1, padding=0, bias=False),
                nn.BatchNorm2d(branch_features),
                nn.ReLU(inplace=True)
            )
        else:
            self.branch1 = nn.Sequential()

        self.branch2 = nn.Sequential(
            nn.Conv2d(input_c if self.stride > 1 else branch_features, branch_features, kernel_size=1,
                      stride=1, padding=0, bias=False),
            nn.BatchNorm2d(branch_features),
            nn.ReLU(inplace=True),
            self.depthwise_conv(branch_features, branch_features, kernel_s=3, stride=self.stride, padding=1),
            nn.BatchNorm2d(branch_features),
            nn.Conv2d(branch_features, branch_features, kernel_size=1, stride=1, padding=0, bias=False),
            nn.BatchNorm2d(branch_features),
            nn.ReLU(inplace=True)
        )

    @staticmethod
    def depthwise_conv(input_c: int,
                       output_c: int,
                       kernel_s: int,
                       stride: int = 1,
                       padding: int = 0,
                       bias: bool = False) -> nn.Conv2d:
        return nn.Conv2d(in_channels=input_c, out_channels=output_c, kernel_size=kernel_s,
                         stride=stride, padding=padding, bias=bias, groups=input_c)

    def forward(self, x: Tensor) -> Tensor:
        if self.stride == 1:
            x1, x2 = x.chunk(2, dim=1)
            out = torch.cat((x1, self.branch2(x2)), dim=1)
        else:
            out = torch.cat((self.branch1(x), self.branch2(x)), dim=1)

        out = channel_shuffle(out, 2)

        return out

1.3 shufflenet v2




class ShuffleNetV2(nn.Module):
    def __init__(self,
                 stages_repeats: List[int],
                 stages_out_channels: List[int],
                 num_classes: int = 1000,
                 inverted_residual: Callable[..., nn.Module] = InvertedResidual):
        super(ShuffleNetV2, self).__init__()

        if len(stages_repeats) != 3:
            raise ValueError("expected stages_repeats as list of 3 positive ints")
        if len(stages_out_channels) != 5:
            raise ValueError("expected stages_out_channels as list of 5 positive ints")
        self._stage_out_channels = stages_out_channels

        # input RGB image
        input_channels = 3
        output_channels = self._stage_out_channels[0]

        self.conv1 = nn.Sequential(
            nn.Conv2d(input_channels, output_channels, kernel_size=3, stride=2, padding=1, bias=False),
            nn.BatchNorm2d(output_channels),
            nn.ReLU(inplace=True)
        )
        input_channels = output_channels

        self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)

        # Static annotations for mypy
        self.stage2: nn.Sequential
        self.stage3: nn.Sequential
        self.stage4: nn.Sequential

        stage_names = ["stage{}".format(i) for i in [2, 3, 4]]
        for name, repeats, output_channels in zip(stage_names, stages_repeats,
                                                  self._stage_out_channels[1:]):
            seq = [inverted_residual(input_channels, output_channels, 2)]
            for i in range(repeats - 1):
                seq.append(inverted_residual(output_channels, output_channels, 1))
            setattr(self, name, nn.Sequential(*seq))
            input_channels = output_channels

        output_channels = self._stage_out_channels[-1]
        self.conv5 = nn.Sequential(
            nn.Conv2d(input_channels, output_channels, kernel_size=1, stride=1, padding=0, bias=False),
            nn.BatchNorm2d(output_channels),
            nn.ReLU(inplace=True)
        )

        self.fc = nn.Linear(output_channels, num_classes)

    def _forward_impl(self, x: Tensor) -> Tensor:
        # See note [TorchScript super()]
        x = self.conv1(x)
        x = self.maxpool(x)
        x = self.stage2(x)
        x = self.stage3(x)
        x = self.stage4(x)
        x = self.conv5(x)
        x = x.mean([2, 3])  # global pool
        x = self.fc(x)
        return x

    def forward(self, x: Tensor) -> Tensor:
        return self._forward_impl(x)

二、train.py

到此這篇關(guān)于Python深度學(xué)習(xí)之使用Pytorch搭建ShuffleNetv2的文章就介紹到這了,更多相關(guān)Python用Pytorch搭建ShuffleNetv2內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python深度學(xué)習(xí)之Pytorch初步使用
  • python 如何查看pytorch版本
  • 簡(jiǎn)述python&pytorch 隨機(jī)種子的實(shí)現(xiàn)
  • 淺談pytorch、cuda、python的版本對(duì)齊問(wèn)題
  • python、PyTorch圖像讀取與numpy轉(zhuǎn)換實(shí)例
  • 基于python及pytorch中乘法的使用詳解
  • python PyTorch參數(shù)初始化和Finetune
  • python PyTorch預(yù)訓(xùn)練示例
  • Python機(jī)器學(xué)習(xí)之基于Pytorch實(shí)現(xiàn)貓狗分類

標(biāo)簽:黃山 濟(jì)南 臺(tái)灣 欽州 景德鎮(zhèn) 宿遷 喀什 三沙

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python深度學(xué)習(xí)之使用Pytorch搭建ShuffleNetv2》,本文關(guān)鍵詞  Python,深度,學(xué),習(xí)之,使用,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python深度學(xué)習(xí)之使用Pytorch搭建ShuffleNetv2》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Python深度學(xué)習(xí)之使用Pytorch搭建ShuffleNetv2的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    av在线一区二区| 久久先锋影音av鲁色资源| 自拍偷拍亚洲激情| 日韩女优av电影| 91黄色免费观看| 国产91丝袜在线18| 国产精品国产三级国产aⅴ无密码| 欧美午夜精品久久久久久超碰 | 亚洲男人的天堂在线aⅴ视频| 正在播放一区二区| 欧美日韩精品欧美日韩精品一| 99久久免费视频.com| 国产精品一区二区在线看| 天天色 色综合| 亚洲国产乱码最新视频| 亚洲欧美一区二区三区孕妇| 中文字幕中文在线不卡住| 国产欧美一区二区精品性色超碰 | 91丨九色丨黑人外教| 国产不卡一区视频| 国产福利91精品一区二区三区| 久久99精品国产麻豆婷婷洗澡| 丝袜亚洲精品中文字幕一区| 视频一区中文字幕| 日韩二区在线观看| 久久精品国产久精国产| 国产真实乱子伦精品视频| 激情五月激情综合网| 国产在线视频不卡二| 一区二区三区四区激情| 亚洲黄一区二区三区| 亚洲天堂成人网| 亚洲图片欧美色图| 秋霞电影网一区二区| 久久国产精品免费| 国产在线精品一区二区三区不卡| 国产乱人伦偷精品视频免下载| 国产高清一区日本| 色婷婷激情综合| 正在播放一区二区| 日韩午夜三级在线| 国产精品亲子乱子伦xxxx裸| 亚洲欧美日韩电影| 男女激情视频一区| 成人av网站在线| 午夜电影久久久| 蜜臀91精品一区二区三区 | 欧美日高清视频| 26uuu色噜噜精品一区| 国产精品剧情在线亚洲| 亚洲国产日韩精品| 欧美体内she精高潮| 精品欧美一区二区在线观看| 亚洲欧洲精品天堂一级| 日韩精品一二三四| 国产激情91久久精品导航| 91精品福利在线| 51久久夜色精品国产麻豆| 日韩亚洲国产中文字幕欧美| 中文字幕日韩一区| 视频在线在亚洲| www.日韩大片| 欧美一卡二卡三卡| 亚洲美女视频在线| 国产一区二区伦理| 欧美午夜电影在线播放| 久久蜜桃av一区二区天堂| 亚洲午夜久久久久久久久电影院| 国产一区二区精品久久91| 欧美剧情片在线观看| 国产精品久久久久天堂| 久久er99热精品一区二区| 91啦中文在线观看| 久久夜色精品国产噜噜av| 免费av网站大全久久| 欧洲生活片亚洲生活在线观看| 国内久久婷婷综合| 欧美日韩一区二区欧美激情 | 欧美另类z0zxhd电影| 久久久久久久av麻豆果冻| 久久国产精品72免费观看| 欧洲视频一区二区| 亚洲影视在线播放| 91精品国产入口| 国产在线播放一区三区四| 国产精品的网站| 日本不卡视频在线观看| 久久精品一区二区| 欧美在线观看一区二区| 蜜桃视频在线观看一区| 欧美韩日一区二区三区| 色偷偷88欧美精品久久久| 青青青爽久久午夜综合久久午夜 | 久久99精品一区二区三区| 精品国产百合女同互慰| 91视频com| 免费人成精品欧美精品| 中文字幕 久热精品 视频在线| 国产精品萝li| 欧美久久婷婷综合色| 青青草精品视频| 亚洲国产精品激情在线观看| 粉嫩13p一区二区三区| 中文字幕免费不卡| 在线观看91视频| 日本成人在线不卡视频| 亚洲影视在线观看| 国产亚洲视频系列| 久久久午夜电影| 久久青草国产手机看片福利盒子| 337p亚洲精品色噜噜噜| 丁香桃色午夜亚洲一区二区三区| 国模一区二区三区白浆| 久久精品国产**网站演员| 欧美日本在线一区| 欧美日韩国产色站一区二区三区| 99久久婷婷国产综合精品| 在线免费av一区| 欧美日韩精品欧美日韩精品| 日韩一区二区免费在线电影| 国产精品1024久久| 成人精品视频网站| 91老师片黄在线观看| 欧美三级在线播放| 欧美人与z0zoxxxx视频| 另类小说色综合网站| 国产一区在线观看视频| 91久久线看在观草草青青| 欧美三级一区二区| 欧美精品一区二区高清在线观看| 日本系列欧美系列| 国产成人亚洲综合a∨婷婷图片| 99精品久久只有精品| 欧美色涩在线第一页| 中文子幕无线码一区tr| 国产精品一二三区| 日韩电影免费在线| 91影视在线播放| 精品国产露脸精彩对白| 午夜精品久久一牛影视| 国产99一区视频免费| 日韩区在线观看| 石原莉奈一区二区三区在线观看| 成人听书哪个软件好| 日韩三级在线观看| 在线亚洲免费视频| 久久久99久久精品欧美| 欧美综合天天夜夜久久| 亚洲欧美韩国综合色| 懂色av中文一区二区三区| 久久中文字幕电影| 国产麻豆视频一区| 欧美日韩国产高清一区| 亚洲蜜臀av乱码久久精品蜜桃| 国产精品一区免费视频| 日本一区免费视频| 岛国精品在线观看| 亚洲天堂av一区| 欧美丰满美乳xxx高潮www| 午夜免费久久看| 精品卡一卡二卡三卡四在线| 国产精品综合视频| 亚洲精品少妇30p| 亚洲一二三四在线| 日韩午夜精品电影| 一道本成人在线| 亚洲一区二区美女| 国产婷婷色一区二区三区四区| 欧美在线免费视屏| 国产精品美女久久久久高潮| 成人av免费网站| 美女一区二区三区| 亚洲欧洲色图综合| 26uuu欧美日本| 制服丝袜av成人在线看| 7777精品伊人久久久大香线蕉最新版| 日本sm残虐另类| 亚洲自拍都市欧美小说| 国产情人综合久久777777| 日韩一区欧美一区| 国产亚洲一区二区在线观看| 69久久夜色精品国产69蝌蚪网| 成人av手机在线观看| 高清在线不卡av| 国产成人自拍高清视频在线免费播放| 午夜欧美一区二区三区在线播放| 欧美日韩电影在线| 欧美蜜桃一区二区三区| 欧美午夜不卡在线观看免费| 色婷婷精品大视频在线蜜桃视频| 国产传媒久久文化传媒| 国产精品一二三区在线| 国产盗摄一区二区| 成熟亚洲日本毛茸茸凸凹| 91美女在线视频| 欧美卡1卡2卡| 久久综合久色欧美综合狠狠| 日韩免费电影一区| av综合在线播放| 欧美日韩在线不卡|