深度学习框架之个人见解

目前本人使用过的深度学习框架有4个:按照使用先后顺序:caffe,tensorflow,keras,pytorch,mxnet。

从2个方面说一下体验:

1)安装体验:

caffe: 安装及其繁琐,并且网上诸多教程都是瞎写或者转载,没有实际安装过。这里有一篇ubuntu14.04安装caffe的比较好的教程:https://blog.csdn.net/leilei18a/article/details/79490081

tensorflow:安装教程,较caffe来说简单许多。附安装教程:https://blog.csdn.net/leilei18a/article/details/79490175

keras:安装教程,本人是在tf环境下安装的,在安装tensorflow之后,加一句pip install keras 即可

pytorch:安装教程更简单,与tensorflow基本一样。若想在linux系统下安装tensorflow,pytorch。那么需要创建2个环境即可。附:https://blog.csdn.net/leilei18a/article/details/79871423  若在win下安装cpu版本,下载tf与pytorch的whl文件,pip install 名字 即可。并且pytorch教程比tensorflow好许多,tensorflow太臃肿。pytorch官方教程链接:https://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html

mxnet:除了caffe其它均可以pip install。需提前安装好cuda

2)使用体验:

    1. 读取数据:

caffe:一般是生成lmdb。    数据输入格式:N*C*H*W

tensorflow:本人喜欢 feed 方式,至于tfrecords ,不是很喜欢,以及tensorflow的数据增强方式(替代为opencv-   python);但是feed方式,建议将数据先生成HDF5文件,这样读取数据效率快较之读取本地图片。

   数据输入格式:N*C*H*W或者N*H*W*C(默认,本人比较习惯了)

keras:与tensorflow基本一样。

mxnet:symbol静态格式与tf类似,但是比tf接口简洁,没有那么多乱花眼的函数,动态和pytorch基本一致;

             但是pytorch的数据增强是在totensor之前,是对PIL数据进行操作,而mxnet的数据增强统一都是tensor,但是这些数据增强操作必须在Totensor之前,而之前也是mxnet的ndarray即tensor,因此建议采用mx.image.imread读取数据,就是ndarray了,然后采用mxnet的数据增强操作;         

pytorch:对于公共小数据集,pytorch很多已经集成到torchvision模块下。torchvision.datasets.下面

    数据输入格式:N*C*H*W

            对于本地数据集,需要建立一个txt文件,然后建立 class 类:

 

def default_loader(path):
    return Image.open(path).convert('RGB')

 

class MyDataset(Dataset):
    def __init__(self, txt, transform=None, target_transform=None, loader=default_loader):
        fh = open(txt, 'r')
        imgs = []
        for line in fh:
            line = line.strip('\n')
            line = line.rstrip()
            words = line.split()
            imgs.append((words[0],int(words[1])))
        self.imgs = imgs
        self.transform = transform
        self.target_transform = target_transform
        self.loader = loader

    def __getitem__(self, index):
        fn, label = self.imgs[index]
        img = self.loader(fn)
        if self.transform is not None:
            img = self.transform(img)
        return img,label

    def __len__(self):
        return len(self.imgs)

    2. 建立网络:

caffe:可以使用脚本,不过费时费力。有python接口,利用python生成网络,但是不能自动补全。

tensorflow:本人是图像处理方向(LSTM接触较少)。建议新手,先用tf.nn下面的基础网络函数建立网络,熟练后,高级模块有tf.layers,tf.contrib.layers,tf.contrib.slim(推荐使用slim模块),而且slim模块的fine-tune更加方便简洁。

fine-tune模型链接:https://github.com/tensorflow/models/tree/master/research/slim

而且 slim模块有已经写好的网络 可以直接调用(分类网络)slim.nets. 各种网络

keras:类似,预训练模型链接:https://github.com/fchollet/deep-learning-models/releases

mxnet:推荐使用动态的,静态也还可以,但是有的地方做的不友好,如gpu并行。

 mxnet gluon网络在initialize之后,还需要forward一下,才会有具体参数,既可以保存,有可以通过.data()获取Ndarray,再转成numpy。net.collect_params()['alexnet0_conv0_weight']._load_init() 重新赋值!!!下图进一步证明了collect_params是同步到网络中的!!!

pytorch:与tensorflow slim fine-tune类似,pytorch也有写好的网络,可以直接调用。

    torchvision.models.下面有各种网络,模型可以通过函数自动下载:eg:torchvision.models.alexnet(pretrain=True)即可自动下载。也可以手动下载:https://github.com/aaron-xichen/pytorch-playground ; https://github.com/pytorch/vision/blob/master/torchvision/models/resnet.py (往上反一级即所有模型)

 

tensorflow与pytorch (vgg系列 或者残差系列)实现HED或者U_Net,一般来说都是4个尺度变化,这是关键。

只需要记住 大部分是4个尺度变化或3 或5 个 ,那么无论多少个残差单元或者多少个巻积层都没有问题。只需要concat4次,上采样4次。那么心里就不发怵了。pytorch实现HED链接:https://github.com/gengyanlei/Pytorch-HED

基于VGG系列:

tf:采用slim模块以及outputs_collections,转成dict,即可获取在下采样的每层的输出(下采样过程需要单独构建一个函数,返回net,以及end_points每层的dict);那么在上采样过程中,不管是HED或U_Net均可以调用他们,然后concat。

torch:采用fine-tune的网络,model=torchvision.models.vgg11(pretrain=True)(既可以构建下采样网络,又可以获取预训练模型),而且pytorch将FC层与其他层单独分开了,使得调用非FC层方便,直接model_n=model.features就是非FC层;那么再构建HED或者U_Net,只需要切片model_n即可。然后forward。

基于残差系列:

tf:采用slim模块以及outputs_collections,并且每个尺度下最后一层的net也会保存输出成dict形式,很好调用。那么构建HED或者U_Net就是尺度构建问题了,但是仍然先需要构建下采样过程函数,返回net,endpoints每个block的输出。

pytorch:采用fine-tune的网络,model=torchvision.models.vgg11(pretrain=True)(既可以构建下采样网络,又可以获取预训练模型),而且pytorch将FC层与其他层单独分开了,使得调用非FC层方便,直接model_n=model.features就是非FC层;那么再构建HED或者U_Net,只需要切片model_n即可。然后forward。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值