来源 | Deep Learning with PyTorch
作者 | Stevens, et al.
译者 | 杜小瑞
校对 | gongyouliu
编辑 | auroral-L
全文共7849字,预计阅读时间45分钟。
第四章 使用张量表示真实世界的数据(中)
1. 使用图像
1.1 添加颜色通道
1.2 加载一个图片文件
1.3 改变布局
1.4 数据标准化
2. 三维图像:体积数据
2.1 加载专用格式
3. 表示表格数据
3.1 使用真实数据集
3.2 加载葡萄酒数据张量
3.3 表示分数
3.4 one-hot 编码
3.5 何时进行分类
3.6 找到阈值
4. 使用时间序列
4.1 添加一个时间维度
4.2 按时间段构造数据
4.3 准备训练
5. 表示文本
5.1 将文本转化为数字
5.2 one-hot 编码字符
5.3 one-hot 编码整个单词
5.4 文本嵌入
5.5 作为蓝图的文本嵌入
6. 结论
7. 练习
8. 总结
3. 表示表格数据
我们在机器学习工作中遇到的最简单的数据形式是电子表格、CSV文件或数据库。不管是哪种媒介,它都是一个表,每个样本(或记录)包含一行,其中列包含一条关于样本的信息。
首先,我们假设样本在表中出现的顺序没有意义:与时间序列不同,这样的表是一个独立样本的集合,在时间序列中,样本是由一个时间维度关联的。
列可能包含数值,如特定位置的温度;或者标签(labels),比如表示样本属性的字符串,如“blue”。因此,这些与表格数据通常不是同质的:不同的列没有相同的类型。我们可能有一个列显示苹果的重量,另一个列在标签中编码苹果的颜色。
另一方面,PyTorch张量是同种类的。PyTorch中的信息通常被编码为一个数字,通常是浮点数(尽管也支持整数类型和布尔类型)。这种数字编码是经过深思熟虑的,因为神经网络是以实数作为输入,通过连续应用矩阵乘法和非线性函数产生实数作为输出的数学实体。
3.1 使用真实数据集
作为深度学习实践者,我们的第一项工作是将异构的、真实世界的数据编码成一个浮点数张量,供神经网络使用。大量表格数据集可在互联网上免费获得;比如说,https://github.com/caesar0301/awesome-public-datasets。让我们从一些有趣的事情开始:葡萄酒!葡萄酒质量数据集是一个免费提供的表格,其中包含来自葡萄牙北部的维诺维德葡萄酒样品的化学特征,以及感官质量评分。白葡萄酒的数据集可以在这里下载:http://mng.bz/90Ol。为了方便起见,我们还在data/p1ch4/tabular-wine下使用PyTorch Git库创建了一个数据集副本。
该文件包含一个以逗号分隔的数据集合,这些值按12列组织,前面有一个包含列名的标题行。前11列是化学变量值,最后一列是从0(非常差)到10(优秀)的感官质量分数。以下是列名在数据集中的显示顺序:
在这个数据集上,一个可能的机器学习任务是仅从化学特性预测质量分数。不过不用担心的是,机器学习短期内不会消灭品酒师的职业。我们必须从某处得到训练数据!如图4.3所示,我们希望找到数据中的一个化学列和质量列之间的关系。在这里,我们期望看到质量随着硫的减少而提高。
图 4.3 我们希望硫与葡萄酒质量的关系
3.2 加载葡萄酒数据张量
然而,在实现这一点之前,我们需要能够以比在文本编辑器中打开文件更有用的方式检查数据。让我们看看如何使用Python加载数据,然后将其转换为PyTorch张量。Python提供了几个快速加载CSV文件的选项。三种流行的选择是:
〇 Python附带的csv模块
〇 Numpy
〇 Pandas
第三种选择是最节省时间和内存的。但是,我们将避免仅仅因为需要加载文件而在学习轨迹中引入额外的库。由于我们在上一节中已经介绍了NumPy,并且PyTorch具有出色的NumPy互操作性,因此我们将继续讨论。让我们加载文件并将结果NumPy数组转换成PyTorch张量(code/p1ch4/3_tabular_wine.ipynb)。
在这里,我们只需指定2维数组的类型(32位浮点)、用于分隔每行中的值的分隔符,以及不应读取包含列名的第一行。让我们检