在 PyTorch 中创建具有不同维度数组的张量

Create tensor with arrays of different dimensions in PyTorch

我想连接不同维度的数组以将它们提供给我的神经网络,该网络的第一层是 AdaptiveAveragePooling1d。我有一个由多个信号(一维数组)组成的数据集,每个信号的长度都不同。例如:

array1 = np.random.randn(1200,1)
array2 = np.random.randn(950,1)
array3 = np.random.randn(1000,1)

我想获得一个张量,我在其中连接这三个信号以获得二维张量。 但是,如果我尝试做

tensor = torch.Tensor([array1, array2, array3])

它给我这个错误:

ValueError: expected sequence of length 1200 at dim 2 (got 950)

有没有办法获得这样的东西?

编辑 有关数据集的更多信息:

我读过这个 AdaptiveAveragePooling1d 层,它允许我使用不同大小的样本输入网络。但我的问题是如何向网络输入每个样本长度不同的数据集?如何在不使用 NaN 或零填充方法的情况下对它们进行分组? 希望我解释清楚了。

这不符合张量的定义,是不可能的。如果张量的形状为 (NxMx1),则所有 N 个矩阵的大小必须为 (Mx1)。

仍然有一些方法可以使所有数组的长度相同。查看您的数据来自何处及其结构,并找出以下哪些解决方案可行。其中一些可能会以您不喜欢的方式改变信号的导数

  • 将数组裁剪成相同大小(即剪掉 start/end)或将较短的数组零填充到较长数组的长度(我真的不喜欢这个,它只适用于非常特定的应用程序)
  • 'Stretching' 使用插值将数组大小相同
  • 通过子采样将数组缩短到相同大小
  • 对于某些应用程序,甚至可能传递 a 的系数 来自信号的傅里叶级数

编辑 对于心率,它应该是一个大致周期性的信号,我肯定会裁剪应该工作得很好的信号。通过 FFT(等量裁剪信号)或傅立叶系数也可能产生有趣的结果,但根据我对神经尖峰数据的经验,当你有足够的数据进行训练时,像这样对信号的 FFT 进行训练并不会表现得更好。

此外,如果您使用的是全连接网络,使用一维卷积是一个很好的替代尝试。