如何使用修改后的数据集类正确打包填充序列

问题描述

所以我制作了一个 Dataset 类,它接收一个 3D numpy 数组和 pack_padded_sequence 的形状长度:

class MyDataset(data.Dataset):
     def __init__(self,dataset,data_shape):
          self.dataset = dataset
          self.transform = MyToTensor(data_shape)

然后我创建了自己的 ToTensor 类:

class MyToTensor(object):
     def __init__(self,data_shape):
          self.data_shape = data_shape
     def __call__(self,data):
          data = torch.from_numpy(data)
          return rnn.pack_padded_sequence(data,lengths=self.data_shape,batch_first=True)

但是由于某种原因,当我 print(list(MyDataset(dataset,data_shape))) 时,我得到了一个正常的 Tensor 对象返回,而没有删除填充。

有关我的输入的更多信息,dataset一个 3D numpy 数组,顺序为:batch size,sequence length,features 和 data_shape 是一个batch_size 的大小匹配的列表,其中一个数字表示序列长度。

序列长度也是从最高序列到最低序列大小的顺序

我的输入示例:

[[[0 0.33000001311302185 1]
  [0 0.4300000071525574 1]
  [0 0.3799999952316284 1]
  ...
  [0 0.33000001311302185 1]
  [0 0.28999999165534973 1]
  [0 0.33000001311302185 1]]

 [[6 0.800000011920929 3]
  [5 0.7300000190734863 3]
  [7 0.8199999928474426 3]
  ...
  [4 0.699999988079071 3]
  [5 0.7799999713897705 3]
  [5 0.7799999713897705 3]]

 [[3 1.0 5]
  [3 1.0 5]
  [3 1.0 5]
  ...
  [3 1.0 5]
  [3 1.0 5]
  [3 1.0 5]]

 ...

 [[4.0 0.7599999904632568 3.0]
  [6.0 0.8100000023841858 3.0]
  [6.0 1.0 3.0]
  ...
  [nan nan nan]
  [nan nan nan]
  [nan nan nan]]

 [[8.0 1.0 0.0]
  [8.0 0.9100000262260437 0.0]
  [9.0 1.0 0.0]
  ...
  [nan nan nan]
  [nan nan nan]
  [nan nan nan]]

 [[5.0 1.0 1.0]
  [4.0 1.0 1.0]
  [4.0 1.0 1.0]
  ...
  [nan nan nan]
  [nan nan nan]
  [nan nan nan]]]

以及对应的data_shape:

(235,235,232,18,18)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...