【问题标题】:Does reshaping a tensor retain the characteristics of original tensor?重塑张量是否保留了原始张量的特征?
【发布时间】:2020-08-25 15:51:19
【问题描述】:

我有一个形状为(8, 5, 300) 的张量 T,其中 8 是批大小,5 是每批中的文档数,300 是每个文档的编码。如果我按如下方式重塑张量,我的张量的属性是否保持不变?

T = T.reshape(5, 300, 8)
T.shape
>> Size[5, 300, 8]

那么,这个新的张量是否与原来的张量具有相同的属性?我的意思是,我可以说这也是一个批量大小为 8 的张量,每个批次有 5 个文档,每个文档有 300 维编码吗?

这会影响模型的训练吗?如果 Tensor 的重塑使数据点变得混乱,那么训练就没有意义了。例如,如果像上面这样的重塑将输出作为 5 个样本的批次输出,每个样本有 300 个大小为 8 的文档。如果发生这种情况,那就没用了,因为我没有 300 个文档,我也没有 5 个样本的批次。

我需要像这样重塑它,因为我的模型在两者之间产生[8, 5, 300] 形状的输出,而下一层接受[5, 300, 8] 形式的输入。

【问题讨论】:

    标签: python tensorflow pytorch reshape tensor


    【解决方案1】:

    你需要了解reshape/viewpermute之间的区别。

    reshapeview 只改变张量的“shape”,没有重新排序元素。因此

    orig = torch.rand((8, 5, 300))
    resh = orig.reshape(5, 300, 8)
    
    orig[0, 0, :] != resh[0, :, 0]  
    

    如果你也想改变元素的顺序,你需要permute它:

    perm = orig.permute(1, 2, 0)
    orig[0, 0, :] == perm[0, :, 0]
    

    【讨论】:

    • 因此,如果我希望修改后的张量代表一批 8 个样本,包含 5 个文档,每个文档代表 300 维文档,我需要置换它而不是重塑它,对吗?
    • @MikePatel 完全正确
    • 它只影响我重塑张量的层的参数,还是整个模型?问题是我在将其馈送到特定层之前对其进行了重塑,然后从输出中将其改回原始形状。
    【解决方案2】:

    不! 我犯了类似的错误。 想象一下,您将二维张量(矩阵)转换为一维张量(数组)并在其上应用变换功能。这会在代码中产生严重的问题,因为您的新张量具有数组的特征。 希望你明白我的意思。

    【讨论】:

    • 我在开始训练后问了这个问题,现在,我只是检查是否有任何答案。可悲的是,我将不得不再次训练我的模型:(
    猜你喜欢
    • 2021-03-05
    • 2020-10-13
    • 2016-10-18
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 2018-09-20
    相关资源
    最近更新 更多