python学习—第一步—Python小白逆袭大神(第四天)

目录

  • 深度学习难点
  • PaddleHub全景
  • PaddleHub体验
    • 1、情感分析
    • 2、口罩检测
  • 大作业

深度学习难点

计算机视觉领域:物体的尺寸变化范围大、摆放物体角度、姿态不定,而且可以出现在图片的任何地方,物体也可以是多个类别。

自然语言处理领域:语义推理、语义关联(文字的顺序会有不同的语义)、语义表示(分词歧义、一词多义)

实现层面:大数据(小样本局限)、大模型(模型越复杂,门槛越高)、大算力(硬件资源要求高)

迁移学习:A任务有一个模型,B任务与A类似,可以使用小数据在已有模型上微调

PaddleHub让我们直接从模型这一步开始去使用

PaddleHub全景

PaddleHub是为了解决对于深度学习模型的需求开发的工具,基于飞桨领先的核心框架,精选效果优秀的算法,提供了百亿级大数据训练的预训练模型,方便用户不用花费大量精力从头开始训练一个模型。

官网:https://www.paddlepaddle.org.cn/hub

优势:深度学习的流程大致分为明确需求、数据优化、模型选型、调参训练、预测部署几个步骤。

PaddleHub让我们有一个便捷的方式,1模型即软件、使用Fine-tune API实现2迁移学习,AutoDLFinetuner实现一键自动超参搜索,3端到端部署,HubServing:一键模型服务化部署。

直接使用PaddleHub的模型。

PaddleHub体验

1、情感分析

Sentiment Classification(Senta),针对带有主观描述的中文文本,可自动判断该文本的情感极性类别并给出相应的置信度,能够帮助企业理解用户消费习惯、分析热点话题和危机舆情监控,为企业提供有利的决策支持。

Linux

!hub install senta_lstm==1.1.0#模型安装
#使用
!hub run senta_lstm --input_text "人工智能课程很有趣"
执行结果:
[{'text': '人工智能课程很有趣', 'sentiment_label': 1, 'sentiment_key': 'positive', 'positive_probs': 0.9572, 'negative_probs': 0.0428}]
情感标签是1,积极的

2、口罩检测

PyramidBox-Lite是基于2018年百度发表于计算机视觉顶级会议ECCV 2018的论文PyramidBox而研发的轻量级模型,模型基于主干网络FaceBoxes,对于光照、口罩遮挡、表情变化、尺度变化等常见问题具有很强的鲁棒性。该PaddleHub Module基于WIDER FACE数据集和百度自采人脸数据集进行训练,支持预测,可用于检测人脸是否佩戴口罩。

在python使用:

import paddlehub as hub
import cv2
module = hub.Module(name="pyramidbox_lite_mobile_mask")
test_img_path = "data/data31681/test.jpeg"
input_dict = {"data": [cv2.imread(test_img_path)]}#输入是json格式
results = module.face_detection(data=input_dict)
print(results)
结果:
[{'data': {'label': 'MASK', 'left': 678.9846324920654, 'right': 893.2966804504395, 'top': 241.9092297554016, 'bottom': 487.231333732605, 'confidence': 0.9711812}, 'id': 1}]
label标签为mask,戴了口罩

但是我觉得也有不太好的地方,所有的都基于已经训练好的模型,一旦模型不用了或者出现问题,就无法使用。

大作业

爬取青春有你2评论数据,进行词频统计并生成词云。

1、中文分词需要jieba,词云绘制需要wordcloud

!pip install jieba
!pip install wordcloud

2、库的导入

from __future__ import print_function
import requests
import json
import re #正则匹配
import time #时间处理模块
import jieba #中文分词
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager
from PIL import Image
from wordcloud import WordCloud  #绘制词云模块

3、数据爬取部分

num = 1000
lastId = '0' #lastId 是接口分页id
arr = [] #arr是爬取的所有评论存放的数组
with open('aqy.txt', 'a', encoding='utf-8') as f: #写文件是追加写的
    for i in range(num):
        lastId = saveMovieInfoToFile(lastId,arr)
        time.sleep(0.5)#频繁访问爱奇艺接口,偶尔出现接口连接报错情况,睡眠0.5秒,增加每次访问间隔时间
        for item in arr:
            Item = clear_special_char(item)
            if Item.strip()!='':
                try:
                    f.write(Item+'\n')
                except  Exception as e:
                    print("含有特殊字符")
                    print('共爬取评论:',len(arr))

涉及的函数:

(1)请求页面

def getMovieinfo(url):
    session = requests.Session()
    headers = {
        "User-Agent": "Mozilla/5.0",
        "Accept": "application/json",
        "Referer": "http://m.iqiyi.com/v_19rqriflzg.html",
        "Origin": "http://m.iqiyi.com",
        "Host": "sns-comment.iqiyi.com",
        "Connection": "keep-alive",
        "Accept-Language": "en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7,zh-TW;q=0.6",
        "Accept-Encoding": "gzip, deflate"
    }
    response = session.get(url, headers=headers)
    if response.status_code == 200:
        return response.text
    return None

(2)爬取数据,解析数据获取评论

def saveMovieInfoToFile(lastId,arr):
    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)
    responseTxt = getMovieinfo(url)
    responseJson = json.loads(responseTxt)
    comments = responseJson['data']['comments']
    for val in comments:
        # print(val.keys())
        if 'content' in val.keys():
            # print(val['content'])
            arr.append(val['content'])
        lastId = str(val['id'])
    return lastId

(3)去除特殊字符

def clear_special_char(content):
    s = re.sub(r"| |\t|\r", "", content)
    s = re.sub(r"\n", " ", s)
    s = re.sub('[^\u4e00-\u9fa5^a-z^A-Z^0-9]', '', s)
    return s

4、数据处理部分

counts = {}
f = open('aqy.txt', 'r',encoding='utf-8')
for line in f:
    words = fenci(line)
    stopwords = stopwordslist('cn_stopwords.txt')
    movestopwords(words,stopwords,counts)
def fenci(text):
    jieba.load_userdict('add_words.txt')
    seg = jieba.lcut(text, cut_all=False)
    return seg
def stopwordslist(file_path):
    stopwords = [line.strip() for line in open(file_path, encoding='UTF-8').readlines()]
    return stopwords
def movestopwords(sentence,stopwords,counts):
    out = []
    for word in sentence:
        if word not in stopwords:
            if len(word) != 1:
                counts[word] = counts.get(word,0) + 1
    return None

5、图像绘制部分

drawcounts(counts,10) #绘制top10 高频词
drawcloud(counts) #绘制词云
f.close()
def drawcounts(counts,num):
    x_aixs = []
    y_aixs = []
    c_order = sorted(counts.items(), key=lambda x:x[1],reverse=True)
    for c in c_order[:num]:
        x_aixs.append(c[0])
        y_aixs.append(c[1])
    matplotlib.rcParams['font.sans-serif'] = ['simhei']
    matplotlib.rcParams['axes.unicode_minus'] = False#也不知为啥没什么用
    plt.bar(x_aixs, y_aixs)
    plt.title('词频统计结果')
    plt.show()
def drawcloud(word_f):
    #加载背景图片
    cloud_mask = np.array(Image.open('cluod.png'))
    #忽略显示的词
    st=set(["东西","这是"])
    #生成wordcloud对象
    wc = WordCloud(background_color='white', 
    mask=cloud_mask,
    max_words=150,
    font_path='simhei.ttf',
    min_font_size=10,
    max_font_size=100, 
    width=400, 
    relative_scaling=0.3,
    stopwords=st)
    wc.fit_words(word_f)
    wc.to_file('pic.png')

你可能感兴趣的:(操作栏,python,学习,深度学习)