基于PyTorch的高级API封装MagNet库尝鲜

原创
2018/09/12 14:43
阅读数 100

作者: 比特小组

机器学习与数学出品

   MagNet,一个基于pytorch库的高层API封装库,非常类似于Keras。写过原生Tensorflow的童鞋肯定知道,那过程不好受,后来有了keras,tensorlayer等以后就方便多了。不同于Tensorflow,pytorch上手已经很容易了,但是有了MagNet,pytorch写起来将更加简洁。弄不好以后Keras+Tensorflow,MagNet+pytorch将作为入门深度学习的两大选择。目前该库还在开发中,bug还不少,不过喜欢pytorch的童鞋不妨先试一下,及时跟进后续进展。


地址: https://github.com/MagNet-DL/magnet

0,安装Anaconda (www.anaconda.com)


1,安装magnet并创建conda环境

$git clone https://github.com/svaisakh/magnet.git

$cd magnet && conda env update


2,设置环境变量,编辑~/.bashrc

export PYTHONPATH=$PYTHONPATH:<magnet安装路径>

export MAGNET_DATAPATH="<数据集存放路径>"


3,执行脚本使设置生效

$source ~/.bashrc


4,激活conda环境

$conda activate magnet


5,先测试上面的简单网络,流程掌握以后可以试一下复杂点的网络。


class ResBlock(mn.Node):    def __init__(self, c=None, p='same'):        super().__init__(c)    
    def build(self, x):        # Tell the ResBlock how it should build itself   
        c = self._args['c']
        p = 'half' if c is None and self._args['p'] != 'same' else 'same'
        self.convs = nn.Sequential(mn.Conv(c, p=p), mn.Conv(c, p='same', act=None))        
        super().build(x)        
    def forward(self, x):
        res = self.convs(x)        # If downsampling, pad using zeros
        if x.shape[-1] != res.shape[-1]:
            x = F.avg_pool2d(x, 2, 2, x.shape[2] % 2)
            x = torch.cat([x, torch.zeros(x.shape[0], res.shape[1] - x.shape[1],
                                          x.shape[2], x.shape[3])], dim=1)        
        return F.relu(res + x)
        
res_layer = lambda n, c=None: nn.Sequential(ResBlock(c, p='half'),*[ResBlock(c) for _ in range(n - 1)])

resnet34 = nn.Sequential(mn.Conv(64, k=7), nn.MaxPool2d(3, 2, 1), 
                         res_layer(3, 64), res_layer(4), res_layer(6), res_layer(3),
                         nn.AvgPool2d(7), mn.Linear(1000, act=None)).eval()


本文分享自微信公众号 - 机器学习与数学(Mathinside2016)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部