一、一些代码中的问题
- 将一个列表 转化为空格隔开的字符串
第一种方法:test=['1','2','23']
print(' '.join(test))
输出结果为:1 2 23
第二种方法:test=['1','2','23']
for x in test:
print(x,end=" ")
输出结果为:1 2 23
文件读写(去查菜鸟教程)
Python3 File(文件) 方法
python:write()/writelines()的区别
python:read()/readline()/readlines()区别注意文件编码问题:utf-8和gbk
深度学习中常用函数
- enumerate() 函数
- Numpy中常用的保存与读取数据的方法
- python列表操作:extend()和append()
二、pytorch中一些常见操作
1、维度的变化
- 减少维度
- out=out[:,-1,:]
lstm的输出形状(batch,seq_len, hidden_size*2)
因为要接fc,所以使用out=out[:,-1,:],将seq_len这个维度去掉了。 - squeeze()
squeeze(arg)表示第arg维的维度值为1,则去掉该维度。否则tensor不变。
- 增加维度
unsqueeze():
unsqueeze(arg)与squeeze(arg)作用相反,表示在第arg维增加一个维度值为1的维度 -
检验模型是否正确模型
用下面这三个逐步来检查模型前向传导的中间结果,并记录结果的维度和代表含义
print("out:")
print(out)
print(out.size()) # 获取向量的维数和对应的维度
time.sleep(1000) # 休眠以便观察
一些情况下也可用:print(x.dtype) #获取张量里的数据类型
- 参考
pytorch的英文API文档
pytorch常用张量维度操作
pytorch中tensor的squeeze()和unsqueeze()
pytorch中降维的骚操作:out = out[:,-1,:]
2、数据要求和转换
- 对于数据的要求
- 训练的批量样本数据输入值需要是long值的Tensor数据,而不是int值的Tensor数据
- 在训练网络的过程中由于类型的冲突导致这种错误,主要是模型内部参数和输入类型不一致所导致的。主要有两个部分需要注意到:1.自己定义的变量要设置为一种数据类型;2.网络内部的变量类型也要统一。
- 我自己碰到的:计算cosine_similarity函数的两个输入参数必须是同一类,不然会报错。
- 参考:
三、一些关于深度学习的一些知识
1、中英文文本预处理
- 英文采用nltk分词
大写字母转换成小写字母 --> 去除标点符号 --> 分词 --> 去除停用词 --> 提取词干(在英文中有很多变形,比如cleaning/cleans/cleaned等等,这些和clean都是一个意思,这里我们要对其提取词干) - 中文采用jieba分词
去除非中文部分(如标点符号) --> 中文分词 --> 去除停用词 - 代码实现参考:
python :中英文文本预处理
NLP入门-- 文本预处理Pre-processing - 分词工具
- 中文分词工具:
下面排名根据 GitHub 上的 star 数排名:
Hanlp Stanford分词 ansj分词器 哈工大LTP KCWS分词器 jieba(采用) IK 清华大学THULAC ICTCLAS - 英文分词工具:
Keras Spacy Gensim NLTK(采用)
- 中文分词工具:
2、得到预训练词向量(跨语言词向量)
看论文附的代码
3、如何使用预训练词向量
- 实现过程和原理
- 实现过程:先是进行一个对象初始化,然后加载预训练词向量,然后把预训练词向量copy进去。
- 原理:我们知道预训练词向量肯定也是一个词向量矩阵对象,这里是通过单词获取词向量权重。我们要做的就是做到类似pytorch自带的那种权重初始化,得到一个单词-索引-权重对应的关系。预训练对象得到的是单词-权重。我们要得到的是索引-权重。
- 参考
- 文本分类算法中的相关实现
- tensorflow如何正确加载预训练词向量
- pytorch中如何使用预训练词向量
4、数据集和迭代器构建
- Iteration, Batch, Epoch
深度学习 | 三个概念:Epoch, Batch, Iteration
训练集,验证集和测试集的作用
见西瓜书对于文本预处理、数据集的构建、迭代器
建议可以尝试torchtext,一步到位
torchtext入门教程,轻松玩转文本数据处理
5、模型构建
pytorch的英文API文档