【发布时间】:2020-09-16 11:08:01
【问题描述】:
如何在没有任何就地操作的情况下有效地执行此操作?
n_id = np.random.choice(np.arange(2708), size=100)
z = np.random.rand(100, 64)
z_sparse = np.zeros((2708,64))
z_sparse[n_id[:100]] = z
基本上我希望 z_sparse 的 n_id 行包含 z 的行,但我不能执行任何就地操作,因为我的最终目标是在 pytorch 问题中使用它。
其中一种方法是在 z 中精确地创建零行,以便 z 的行最终位于位置 n_id,但不确定这将如何有效地工作。
基本上z的第1行应该放在z_sparse的n_id[0]行,然后z的第2行应该放在z_sparse的n_id[1]行,依此类推......
这是您好奇的 PyTorch 错误 jic:
RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation
【问题讨论】:
-
我很确定 pytorch 支持就地操作。
-
@user2357112supportsMonica 不在你的计算图中 - 它破坏了图
-
n_id是固定张量吗? -
@QuangHoang 是的。
-
只是好奇,你需要在你的图表中,或者你能把所有这些都放在
with torch.no_grad():
标签: python numpy pytorch sparse-matrix in-place