美文网首页
李沐-动手学深度学习(二-1)数据操作

李沐-动手学深度学习(二-1)数据操作

作者: minlover | 来源:发表于2022-04-06 12:57 被阅读0次

    1、n维数组

    N维数组(也称为张量tensor)是机器学习和神经网络的主要数据结构。

    2维:例如图中,三个样本,每一行是一个样本,每一列是不同的特征。

    3维,例如RGB图片,宽是列的个数,高是行的个数,然后又r、g、b三个通道;

    4维,例如RGB图片的批量,学习时通常不是一张一张图去读,而是一个batch(一个批量)读好多张;

    2、创建数组

    需要:形状、每个元素的数据类型、每个元素的值

    3、访问元素

    最后一个,从开头到最后,跳着访问,每3行一跳,就是把第0行、第3行拿出来

    4、代码用jupyter打开,在chapter_preliminaries/ndarray.ipynb

    ctrl+enter运行选中的单元格

    代码中函数的介绍看代码里的备注


    (1)

    (2)广播机制

    注意:有时候其实代码写错了,但是仍然能跑!

    在某些情况下,即使形状不同,我们仍然可以通过调用 广播机制(broadcasting mechanism)来执行按元素操作。 这种机制的工作方式如下:首先,通过适当复制元素来扩展一个或两个数组, 以便在转换之后,两个张量具有相同的形状。 其次,对生成的数组执行按元素操作。

    (3)节省内存问题

    运行一些操作可能会导致为新结果分配内存。 例如,如果我们用Y = X + Y,我们将取消引用Y指向的张量,而是指向新分配的内存处的张量。

    Python的id()函数提供了内存中引用对象的确切地址(类似C中的指针)。 运行Y = Y + X后,会发现id(Y)指向另一个位置。 这是因为Python首先计算Y + X,为结果分配新的内存,然后使Y指向内存中的这个新位置。

    before = id(Y)

    Y = Y + X

    id(Y) == before

    结果:False

    执行原地操作:可以使用切片表示法将操作的结果分配给先前分配的数组,例如Y[:] = <expression>

    before= id(Y)

    Y[:]= Y+ X

    id(Y)== before

    结果:True

    before = id(X)

    X += Y

    id(X) == before

    结果:True

    (3)转换为其他Python对象

    (4)下面例子中的reshape,并不是创建了一个新的对象b,而是创建了一个wheel,所以改b会把a一起改掉。

    相关文章

      网友评论

          本文标题:李沐-动手学深度学习(二-1)数据操作

          本文链接:https://www.haomeiwen.com/subject/uwursrtx.html