【飞桨PaddlePaddle学习心得】day5(学习过程中遇到的坑的汇总)

Gloria ·
更新时间:2024-11-13
· 649 次阅读

坑1 没有paddlehub里面的模型文件

在这里插入图片描述

原因: 没有下载paddlehub 没有import paddlehub 没有使用hub命令下载senta_bilstm模型 模型下载命令:!hub install senta_bilstml==1.0.0 可以引伸出来 使用paddlehub,所有找不到模型额问题,都是paddle没有加载进来 坑2 matplotlib显示中文的问题

在这里插入图片描述

原因 1.没有安装中文字体 2.安装了中文字体,但是没有复制到matplotlib下面 3.设置matplotlib.rcParams 4.for mac:安装好以后需要使用rm -r ~/.matplotlib 删除~/.matplotlib文件 解决方法 #下载中文字体 wget https://mydueros.cdn.bcebos.com/font/simhei.ttf #在操作系统中创建字体目录fonts(可能已经有 mkdir .fonts # 复制字体文件到该路径 cp simhei.ttf .fonts/ #复制字体到当前使用的conda环境中的matplotlib下的指定路径 cp simhei.ttf /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/mpl-data/fonts/ttf/ # Linux系统默认字体文件路径 ls /usr/share/fonts/ # 查看系统可用的ttf格式中文字体 fc-list :lang=zh | grep ".ttf" # 设置显示中文 matplotlib.rcParams['font.family'] = ['SimHei'] # 解决负号'-'显示为方块的问题 matplotlib.rcParams['axes.unicode_minus'] = False 最终效果:

在这里插入图片描述

坑3这是一个系列性的问题(day4问题 可能的报错

这一系列的问题都出现在使用paddlehub进行Finetune的时候 也就是在运行run_states = task.finetune_and_eval()这行代码的时候。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

其实可以很容易知道,我们不能对模型做什么改动,只有在运行这一行代码的时候报错了,那么我们唯一和模型进行交互的是什么呢?是我们的数据集,所有肯定是我们的额数据集出现了问题呀。
归根到底,出现问题还是没有理解paddlehua的自定义数据集的规定。

from 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()

从这个DemoDataset可以看出,dataset_dir设定了所有的路径的root节点,相当于下面super里面的所有路径前面都要加入dataset/这个前缀。详细的要求可以查看适配自定义数据
然后就是train_list.txt、validate_list.txt和test_list.txt里面的内容了。
在这里插入图片描述

以上图(train_list.txt)里面的内容为例.分为两列:
第一列是训练数据的路径,这里也是最容易出错的,这里的路径默认前面是有了一个dataset的,也就是我们在前面代码里面设置的self.dataset_dir = “dataset”,很多问题都是出现在这里的,因为这里写错了,那么模型就加载不到图片,肯定会报错呀。
然后就是第二列的数据,中间以空格分割,第二列的数据与label_list.txt里面的内容形成索引。
在这里插入图片描述
以上是label_list.txt里面的内容,paddle在查询的时候,训练和测试文件的时候,会自动根据索引去label_list.txt中匹配label。

坑4在python中使用paddlehub的情感分析

这个的坑在于,传入的数据必须是个字典,而且字典的key要为text,value必须要是个list。

senta = hub.Module(name='senta_bilstm', version='1.0.0') input_dict = {'text':['你好呀!','ennenene']} res = senta.sentiment_classify(data=input_dict) 坑5 大作业爬虫

本次大作业第一步就是爬取评论的数据,这个爬虫相对来说不要太容易了,唯一的槽点就是调用的接口找起来有点麻烦,在这里给出,结构的url如下,对于参数来说,只要注意content_id和last_id就行了,content_id代表的是那一步电影/电视(in iqiyi)。然后last_id的话主要是达到一个翻页的作业,只需要把本次查询到的最后一个评论的用户的id赋值给last_id就可以实现查询下一页的评论了。

接口链接和参数如下

意思的话从参数名上面大部分就能看明白了
在这里插入图片描述

坑6 json.loads 和 json.dump

这两个函数会由于基本功的问题,容易搞混淆或者记不起怎么用。
当我们通过接口爬取到数据后,返回的通常都是json类型的字符串数据。这个时候我们就需要上面的两个函数来帮忙了,那么到底这两个函数怎么用呢。
通俗的讲:

json.loads(str(data):将一个JSON编码的字符串转换回一个Python数据结构(通常为字典 json.dump(json_data): 将一个Python数据结构转换为JSON字符串,通常在写文件的时候使用。

所有本次大作业,先拿到的就是json类型的字符串,我们要拿到里面的comments的话就要先把它转换为dict类型的数据,然后再访问:

lastId = '' response = getComment(lastId) #getComment发送请求得到json类型的字符串 response = json.loads(response) #使用json.loads解析 comment_list = response['data']['comments'] #得到一次返回的所有comments的list lastId = comment_list[-1]['id'] #得到lastID 然后再次使用getComment(lastId) while len(comment_list) <1000: getComment(lastId) …… …… #当要持久化爬取到的json数据的时候 就要使用json.dump() with open('day5.json', 'w', encoding='UTF-8') as f: json.dump(comment_list, f, ensure_ascii=False)

2020.4.27 00:12 未完待续


作者:小诺~



paddlepaddle

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章