飞桨学习笔记

飞桨(PaddlePaddle)学习笔记

  • PaddlePaddle
  • Day01 新冠疫情可视化
  • Day02-手势识别
  • Day03-车牌识别
  • Day4 口罩分类

PaddlePaddle

PaddlePaddle是百度开源的深度学习框架,类似的深度学习框架还有谷歌的Tensorflow、Facebook的Pytorch等。之前学校的老师就推荐过使用PaddlePaddle来进行论文相关的内容或者做项目,不过一直没有找到合适的时间和机会来学习。正好看到深度学习7日入门-CV疫情特辑这门课程,所以就报名参加了学习。博客将按照每天的课程为顺序,简单介绍当天的课程内容,并保存当日作业的代码与效果图,方便日后使用PaddlePaddle时查看,也方便其他人作为参考进行学习。

Day01 新冠疫情可视化

第一天主要学习了传统图像识别的方法,并初步介绍了人工智能的内容。
飞桨学习笔记_第1张图片
作业:爬取丁香园的疫情数据并画饼图
爬取数据:

import json
import re
import requests
import datetime

today = datetime.date.today().strftime('%Y%m%d')   #20200315

def crawl_dxy_data():
    """
    爬取丁香园实时统计数据,保存到data目录下,以当前日期作为文件名,存JSON文件
    """
    response = requests.get('https://ncov.dxy.cn/ncovh5/view/pneumonia') #request.get()用于请求目标网站
    print(response.status_code)                                          # 打印状态码


    try:
        url_text = response.content.decode()                             #更推荐使用response.content.deocde()的方式获取响应的html页面
        #print(url_text)
        url_content = re.search(r'window.getAreaStat = (.*?)}]}catch',   #re.search():扫描字符串以查找正则表达式模式产生匹配项的第一个位置 ,然后返回相应的match对象。
                                url_text, re.S)                          #在字符串a中,包含换行符\n,在这种情况下:如果不使用re.S参数,则只在每一行内进行匹配,如果一行没有,就换下一行重新开始;
                                                                         #而使用re.S参数以后,正则表达式会将这个字符串作为一个整体,在整体中进行匹配。
        texts = url_content.group()                                      #获取匹配正则表达式的整体结果
        content = texts.replace('window.getAreaStat = ', '').replace('}catch', '') #去除多余的字符
        json_data = json.loads(content)                                         
        with open('data/' + today + '.json', 'w', encoding='UTF-8') as f:
            json.dump(json_data, f, ensure_ascii=False)
    except:
        print('' % response.status_code)


def crawl_statistics_data():
    """
    获取各个省份历史统计数据,保存到data目录下,存JSON文件
    """
    with open('data/'+ today + '.json', 'r', encoding='UTF-8') as file:
        json_array = json.loads(file.read())

    statistics_data = {}
    for province in json_array:
        response = requests.get(province['statisticsData'])
        try:
            statistics_data[province['provinceShortName']] = json.loads(response.content.decode())['data']
        except:
            print(' for url: [%s]' % (response.status_code, province['statisticsData']))

    with open("data/statistics_data.json", "w", encoding='UTF-8') as f:
        json.dump(statistics_data, f, ensure_ascii=False)


if __name__ == '__main__':
    crawl_dxy_data()
    crawl_statistics_data()

安装画饼图用的第三方库pyecharts

'''
安装第三方库pyecharts ,如果下载时出现断线和速度过慢的问题导致下载失败,可以尝试使用清华镜像
'''
#!pip install pyecharts
!pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyecharts

利用爬取到的数据画饼图


import json
import datetime
from pyecharts.charts import Map
from pyecharts import options as opts
from pyecharts.charts import Pie

# 读原始数据文件
today = datetime.date.today().strftime('%Y%m%d')   #20200315
print(today)
datafile = '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(init_opts=opts.InitOpts(height='550px'))
    .add(
        "",
        [list(z) for z in zip(labels, counts)],
        center=["50%", "63%"],
        radius = ['0','50%']
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="全国确诊数据饼图-琛",subtitle='数据来源:丁香园'),
        legend_opts=opts.LegendOpts(pos_left="85%"),
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    .render("pie.html")
)

最终效果图:
飞桨学习笔记_第2张图片

Day02-手势识别

第二天的主要内容是深度学习的三个主要步骤。
飞桨学习笔记_第3张图片
作业:1、补全手势识别代码并成功运行 2、调参数、优化,提高测试集准备率

class myNet(fluid.dygraph.Layer):
    def __init__(self,training=True):
        super(myNet,self).__init__()
        self.conv1 = Conv2D(num_channels=3,num_filters=32,filter_size=3,act='relu')
        self.pool1 = Pool2D(pool_size=2,pool_stride=2,pool_type='max')
        self.conv2 = Conv2D(num_channels=32, num_filters=32, filter_size=3, act='relu')
        self.pool2 = Pool2D(pool_size=2, pool_stride=2,pool_type='max')
        self.conv3 = Conv2D(num_channels=32, num_filters=64, filter_size=3, act='relu')
        self.pool3 = Pool2D(pool_size=2, pool_stride=2,pool_type='max')
        self.fc1 = Linear(input_dim=6400,output_dim=8192,act='relu')
        self.drop_ratiol = 0.5 if training else 0.0
        self.fc2 = Linear(input_dim=8192,output_dim=10)

    def forward(self,input1):
        conv1 = self.conv1(input1)
        # print(conv1.shape)
        pool1 = self.pool1(conv1)
        #
        conv2 = self.conv2(pool1)
        pool2 = self.pool2(conv2)
        #
        conv3 = self.conv3(pool2)
        pool3 = self.pool3(conv3)

        rs_1 = fluid.layers.reshape(pool3,[pool3.shape[0],-1])
        fc1 = self.fc1(rs_1)
        drop1 = fluid.layers.dropout(fc1,self.drop_ratiol)
        y = self.fc2(drop1)
        return y

效果:
飞桨学习笔记_第4张图片

Day03-车牌识别

主要讲解了卷积神经网络原理的相关部分内容
作业:1、补全代码并成功运行 2、调参数、优化,提高测试集准确率

飞桨学习笔记_第5张图片

Day4 口罩分类

经典卷积神经网络部分的讲解,今天的讲解很详细,有时间的小伙伴一定多看看回放,收获巨大。
作业:根据课上所学内容,在 VGGNet类中补全代码,构造VGG网络,保证程序跑通。在VGG构造成功的基础上,可尝试构造其他网络。 ✓调优 思考并动手进行调优,以在验证集上的准确率为评价指标,验证集上准确率越高,得分越高!

飞桨学习笔记_第6张图片
文中部分代码参考了授课老师直接给的代码,还有部分为参考Ai studio平台其他同学发布的代码的部分,在此对这些代码的提供者表示感谢,如有侵权,可联系本人删除相关代码,谢谢。

你可能感兴趣的:(飞桨学习笔记)