PaddlePaddle是百度开源的深度学习框架,类似的深度学习框架还有谷歌的Tensorflow、Facebook的Pytorch等。之前学校的老师就推荐过使用PaddlePaddle来进行论文相关的内容或者做项目,不过一直没有找到合适的时间和机会来学习。正好看到深度学习7日入门-CV疫情特辑这门课程,所以就报名参加了学习。博客将按照每天的课程为顺序,简单介绍当天的课程内容,并保存当日作业的代码与效果图,方便日后使用PaddlePaddle时查看,也方便其他人作为参考进行学习。
第一天主要学习了传统图像识别的方法,并初步介绍了人工智能的内容。
作业:爬取丁香园的疫情数据并画饼图
爬取数据:
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")
)
第二天的主要内容是深度学习的三个主要步骤。
作业: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
主要讲解了卷积神经网络原理的相关部分内容
作业:1、补全代码并成功运行 2、调参数、优化,提高测试集准确率
经典卷积神经网络部分的讲解,今天的讲解很详细,有时间的小伙伴一定多看看回放,收获巨大。
作业:根据课上所学内容,在 VGGNet类中补全代码,构造VGG网络,保证程序跑通。在VGG构造成功的基础上,可尝试构造其他网络。 ✓调优 思考并动手进行调优,以在验证集上的准确率为评价指标,验证集上准确率越高,得分越高!
文中部分代码参考了授课老师直接给的代码,还有部分为参考Ai studio平台其他同学发布的代码的部分,在此对这些代码的提供者表示感谢,如有侵权,可联系本人删除相关代码,谢谢。