type
status
date
slug
summary
tags
category
icon
password
Property
节省内存
运行一些操作可能会导致为新结果分配内存。 例如,如果用
Y = X + Y
,将取消引用Y
指向的张量,而是指向新分配的内存处的张量:这是不可取的,机器学习可能有数百兆的参数,并且一秒内多次更新所有参数。 通常情况下,最好原地执行这些更新。如果不原地更新,其他引用仍然会指向旧的内存位置,这样某些代码可能会无意中引用旧的参数。
执行原地操作非常简单,可以用切片表示法将操作的结果分配给先前分配的数组,例如
Y[:] = <expression>
。 下面创建一个新的矩阵Z
,其形状与另一个Y
相同, 使用zeros_like
来分配一个全0的块如果在后续计算中没有重复使用
X
, 也可以使用X[:] = X + Y
或X += Y
来减少操作的内存开销矢量化加速
在训练模型时,希望能够同时处理整个小批量的样本。为了实现这⼀点,需要对计算进行矢量化量化,从而利用线性代数库,而不是在
Python
中编写开销高昂的for
循环结果很明显,第⼆种方法第一种方法快得多,矢量化代码通常会带来数量级的加速