数据操作

1.ndarray

1.1深度学习框架比Numpy的ndarray多一些重要功能:

  • GPU很好地支持加速计算,而NumPy仅支持CPU计算
  • 张量类支持自动微分。 这些功能使得张量类更适合深度学习

1.2 广播机制

这种机制的工作方式如下:

  • 通过适当复制元素来扩展一个或两个数组,以便在转换之后,两个张量具有相同的形状;
  • 对生成的数组执行按元素操作。
示例
a = torch.arange(3).reshape((3, 1))
b = torch.arange(2).reshape((1, 2))
a, b
结果
(tensor([[0],
         [1],
         [2]]),
 tensor([[0, 1]]))
示例
a + b
tensor([[[ 0,  2],
         [ 4,  6]],

        [[ 4,  6],
         [ 8, 10]],

        [[ 8, 10],
         [12, 14]]])

1.2.1 不同形状的张量计算:

  1. 标量和任意形状的张量:标量可以和任意形状的张量进行计算,计算过程就是标量和张量的每一个元素进行计算。
    image
  2. 相同维度、不同形状的张量之间计算
    image
    image
    t21的形状是(1, 4),和t2的形状(3, 4)在第一个分量上取值不同,但该分量上t21取值为1,因此可以广播,也就可以进行计算
    image
    image
    此时,t24的形状是(3, 1),而t25的形状是(1, 3),二者的形状在两个份量上均不相同,但都有存在1的情况,因此也是可以广播的
  3. 三维张量的广播
    两个张量的形状上有两个分量不同时,只要不同的分量仍然有一个取值为1,则仍然可以广播
    image
    image
    4.不同维度的张量计算过程中广播
    对于不同维度的张量,我们首先可以将低维的张量升维,然后依据相同维度不同形状的张量广播规则进行广播。而低维向量的升维也非常简单,只需将更高维度方向的形状填充为1即可,例如:
    image

1.3 节省内存

例如,如果我们用Y = X + Y,我们将取消引用Y指向的张量,而是指向新分配的内存处的张量。这可能是不可取的,原因有两个:

  • 首先,我们不想总是不必要地分配内存。在机器学习中,我们可能有数百兆的参数,并且在一秒内多次更新所有参数。通常情况下,我们希望原地执行这些更新;
  • 如果我们不原地更新,其他引用仍然会指向旧的内存位置,这样我们的某些代码可能会无意中引用旧的参数。
    我们可以使用切片表示法将操作的结果分配给先前分配的数组,例如:
示例1
Z = torch.zeros_like(Y)
print('id(Z):', id(Z))
Z[:] = X + Y
print('id(Z):', id(Z)
结果1
id(Z): 4538296976
id(Z): 4538296976
示例2
before = id(X)
X += Y
id(X) == before
结果2
True

extra note:
1.
import os
os.makedirs(os.path.join('..', 'data'), exist_ok=True) # 创建文件夹
data_file = os.path.join('..', 'data', 'house_tiny.csv') # 拼接成一个新的文件路

  1. 在Pandas中,get_dummies()是一个用于创建虚拟变量(dummy variable)的函数。虚拟变量是一种将分类变量转换为数值变量的方法,它将一个有限的类别变量拆分为多个二元变量(0或1),以便更好地表示数据:
示例
print(inputs)
   NumRooms Alley
0       3.0  Pave
1       2.0   NaN
2       4.0   NaN
3       3.0   NaN
inputs = pd.get_dummies(inputs, dummy_na=True)
print(inputs
   NumRooms  Alley_Pave  Alley_nan
0       3.0           1          0
1       2.0           0          1
2       4.0           0          1
3       3.0           0          1
posted @ 2023-07-17 22:28  ML_WG  阅读(29)  评论(0)    收藏  举报