雨滴科技技术论坛

 找回密码
 立即注册
查看: 516|回复: 2

pytorch使用gpu加速

[复制链接]

513

主题

1974

帖子

8158

积分

论坛元老

Rank: 8Rank: 8

积分
8158
扫一扫,手机访问本帖
发表于 2021-2-17 23:45:00 | 显示全部楼层 |阅读模式
pytorch的两个特性,其中之一就算提供了类似numpy这样的tensor张量计算库,且对gpu非常友好。
确实如此,只需要把网络,以及张量塞进GPU即可以获得50倍左右加速(网络数据,没有实际测试)

随便一个卷积网络,比如一个EffNet
class EffNet(nn.Module):

    def __init__(self, nb_classes=10, include_top=True, weights=None):
        super(EffNet, self).__init__()
        
        self.block1 = self.make_layers(32, 64)
        self.block2 = self.make_layers(64, 128)
        self.block3 = self.make_layers(128, 256)
        self.flatten = Flatten()
        self.linear = nn.Linear(4096, nb_classes)
        self.include_top = include_top
        self.weights = weights

    def make_layers(self, ch_in, ch_out):
        layers = [
            nn.Conv2d(3, ch_in, kernel_size=(1,1), stride=(1,1), bias=False, padding=0, dilation=(1,1)) if ch_in ==32 else nn.Conv2d(ch_in, ch_in, kernel_size=(1,1),stride=(1,1), bias=False, padding=0, dilation=(1,1)) ,
            self.make_post(ch_in),
            # DepthWiseConvolution2D
            nn.Conv2d(ch_in, 1 * ch_in, groups=ch_in, kernel_size=(1, 3),stride=(1,1), padding=(0,1), bias=False, dilation=(1,1)),
            self.make_post(ch_in),
            nn.MaxPool2d(kernel_size=(2,1), stride=(2,1)),
            # DepthWiseConvolution2D
            nn.Conv2d(ch_in, 1 * ch_in, groups=ch_in, kernel_size=(3, 1), stride=(1,1), padding=(1,0), bias=False, dilation=(1,1)),
            self.make_post(ch_in),
            nn.Conv2d(ch_in, ch_out, kernel_size=(1, 2), stride=(1, 2), bias=False, padding=(0,0), dilation=(1,1)),
            self.make_post(ch_out),
        ]
        return nn.Sequential(*layers)

    def make_post(self, ch_in):
        layers = [
            nn.LeakyReLU(0.3),
            nn.BatchNorm2d(ch_in, momentum=0.99)
        ]
        return nn.Sequential(*layers)

    def forward(self, x):
        x = self.block1(x)
        x = self.block2(x)
        x = self.block3(x)
        if self.include_top:
            x = self.flatten(x)
            x = self.linear(x)
        return x
   
net = EffNet()


google提供的EffNetV2在cifar数据集得到了99.7%的准确率!我测试了dln网络,50个epoch我就已经超出忍受了
估计200个epoch要一个晚上时间,最高的acc大概90%,200个epoch走下来基本能达到94%
言归正传,把这个net塞进去gpu
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
net.to(device)

同样在训练的时候,把数据和标签的tensor也塞进去,也是用to()这样的方法
    for i, data in enumerate(trainloader, 0):

        inputs, labels = data
        inputs,labels=inputs.to(device),labels.to(device)





回复

使用道具 举报

513

主题

1974

帖子

8158

积分

论坛元老

Rank: 8Rank: 8

积分
8158
 楼主| 发表于 2021-2-18 00:00:11 | 显示全部楼层
effnet得到99.7%还用了SAM优化方式
Sharpness-Aware Minimization for Efficiently Improving Generalization
具体看这里
https://github.com/davda54/sam

effnet,对标mobilenet和shufflenet
回复 支持 反对

使用道具 举报

404

主题

2039

帖子

1万

积分

版主

Rank: 7Rank: 7Rank: 7

积分
10726
发表于 2021-2-18 18:14:09 | 显示全部楼层
过年还在干活,
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
在线咨询
咨询热线
0755-26787502-8006/8016
扫一扫二维码
直接访问本站

QQ|Archiver|手机版|小黑屋|雨滴科技  

GMT+8, 2021-10-22 04:51 , Processed in 0.058717 second(s), 10 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表