04数据操作+数据预处理(李沐深度学习笔记)

数据操作

首先,我们导入torch。请注意,虽然它被称为Pytorch,但我们应该导入torch而不是 Pytorch。
在这里插入图片描述
张量表示一个数值组成的数组,这个数组可能有多个维度。
在这里插入图片描述
我们可以通过张量的shape属性来访间问张量的形状和张量中元素的总数
04数据操作+数据预处理(李沐深度学习笔记)_第1张图片
04数据操作+数据预处理(李沐深度学习笔记)_第2张图片

通过shape可以查看张量的形状(维度),numel()(即number of elements的缩写)可以查看张量有多少元素

要改变一个张量的形状而不改变元素数量和元素值,我们可以调用 reshape函数。
04数据操作+数据预处理(李沐深度学习笔记)_第3张图片
使用全0、全1、其他常量或者从特定分布中随机采样的数字
04数据操作+数据预处理(李沐深度学习笔记)_第4张图片
通过提供包含数值的 Python列表(或嵌套列表)来为所需张量中的每个元素赋予确定值
04数据操作+数据预处理(李沐深度学习笔记)_第5张图片
或者再加一个括号制作三维张量
在这里插入图片描述
常见的标准算术运算符(+、-、*、/和**)都可以被升级为按元素运算
04数据操作+数据预处理(李沐深度学习笔记)_第6张图片
列表中某一个数字用浮点数,则都为浮点数

按按元素方式应用更多的计算
在这里插入图片描述
我们也可以把多个张量连结在一起
04数据操作+数据预处理(李沐深度学习笔记)_第7张图片
dim=0为按行合并,dim=1为按列合并

通过逻辑运算符构建二维张量
在这里插入图片描述
对张量中的所有元素进行求和会产生一个只有一个元素的张量。
在这里插入图片描述
即使形状不同,我们仍然可以通过调用广播机制( broadcasting mechanism)来执行按元素操作
04数据操作+数据预处理(李沐深度学习笔记)_第8张图片
可以用[-1]选择最后一个元素,可以用[1:3]选择第二个和第三个元素(从0开始)
04数据操作+数据预处理(李沐深度学习笔记)_第9张图片
除读取外,我们还可以通过指定索引来将元素写入矩阵。
04数据操作+数据预处理(李沐深度学习笔记)_第10张图片
为多个元素赋值相同的值,我们只需要索引所有元素,然后为它们赋值。
04数据操作+数据预处理(李沐深度学习笔记)_第11张图片
上图为第0行到第1行的所有列赋值为12

运行一些操作可能会导致为新结果分配内存
04数据操作+数据预处理(李沐深度学习笔记)_第12张图片
id获得类似于C语言指针的东西,是Python中的唯一标识号

执行原地操作
04数据操作+数据预处理(李沐深度学习笔记)_第13张图片
如果在后续计算中没有重复使用X,我们也可以使用X[:]=X+Y或X+=Y来减少操作的内存开销
在这里插入图片描述
转换为NumPy张量
04数据操作+数据预处理(李沐深度学习笔记)_第14张图片
将大小为1的张量转换为Python标量
在这里插入图片描述

数据预处理

创建一个人工数据集,并存储在csv(逗号分隔值)文件
04数据操作+数据预处理(李沐深度学习笔记)_第15张图片
makedirs创建一个文件夹,os.path.join合并字符串构建一个路径,NA表示未知
04数据操作+数据预处理(李沐深度学习笔记)_第16张图片
从创建的csv文件中加载原始数据集
04数据操作+数据预处理(李沐深度学习笔记)_第17张图片
如果不用print,则会以html的形式输出
04数据操作+数据预处理(李沐深度学习笔记)_第18张图片
这里有一些数据是缺失的,对于数据科学家来说最重要的是怎么处理缺失的数据,或者说整个机器学习就是处理缺失的数据,要预测未来,未来的数据是不知道的,这就是缺失的数据。

为了处理缺失的数据,典型的方法包括括值和删除,这里,我们将考虑插值
fillna对所有NA的域填一个值,这里填写的是输入的平均数,而Alley这一列是没有均值的,所以不做改变
04数据操作+数据预处理(李沐深度学习笔记)_第19张图片
这里因为data是pandas读取的数据,所以不能直接用索引,当行列名字复杂时,可以用iloc来进行索引取值。
对于inputs中的类别值或离散值,我们将"NaN"视为一个类别。
04数据操作+数据预处理(李沐深度学习笔记)_第20张图片
缺失值也是数值,所以我们把缺失值变为一个数值,因为字符串不好处理,get_dummies使数据以one-hot(独热编码)格式编码,dummy_na为是否对NA进行编码。

现在 Inputs和 outputs中的所有条目都是数值类型,它们可以转換为张量格式。
04数据操作+数据预处理(李沐深度学习笔记)_第21张图片
注意这里是float64,传统的Python默认浮点数为64位,64位浮点数计算较慢,对于深度学习来讲,一般用32位浮点数。

QA

  1. reshape和view的区别

    相同之处

    1. 都可以用来重新调整 tensor 的形状。

    不同之处

    1. reshape() 可以torch.reshape(), 还可以torch.Tensor.reshape;
      view()只能torch.Tensor.view()
      04数据操作+数据预处理(李沐深度学习笔记)_第22张图片

    2. view 函数只能用于 contiguous 后的 tensor 上,也就是只能用于内存中连续存储的 tensor。如果对 tensor 调用过 transpose, permute 等操作的话会使该 tensor 在内存中变得不再连续,此时就不能再调用 view 函数。因此,需要先使用 contiguous 来返回一个 contiguous copy。

    3. reshape 则不需要依赖目标 tensor 是否在内存中是连续的。

对于一个将要被view的Tensor,新的size必须与原来的size和stride兼容。否则,在view之前必须调用contiguous()方法。04数据操作+数据预处理(李沐深度学习笔记)_第23张图片
会发现a.stride() != b.stride(),总之在使用view()方法时候报错上图所示,就先使用一下contiguous()方法。

  1. 将数据reshape后,地址并没有改变
    04数据操作+数据预处理(李沐深度学习笔记)_第24张图片
    这里对b进行了改变,a也发生了变化

你可能感兴趣的:(李沐深度学习,pytorch,深度学习,python)