Paddle7日初体验

2020-04-10  本文已影响0人  LALALALALA_8260

写在开头

我已经不是第一次接触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

上一篇下一篇

猜你喜欢

热点阅读