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

数据操作

首先,我们导入torch。请注意,虽然它被称为Pytorch,但我们应该导入torch而不是 Pytorch。
在这里插入图片描述
张量表示一个数值组成的数组,这个数组可能有多个维度。
在这里插入图片描述
我们可以通过张量的shape属性来访间问张量的形状和张量中元素的总数
在这里插入图片描述
在这里插入图片描述

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

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

按按元素方式应用更多的计算
在这里插入图片描述
我们也可以把多个张量连结在一起
在这里插入图片描述
dim=0为按行合并,dim=1为按列合并

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

运行一些操作可能会导致为新结果分配内存
在这里插入图片描述
id获得类似于C语言指针的东西,是Python中的唯一标识号

执行原地操作
在这里插入图片描述
如果在后续计算中没有重复使用X,我们也可以使用X[:]=X+Y或X+=Y来减少操作的内存开销
在这里插入图片描述
转换为NumPy张量
在这里插入图片描述
将大小为1的张量转换为Python标量
在这里插入图片描述

数据预处理

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

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

现在 Inputs和 outputs中的所有条目都是数值类型,它们可以转換为张量格式。
在这里插入图片描述
注意这里是float64,传统的Python默认浮点数为64位,64位浮点数计算较慢,对于深度学习来讲,一般用32位浮点数。

QA

  1. reshape和view的区别

    相同之处

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

    不同之处

    1. reshape() 可以torch.reshape(), 还可以torch.Tensor.reshape;
      view()只能torch.Tensor.view()
      在这里插入图片描述

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

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

对于一个将要被view的Tensor,新的size必须与原来的size和stride兼容。否则,在view之前必须调用contiguous()方法。在这里插入图片描述
会发现a.stride() != b.stride(),总之在使用view()方法时候报错上图所示,就先使用一下contiguous()方法。

  1. 将数据reshape后,地址并没有改变
    在这里插入图片描述
    这里对b进行了改变,a也发生了变化
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值