您的位置:首页 > 其它

百度飞桨PaddlePaddle7日打卡营学习心得

2020-05-08 04:17 746 查看

7天学习过程

在学校老师的推荐下,了解到百度的这个平台。因为想着尝试做这个领域的东西,就参加了这门适合小白的课程7天的打卡训练营,时间紧张而又内容充实。第一天主要针对小白们进行python基础知识的讲解,主要学习python的基础语法及各类常见用法;第二天讲解了网络爬虫的相关概念和基础知识;第三天讲解了python的数据分析与四个常用的库;第四天讲解了paddleHub飞浆的用法及相关内容;第五天主要是EasyDL的讲解;第六及七天主要是最后的大作业和课程答疑时间。

day1 python基础知识

第一天的作业是输出一个99乘法表,和遍历文件夹并且输出文件路径,还是算比较简单的。主要就是各种库的使用以及代码格式的规范。对于新手的小白也是友好的,毕竟这是我这个小白也能很容易的做出来的吧。

import os
#待搜索的目录路径
path = "Day1-homework"
#待搜索的名称
filename = "2020"
#定义保存结果的数组
result = []
number=0
def findfiles(path):
li=os.listdir(path)
for p in li:
tempPathName=p
pathname=os.path.join(path,p)
if os.path.isdir(pathname):
findfiles(pathname)
elif os.path.isfile(pathname)
if(tempPathName.find(filename)!=-1):
global number
number=number+1
result=[]
result.append(number)
result.append(pathname)
if(len(result)>0):
print(result)
if __name__ == '__main__':
findfiles(path)

day2 爬虫的应用

爬虫的过程,就是模仿浏览器的行为,往目标站点发送请求,接收服务器的响应数据,提取需要的信息,并进行保存的过程。
Python为爬虫的实现提供了工具:requests模块、BeautifulSoup库。数据的爬取相对来说比较简单,重点主要在于对爬取后的响应数据的相关处理,这里推荐学习和了解下re等模块,有助于数据快速简单有效处理。
爬取百度百科中《青春有你2》中所有参赛选手信息,返回页面数据

def crawl_wiki_data():
"""
爬取百度百科中《青春有你2》中参赛选手信息,返回html
"""
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
url='https://baike.baidu.com/item/青春有你第二季'
try:
response = requests.get(url,headers=headers)
print(response.status_code)
#将一段文档传入BeautifulSoup的构造方法,就能得到一个文档的对象, 可以传入一段字符串
soup = BeautifulSoup(response.text,'lxml'
#返回的是class为table-view log-set-param的<table>所有标签
tables = soup.find_all('table',{'class':'table-view log-set-param'})
crawl_table_title = "参赛学员"
for table in  tables:
#对当前节点前面的标签和字符串进行查找
table_titles = table.find_previous('div').find_all('h3')
for title in table_titles:
if(crawl_table_title in title):
return table
except Exception as e:
print(e)

对爬取的页面数据进行解析,并保存为JSON文件

def parse_wiki_data(table_html):
'''
从百度百科返回的html中解析得到选手信息,以当前日期作为文件名,存JSON文件,保存到work目录下
'''
bs = BeautifulSoup(str(table_html),'lxml')
all_trs = bs.find_all('tr')
error_list = ['\'','\"']
stars = []
for tr in all_trs[1:]:
all_tds = tr.find_all('td')
star = {}
#姓名
star["name"]=all_tds[0].text
#个人百度百科链接
star["link"]= 'https://baike.baidu.com' + all_tds[0].find('a').get('href')
#籍贯
star["zone"]=all_tds[1].text
#星座
star["constellation"]=all_tds[2].text
#身高
star["height"]=all_tds[3].text
#体重
star["weight"]= all_tds[4].tex
#花语,去除掉花语中的单引号或双引号
flower_word = all_tds[5].text
for c in flower_word:
if  c in error_list:
flower_word=flower_word.replace(c,'')
star["flower_word"]=flower_word
if not all_tds[6].find('a') is  None:
star["company"]= all_tds[6].find('a').text
else:
star["company"]= all_tds[6].text
stars.append(star)
json_data = json.loads(str(stars).replace("\'","\""))
with open('work/' + today + '.json', 'w', encoding='UTF-8') as f:
json.dump(json_data, f, ensure_ascii=False)

爬取每个选手的百度百科图片,并进行保存

def crawl_pic_urls():
'''
爬取每个选手的百度百科图片,并保存
'''
with open('work/'+ today + '.json', 'r', encoding='UTF-8') as file:
json_array = json.loads(file.read())
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
for star in json_array:
name = star['name']
link = star['link']
response = requests.get(link,headers=headers)
bs=BeautifulSoup(response.text,'lxml')
pic_list_url=bs.select('.summary-pic a')[0].get('href')
pic_list_url='http://baike.baidu.com'+pic_list_url
pic_list_response = requests.get(pic_list_url,headers=headers)
bs=BeautifulSoup(pic_list_response.text,'lxml')
pic_list_html=bs.select('.pic-list img ')
pic_urls = []
for pic_html in pic_list_html:
pic_url=pic_html.get('src')
pic_urls.append(pic_url)

day3 python进阶语法和常用库的用法

主要是在于学习和掌握Numpy、pandas、Matplotlib、PIL等的使用。当天的作业是青春有你选手的体重统计图,内容上是很简单的,爬取一下选手的体重,再通过判断条件进行分组,最后画图。其中不好处理的可能就是matplotlib的中文显示功能了。首先需要确保有中文字体,是否字体存放在对应的位置。关于中文显示,要注意经常使用的俩句用来显示中文和负数的声明。

# 下载中文字体
!wget https://mydueros.cdn.bcebos.com/font/simhei.ttf
# 将字体文件复制到matplotlib字体路径
!cp simhei.ttf /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/mpl-data/fonts/ttf/
# 一般只需要将字体文件复制到系统字体目录下即可,但是在aistudio上该路径没有写权限,所以此方法不能用
# !cp simhei.ttf /usr/share/fonts/
# 创建系统字体文件路径
!mkdir .fonts
# 复制文件到该路径
!cp simhei.ttf .fonts/
!rm -rf .cache/matplotlib

day4 选手的识别

直播内容是介绍paddleHub以及如何使用。PaddleHub是一个深度学习模型开发工具。它基于飞桨领先的核心框架,精选效果优秀的算法,提供了百亿级大数据训练的预训练模型,方便用户不用花费大量精力从头开始训练一个模型。PaddleHub可以便捷地获取这些预训练模型,完成模型的管理和一键预测。配合使用Fine-tune API,可以基于大规模预训练模型快速完成迁移学习,让预训练模型能更好地服务于用户特定场景的应用。
代码框架老师都给出了,我们要做的比较简单,就是先从网上爬取要识别的选手的照片,然后建立测试集,验证集,训练集。当然照片越多质量越好,识别率会越高。当然也不是完全绝对的,如果训练轮数太多,也可能产生过拟合的情况。所以,这个时候,调参也显得和外重要了。
关于模型的使用

module = hub.Module(name="resnet_v2_50_imagenet")

数据集的处理

rom paddlehub.dataset.base_cv_dataset import BaseCVDataset

class DemoDataset(BaseCVDataset):
def __init__(self):
# 数据集存放位置

self.dataset_dir = "dataset"
super(DemoDataset, self).__init__(
base_path=self.dataset_dir,
train_list_file="train_list.txt",
validate_list_file="validate_list.txt",
test_list_file="test_list.txt",
label_list_file="label_list.txt",
)
dataset = DemoDataset()

day5 课程最后的大作业

首先不得不先说一句,这个课程真的是设计的环环相扣,每天学习的内容,在作业中都会得到体现。尤其是大作业,将前几天的课程内容都串联了起来,所有学习过的相关技术都得用到,requests,json,re,time ,jieba,wordcloud,numpy ,matplotlib,PIL ,paddlehub 等等。大作业要求取爬取任意一期青春有你正片的弹幕评论,然后进行分词,统计词频绘图,绘制词云,以及对弹幕进行情感分析。这次的大作业听起来挺简单,但是做的时候,就觉得里面的门道还不少。比如,爬取弹幕,里面设计到一个lastid的处置,有了这个的设计,才能爬取所有弹幕,否则只能爬取某一页的弹幕。,对爬取下来的弹幕还需要进行正则的处理。其次对于分词,还需自己预备一个常用词的文档,毕竟机器处理分词,并不会像人一样的智能,再加上有时候有的人的错别字,或者口头语,昵称是机器所不知道的,另外还有一些停用词的设计等等。
其中关于lastID的获取

def saveMovieInfoToFile(lastId,arr):
'''
解析json数据,获取评论
参数  lastId:最后一条评论ID  arr:存放文本的list
:return: 新的lastId
'''
url ="https://sns-comment.iqiyi.com/v3/comment/get_comments.action?agent_type=118&agent_version=9.11.5&business_type=17&content_id=15068699100&page=&page_size=10&types=time&last_id="
url += str(lastId)
responesTxt = getMovieinfo(url)
responesJson = json.loads(responesTxt)
comments = responesJson['data']['comments']
for val in comments:
if 'content' in val.keys():
print(val['content'])
arr.append(val['content'])
lastId = str(val['id'])
return lastId

使用正则进行特殊字符过滤

s = re.sub(r"</?(.+?)>|&nbsp;|\t|\r","",content)
s = re.sub(r"\n","",s)
s = re.sub(r"\*","\\*",s)
s = re.sub("[^\u4e00-\u9fa5^a-z^A-Z^0-9]","",s)
s = re.sub("[\001\002\003\004\005\006\007\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a]+","", s)
s = re.sub("[a-zA-Z]","",s)
s = re.sub("^d+(\.\d+)?$","",s)

最后想说的话

首先作为一个接触人工智能ai方面的小白来说,这门课程难度不大,对基础没什么特别打得要求(除了从来没有学过代码语法),课程设计的环环相扣,每天学到的新知识,都能在当天的作业里面得到体现,进行巩固和练习。尤其是做完这个大作业后,熟悉了一整套功能的设计实现,对我今后的学习会有一个好的铺垫。最后,感谢百度提供的这个宝贵的学习平台和机会。希望有机会在下次的打卡营相遇!

人工没有智能 原创文章 1获赞 0访问量 30 关注 私信
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: