美文网首页
Paddle7日初体验

Paddle7日初体验

作者: LALALALALA_8260 | 来源:发表于2020-04-10 14:26 被阅读0次

    写在开头

    我已经不是第一次接触paddle了,之前的也有零碎的听过一些paddle的课程。但是基本都摸鱼。一方面是自己忙(lan),另一方面确实事情比较多哈。但这次假期真的放了好久的说,本人自2017年来对深度学习颇感兴趣,但并未有比较系统的入门DL,大部分时间都在调参。我也觉得工业界和学术界是有一定的鸿沟的。深度学习的框架很多:Paddle,Tensorflow,Mxnet,PyTorch,Chainer等。讲真贪多嚼不烂,原理就是原理,这个是不会变的,但是调参的经验仍需要大量的实际。日后,应该是Auto 的天下,但是调参侠的末日可能没有来得那么早。

    给新手的一点建议:

    1.尽量使用轻量级的工具编写代码

    2.学会使用IDE集成开发环境调试代码(Pycharm 等  宇宙无敌第一IDE VS也是可以的)

    3.善用搜索引擎(但是要多问个为什么要这样做)

    4.学会查阅文档(API)

    5.不要死磕一个问题(超过6个小时解决不了,可以去求助别人)

    6.在学习+实践中慢慢补充自己的知识面

    Paddle作业和人流密度比赛 调参经验

    1.选择合适的学习率 0.001是一个不错的选择

    2.epoch设置成合适的大小,大了容易过拟合导致模型退化,小了模型不收敛

    3.batch_size 越大越好(单卡),跨卡需要BN同步。好朋友告诉你,不要使用超过32的batch_size

    4.模型的选择,不同的任务有不同的效果

    5.里面大部分,我使用了VGG或者类VGG的结构

    6.人流密度的使用了  论文里的 STEM结构,并加深了通道数。用于保持底层的特征纹理信息

    7.模型集成的方法会提高整体的效果,受时间限制,还要改论文。所以人流密度只提交了5次

    我把作业的基本思路放在下面的文件了,使用的时候留意一下python缩进哈~

    Day1 新冠疫情可视化

    ############################# 饼图绘制代码 ############################################

    import json

    import datetime

    from pyecharts.charts import Map,Pie

    from pyecharts import options as opts# 读原始数据文件

    today = datetime.date.today().strftime('%Y%m%d') #20200315datafile = 'data/'+ today + '.json'with open(datafile, 'r', encoding='UTF-8') as file:

        json_array = json.loads(file.read())# 分析全国实时确诊数据:'confirmedCount'字段china_data = []for province in json_array:

        china_data.append((province['provinceShortName'], province['confirmedCount']))

    china_data = sorted(china_data, key=lambda x: x[1], reverse=True)                #reverse=True,表示降序,反之升序print(china_data)

    labels = [data[0] for data in china_data]

    counts = [data[1] for data in china_data]

    c = (

        Pie()  # 生成饼图实例

        .add("", [list(z) for z in zip(labels,counts)])  # 填入数据对

        .set_global_opts(title_opts=opts.TitleOpts(title="新冠饼图"),legend_opts=opts.LegendOpts(is_show=False)) #设置标题,关闭label的名称显示

        .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))

        .render("data/饼图.html")

    )

    Day2 手势识别

    #DNN网络

    class MyDNN(fluid.dygraph.Layer):   

        def__init__(self):

            super(MyDNN,self).__init__()

            self.hidden1 = Linear(100,128,act='relu')

            self.hidden2 =Linear(128,256,act='relu')

            self.hidden3 = Linear(256,512,act='relu')

            self.hidden4 = Linear(512,1024,act='relu')

            self.hidden5 = Linear(3*100*1024,10,act='softmax')

        defforward(self,input):       

            x=self.hidden1(input)

            x=self.hidden2(x) 

            x=self.hidden3(x) 

            #x=fluid.layers.dropout(x,dropout_prob=0.2)        x=self.hidden4(x)

            x=fluid.layers.dropout(x,dropout_prob=0.2)

            x=paddle.fluid.layers.reshape(x,shape=[-1,3*100*1024])

            x=fluid.layers.dropout(x,dropout_prob=0.2)

            y=self.hidden5(x)

            return y

    DNN  Val acc --0.80803573

    #定义CNN网络   类似  VGG的一个CNN

    class MyDNN(fluid.dygraph.Layer):

            def __init__(self):

                super(MyDNN,self).__init__()

            self.hidden1 = Conv2D(3,64,3,padding=1,act='relu')

            self.hidden2 = Conv2D(64,128,3,padding=1,act='relu')

            self.hidden3 = Conv2D(128,256,3,padding=1,act='relu')

            self.hidden4 = Conv2D(256,256,3,stride=2,padding=1,act='relu')

            self.hidden5 = Conv2D(256,512,3,stride=1,padding=1,act='relu')

            self.hidden6 = Conv2D(512,512,3,stride=2,padding=1,act='relu')

            self.hidden7 = Conv2D(512,512,3,stride=1,padding=1,act='relu')

            self.hidden8 = Conv2D(512,512,3,stride=2,padding=1,act='relu')

            self.hidden9 = Linear(512*13*13,4096,act='relu')

            self.hidden10 = Linear(4096,1024,act='relu')

            self.hidden11 = Linear(1024,10,act='softmax')

        defforward(self,input):       

            x=self.hidden1(input)

            x=self.hidden2(x)

            x=self.hidden3(x) 

            x=self.hidden4(x)

            x=self.hidden5(x)

            x=self.hidden6(x)

            x=self.hidden7(x)

            x=self.hidden8(x)

            x=paddle.fluid.layers.reshape(x,shape=[-1,512*13*13])

            x=self.hidden9(x)

            x=self.hidden10(x)

            y=self.hidden11(x)

            return y

    CNN  Val acc --0.9285714

    Day3 车牌识别

    Batch_size=128 

    LR=0.001

    num_epoch=200

    #定义网络

    class MyVGG(fluid.dygraph.Layer):

         def__init__(self): super(MyVGG,self).__init__()

            self.hidden1 = Conv2D(1,64,3,padding=1,act='relu')

            self.hidden2 = Conv2D(64,128,3,padding=1,act='relu')

            self.hidden3 = Conv2D(128,256,3,padding=1,act='relu')

            self.hidden4 = Conv2D(256,256,3,stride=2,padding=1,act='relu')

            self.hidden5 = Conv2D(256,512,3,stride=1,padding=1,act='relu')

            self.hidden6 = Conv2D(512,512,3,stride=2,padding=1,act='relu')

            self.hidden7 = Conv2D(512,512,3,stride=1,padding=1,act='relu')

            self.hidden8 = Conv2D(512,512,3,stride=2,padding=1,act='relu')

            self.hidden9 = Linear(512*3*3,4096,act='relu')

            self.hidden10 = Linear(4096,1024,act='relu')

            self.hidden11 = Linear(1024,65,act='softmax')

        def forward(self,input):       

            x=self.hidden1(input)

            x=self.hidden2(x)

            x=self.hidden3(x) 

            x=self.hidden4(x)

            x=self.hidden5(x)

            x=self.hidden6(x)

            x=self.hidden7(x)

            x=self.hidden8(x)

            x=paddle.fluid.layers.reshape(x,shape=[-1,512*3*3])

            x=self.hidden9(x)

            x=self.hidden10(x)

            y=self.hidden11(x)

            return y

    Day4 口罩识别

    classVGGNet(fluid.dygraph.Layer): '''

        VGG网络

        '''    def__init__(self):        super(VGGNet, self).__init__()

            self.hidden1 = ConvPool(3,64,3,2,2,2,conv_padding=1,act='relu')

            self.hidden2 = ConvPool(64,128,3,2,2,2,conv_padding=1,act='relu')

            self.hidden3 = ConvPool(128,256,3,2,2,3,conv_padding=1,act='relu')

            self.hidden4 = ConvPool(256,512,3,2,2,3,conv_padding=1,act='relu')

            self.hidden5 = ConvPool(512,512,3,2,2,3,conv_padding=1,act='relu')

            self.hidden6 = fluid.Linear(512*7*7,4096,act='relu')

            self.hidden7 = fluid.Linear(4096,4096,act='relu')

            self.hidden8 = fluid.Linear(4096,2,act='softmax')

        defforward(self, inputs, label=None):        """前向计算"""       

            x=self.hidden1(inputs)

            # print(x.shape)       

            x=self.hidden2(x)

            # print(x.shape) 

             x=self.hidden3(x)

            # print(x.shape)         

            x=self.hidden4(x)

            # print(x.shape)

            x=self.hidden5(x)

            # print(x.shape)   

            x=paddle.fluid.layers.reshape(x,shape=[-1,512*7*7])

            x=fluid.layers.dropout(x,dropout_prob=0.5)

            x=self.hidden6(x)

            x=fluid.layers.dropout(x,dropout_prob=0.5)

            x=self.hidden7(x)

            x=fluid.layers.dropout(x,dropout_prob=0.5)

            y=self.hidden8(x)

            acc=fluid.layers.accuracy(y,label)#计算精度

            return y,acc

    Day5 

    Day6 paddle slim 对slim不是很熟悉。所以这里放以后再探讨啦

    Day7 人流密度检测(Baseline 强化版+未调参 0.46)

    当前提交,实时排名:18

    lr:0.001

    epoch:100

    batchsize:12 塞满卡为宜

    classCNN(fluid.dygraph.Layer): 

    def__init__(self):       

            super(CNN, self).__init__()

            self.conv01_1 = fluid.dygraph.Conv2D(num_channels=3, num_filters=128,filter_size=3,padding=1,act="relu")

            # STEM       

            self.conv01_2 = fluid.dygraph.Conv2D(num_channels=128, num_filters=128,filter_size=3,padding=1,act="relu")

            self.conv01_3 = fluid.dygraph.Conv2D(num_channels=128, num_filters=128,filter_size=3,padding=1,act="relu")

            self.pool01=fluid.dygraph.Pool2D(pool_size=2,pool_type='max',pool_stride=2)

            self.conv02_1 = fluid.dygraph.Conv2D(num_channels=128, num_filters=128,filter_size=3, padding=1,act="relu")

            self.conv02_2 = fluid.dygraph.Conv2D(num_channels=128, num_filters=128,filter_size=3, padding=1,act="relu")

            self.pool02=fluid.dygraph.Pool2D(pool_size=2,pool_type='max',pool_stride=2)

            self.conv03_1 = fluid.dygraph.Conv2D(num_channels=128, num_filters=256,filter_size=3, padding=1,act="relu")

            self.conv03_2 = fluid.dygraph.Conv2D(num_channels=256, num_filters=256,filter_size=3, padding=1,act="relu")

            self.pool03=fluid.dygraph.Pool2D(pool_size=2,pool_type='max',pool_stride=2)

            self.conv04_1 = fluid.dygraph.Conv2D(num_channels=256, num_filters=512,filter_size=3, padding=1,act="relu")

            self.conv05_1 = fluid.dygraph.Conv2D(num_channels=512, num_filters=512,filter_size=3,padding=1, act="relu")

            self.conv06 = fluid.dygraph.Conv2D(num_channels=512,num_filters=256,filter_size=3,padding=1,act='relu')

            self.conv07 = fluid.dygraph.Conv2D(num_channels=256,num_filters=128,filter_size=3,padding=1,act='relu')

            self.conv08 = fluid.dygraph.Conv2D(num_channels=128,num_filters=64,filter_size=3,padding=1,act='relu')

            self.conv09 = fluid.dygraph.Conv2D(num_channels=64,num_filters=1,filter_size=1,padding=0,act=None)

        defforward(self, inputs, label=None):        """前向计算"""       

            out = self.conv01_1(inputs)

            out = self.conv01_2(out)

            out = self.conv01_3(out)

            out = self.pool01(out)

            out = self.conv02_1(out)

            out = self.conv02_2(out)

            out = self.pool02(out)

            out = self.conv03_1(out)

            out = self.conv03_2(out)     

            out = self.pool03(out)

            out = self.conv04_1(out)   

            out = self.conv05_1(out)

            out = self.conv06(out)

            out = self.conv07(out)

            out = self.conv08(out)

            out = self.conv09(out)

            return out

    相关文章

      网友评论

          本文标题:Paddle7日初体验

          本文链接:https://www.haomeiwen.com/subject/vvcrmhtx.html