《Python深度学习》中整数序列转二进制矩阵代码理解求助
解析:将整数序列编码为二进制矩阵的Python代码
嘿,我来帮你拆解这段IMDB数据预处理的代码,它本质上是做独热编码,把文本对应的整数序列转成神经网络能理解的数值格式~
函数基本说明
这段代码是《Python深度学习》里处理IMDB影评数据集的核心预处理函数,先看函数定义:
def vectorize_sequences(sequences, dimension=10000):
sequences:输入参数,是一个列表,每个元素是一条影评对应的单词索引序列(比如[1, 5, 23, 100],每个数字代表词汇表中某个单词的位置)dimension=10000:默认参数,代表我们只保留词汇表中出现频率最高的10000个单词,这是IMDB数据集的标准预处理设定
第一步:初始化全零矩阵
results = np.zeros((len(sequences), dimension))
这里用numpy创建了一个二维全零数组:
- 行数等于输入的影评条数(
len(sequences)),每条影评对应一行 - 列数等于词汇表大小10000,每个列对应一个单词
- 初始全为0,因为一开始我们假设每条影评不包含任何单词,后面再把出现过的单词位置改成1
第二步:遍历填充二进制编码
for i, sequence in enumerate(sequences): results[i, sequence] = 1. # 将results[i]的特定索引设为1
这部分是核心逻辑:
enumerate(sequences):同时拿到每条影评的索引i(对应矩阵的第i行)和这条影评的单词索引序列sequenceresults[i, sequence] = 1.:这是numpy的高级索引技巧——直接把第i行中,所有在sequence里出现过的索引位置的值设为1。比如如果sequence是[3, 18, 200],那就是把第i行的第3、18、200列设为1,意思是这条影评包含这三个索引对应的单词。
这么做的原因?
深度学习模型没法直接处理整数序列,必须把数据转换成数值矩阵。这种独热编码的方式能让模型快速识别每条影评包含哪些单词(忽略单词出现的顺序,这是早期文本分类模型的常用思路),是喂入神经网络前的必要步骤。
内容的提问来源于stack exchange,提问作者Stavros Niafas
相关产品推荐
相关产品推荐

