亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > Python深度學習之使用Pytorch搭建ShuffleNetv2

Python深度學習之使用Pytorch搭建ShuffleNetv2

熱門標簽:幫人做地圖標注收費算詐騙嗎 溫州旅游地圖標注 蘇州電銷機器人十大排行榜 外呼不封號系統 悟空智電銷機器人6 荊州云電銷機器人供應商 電信營業廳400電話申請 江蘇房產電銷機器人廠家 遼寧400電話辦理多少錢

一、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
        # 當stride為1時,input_channel應該是branch_features的兩倍
        # python中 '' 是位運算,可理解為計算×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

到此這篇關于Python深度學習之使用Pytorch搭建ShuffleNetv2的文章就介紹到這了,更多相關Python用Pytorch搭建ShuffleNetv2內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python深度學習之Pytorch初步使用
  • python 如何查看pytorch版本
  • 簡述python&pytorch 隨機種子的實現
  • 淺談pytorch、cuda、python的版本對齊問題
  • python、PyTorch圖像讀取與numpy轉換實例
  • 基于python及pytorch中乘法的使用詳解
  • python PyTorch參數初始化和Finetune
  • python PyTorch預訓練示例
  • Python機器學習之基于Pytorch實現貓狗分類

標簽:黃山 濟南 臺灣 欽州 景德鎮 宿遷 喀什 三沙

巨人網絡通訊聲明:本文標題《Python深度學習之使用Pytorch搭建ShuffleNetv2》,本文關鍵詞  Python,深度,學,習之,使用,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python深度學習之使用Pytorch搭建ShuffleNetv2》相關的同類信息!
  • 本頁收集關于Python深度學習之使用Pytorch搭建ShuffleNetv2的相關信息資訊供網民參考!
  • 推薦文章
    欧美大片aaaa一级毛片| 99久久精品国产麻豆| 久久99中文字幕| 中文字幕一区二区三区 精品 | 欧美激情伊人| 久久精品大片| 国产精品免费精品自在线观看| 四虎影视库| 天天色成人| 免费国产在线观看不卡| 精品久久久久久中文字幕一区| 成人免费高清视频| 欧美爱色| 99久久精品国产免费| 日本在线播放一区| 精品视频在线看| 九九久久99综合一区二区| 91麻豆tv| 国产欧美精品午夜在线播放| 国产一区二区精品| 日韩在线观看视频黄| 免费的黄视频| 欧美激情一区二区三区在线| 可以免费在线看黄的网站| 成人a大片高清在线观看| 国产福利免费视频| 国产一区二区精品| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 精品视频一区二区| 精品国产一区二区三区久久久蜜臀| 欧美国产日韩精品| 精品国产一区二区三区久 | 四虎影视久久久| 99色视频在线观看| 国产伦久视频免费观看 视频| 香蕉视频久久| 韩国毛片免费| 99色视频| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 天堂网中文字幕| 成人免费一级毛片在线播放视频| 精品国产一区二区三区久久久蜜臀| 欧美激情一区二区三区视频高清| 国产不卡在线播放| 精品国产香蕉在线播出| 欧美激情一区二区三区中文字幕| 亚洲精品久久玖玖玖玖| 超级乱淫黄漫画免费| 日韩av片免费播放| 成人高清视频免费观看| 日本在线播放一区| 免费国产一级特黄aa大片在线| 日韩男人天堂| 日韩中文字幕在线播放| 麻豆系列 在线视频| 国产国语在线播放视频| 美女免费精品高清毛片在线视 | 四虎影视久久| 色综合久久天天综线观看| 日日日夜夜操| 色综合久久手机在线| 亚欧成人乱码一区二区| 国产网站在线| 国产a视频| 久久99中文字幕| 亚久久伊人精品青青草原2020| 四虎久久影院| 亚洲www美色| 成人在免费观看视频国产| 黄色免费三级| 可以免费看污视频的网站| 国产成+人+综合+亚洲不卡| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 亚洲精品中文一区不卡| 日本免费看视频| 欧美激情在线精品video| 久草免费在线视频| 精品在线视频播放| 中文字幕一区二区三区 精品| 欧美爱色| 精品久久久久久影院免费| 久久精品成人一区二区三区| 999久久久免费精品国产牛牛| 日韩男人天堂| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产国语对白一级毛片| 久久精品人人做人人爽97| 中文字幕一区二区三区 精品| 成人a级高清视频在线观看| 国产不卡福利| 韩国三级视频在线观看| 台湾毛片| 韩国三级香港三级日本三级la| 日韩中文字幕一区| 九九久久99综合一区二区| 国产精品免费精品自在线观看| 国产国语在线播放视频| 欧美激情一区二区三区在线 | 欧美国产日韩精品| 亚洲天堂免费| 国产精品免费精品自在线观看| 日韩专区第一页| 99久久视频| 日日日夜夜操| 二级片在线观看| 日韩专区在线播放| 亚洲第一色在线| 深夜做爰性大片中文| 91麻豆国产级在线| 国产一区二区精品尤物| 日韩在线观看免费完整版视频| 麻豆网站在线看| 黄色免费三级| 午夜在线亚洲| 国产成人精品综合久久久| 国产成人精品综合在线| 亚洲精品中文一区不卡| 四虎精品在线观看| 亚洲 国产精品 日韩| 国产精品1024永久免费视频| 色综合久久天天综合绕观看| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 免费国产在线观看不卡| 麻豆污视频| 一级女性大黄生活片免费| 欧美激情一区二区三区中文字幕| 亚洲第一页乱| 色综合久久天天综合观看| 青青青草影院 | 99久久精品国产高清一区二区| 韩国三级视频在线观看| 国产高清在线精品一区二区| 国产麻豆精品高清在线播放| 精品在线观看一区| 精品视频在线观看视频免费视频| 免费国产在线观看| 国产综合成人观看在线| 亚洲 欧美 91| 在线观看成人网| 成人影院久久久久久影院| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 久久福利影视| 成人影院一区二区三区| 深夜做爰性大片中文| 久久成人亚洲| 麻豆污视频| 久久精品免视看国产明星| 久久精品免视看国产成人2021| 久久国产一区二区| 台湾毛片| 精品国产一区二区三区久久久狼| 精品国产三级a| 99色视频| 国产综合成人观看在线| 一本伊大人香蕉高清在线观看| 中文字幕一区二区三区 精品| 成人高清免费| 欧美国产日韩久久久| 日韩一级黄色| 中文字幕一区二区三区 精品| 国产成人女人在线视频观看 | 日韩在线观看视频免费| 亚欧乱色一区二区三区| 香蕉视频久久| 一级女人毛片人一女人| 黄视频网站免费观看| 国产视频一区二区三区四区 | 99久久视频| 久久久成人网| 999久久久免费精品国产牛牛| 久久福利影视| 国产亚洲男人的天堂在线观看| 精品国产香蕉在线播出| 999精品在线| 九九九网站| 成人影视在线观看| 99久久精品国产高清一区二区| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 午夜精品国产自在现线拍| 午夜精品国产自在现线拍| 精品视频免费在线| 国产一区二区精品在线观看| 韩国毛片基地| 日本伦理片网站| 亚飞与亚基在线观看| 久草免费在线色站| 国产91精品一区二区| 一级片片| 精品国产三级a∨在线观看| 91麻豆国产| 91麻豆精品国产片在线观看| 亚洲精品中文字幕久久久久久| 成人高清护士在线播放| 国产麻豆精品免费视频| 亚欧乱色一区二区三区| 成人av在线播放| 国产一区二区精品| 国产成人精品综合在线| 国产成人精品综合| 国产麻豆精品免费密入口|