重塑张量是否保留原始张量的特征?
Does reshaping a tensor retain the characteristics of original tensor?
我有一个形状为 (8, 5, 300)
的张量 T,其中 8 是批量大小,5 是每批中的文档数,300 是每个文档的编码。如果我按如下方式重塑张量,我的张量的属性是否保持不变?
T = T.reshape(5, 300, 8)
T.shape
>> Size[5, 300, 8]
那么,这个新张量是否指示与原始张量相同的属性?通过属性,我的意思是,我可以说这也是一个批量大小为 8 的 Tensor,每个批次有 5 个文档,每个文档有 300 维编码吗?
这会影响模型的训练吗?如果张量的重塑弄乱了数据点,那么训练就没有意义了。例如,如果像上面那样重塑输出,则输出为一批 5 个样本,每个样本有 300 个大小为 8 的文档。如果发生这种情况,那就没用了,因为我没有 300 个文件,也没有 5 个样本的批次。
我需要像这样重塑它,因为我中间的模型产生形状 [8, 5, 300]
的输出,而下一层接受 [5, 300, 8]
的输入。
否
你需要明白reshape
/view
and permute
.
的区别
reshape
和 view
只改变张量的“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)
的张量 T,其中 8 是批量大小,5 是每批中的文档数,300 是每个文档的编码。如果我按如下方式重塑张量,我的张量的属性是否保持不变?
T = T.reshape(5, 300, 8)
T.shape
>> Size[5, 300, 8]
那么,这个新张量是否指示与原始张量相同的属性?通过属性,我的意思是,我可以说这也是一个批量大小为 8 的 Tensor,每个批次有 5 个文档,每个文档有 300 维编码吗?
这会影响模型的训练吗?如果张量的重塑弄乱了数据点,那么训练就没有意义了。例如,如果像上面那样重塑输出,则输出为一批 5 个样本,每个样本有 300 个大小为 8 的文档。如果发生这种情况,那就没用了,因为我没有 300 个文件,也没有 5 个样本的批次。
我需要像这样重塑它,因为我中间的模型产生形状 [8, 5, 300]
的输出,而下一层接受 [5, 300, 8]
的输入。
否
你需要明白reshape
/view
and permute
.
reshape
和 view
只改变张量的“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]
不! 我犯了类似的错误。 想象一下,您将二维张量(矩阵)转换为一维张量(数组)并对其应用变换功能。这会在代码中造成严重问题,因为您的新张量具有数组的特征。 希望你明白我的意思。