【问题标题】:Pytorch copy a neuron in a layerPytorch 在层中复制一个神经元
【发布时间】:2020-06-12 22:19:16
【问题描述】:

我正在使用 pytorch 0.3.0。我正在尝试有选择地复制一个神经元及其在同一层内的权重,然后用另一组权重替换原始神经元。这是我的尝试:

reshaped_data2 = data2.unsqueeze(0)
new_layer_data = torch.cat([new_layer.data, reshaped_data2], dim=0)
new_layer_data[i] = data1
new_layer.data.copy_(new_layer_data)

首先我解压data2 使其成为1*X 张量而不是0*X。 然后我将我层的张量与沿维度 0 重塑的data2 连接起来。 然后我将位于索引i 的原始data2 替换为data1。 最后,我将所有这些复制到我的图层中。

我得到的错误是:

RuntimeError: inconsistent tensor size, expected tensor [10 x 128] and src [11 x 128] to have the same number of elements, but got 1280 and 1408 elements respectively at /Users/soumith/code/builder/wheel/pytorch-src/torch/lib/TH/generic/THTensorCopy.c:86

如果我做一个简单的分配而不是复制,我会得到

RuntimeError: The expanded size of the tensor (11) must match the existing size (10) at non-singleton dimension 1. at /Users/soumith/code/builder/wheel/pytorch-src/torch/lib/TH/generic/THTensor.c:309

我理解错误,但正确的方法是什么?

【问题讨论】:

    标签: python python-2.7 machine-learning pytorch tensor


    【解决方案1】:

    您正在尝试用模型不允许的 11x128 张量替换 10x128 张量。 new_layer 是用大小(11, 128) 初始化的吗? 如果没有,请尝试使用所需大小创建新层 (11, 128),然后复制/分配您的 new_layer_data

    【讨论】:

    • new_layer 初始化为10x128 我修改为11x128。您建议创建一个全新的图层对象然后复制数据?这不类似于我在torch.cat 返回一个新对象后所做的吗?
    • torch.cat 确实返回了一个新对象,但简单地将其分配给最初的(10, 128) 层似乎并没有削减它,至少在您使用.data 时是这样。您可能想完全放弃它并指定.weight.bias。请参阅此论坛帖子:discuss.pytorch.org/t/…
    • 会看看谢谢,虽然我注意到它是 pytorch 的更高版本。如果您发布解决方案,我可以将您的答案标记为正确。
    【解决方案2】:

    这里的解决方案是创建一个具有正确大小的新模型,并将权重作为默认值传递。没有找到动态扩展解决方案。

    【讨论】:

      猜你喜欢
      • 2017-05-21
      • 2017-05-21
      • 2021-12-30
      • 1970-01-01
      • 2020-10-07
      • 2016-09-02
      • 1970-01-01
      • 2023-02-17
      • 2019-04-13
      相关资源
      最近更新 更多