【问题标题】:How can I convert numpy.ndarray having type object to torch.tensor?如何将具有 object 类型的 numpy.ndarray 转换为 torch.tensor?
【发布时间】:2019-10-12 23:20:38
【问题描述】:

我正在尝试在 pytorch 中处理 lstm。它只需要张量作为输入。我拥有的数据是numpy.object_ 的形式,如果我将其转换为numpy.float,那么它可以转换为tensor

我使用print(type(array)) 检查了数据类型,它将'numpy.ndarray' 类作为输出,print(arr.dtype.type)'numpy.object_' 类作为输出。

或者有什么方法可以直接将元组转换为torch.tensor?

【问题讨论】:

  • @mansisinha,你能添加一些示例数据吗?
  • class fullstop(nn.Module): def __init__(self): super(fullstop, self).__init__() self.seq1=nn.LSTM(input_size=30,hidden_​​size=20) self. seq2=nn.LSTM(input_size=20,hidden_​​size=10) self.fc1=nn.Linear(20,5) self.fc2=nn.Linear(5,1) def forward(self,input1,input2): prefix1= self.seq1(input1) suffix1=self.seq1(input2) prefix2=self.seq2(prefix1) suffix2=self.seq2(suffix1) result=torch.cat(Variable(prefix1,suffix1),1) r1=F.sigmoid (self.fc1(result)) r2=self.fc2(r1) return r2
  • @AnubhavSingh 这里的 forward 函数只接受张量作为输入。因此,当我将 input1 和 input2 作为张量时,它可以正常工作,但是对于 seq2,seq1 的输出将作为输入。此输出以元组形式出现,因此会出错。

标签: python-3.x numpy pytorch


【解决方案1】:

pytorch LSTM 返回一个元组。因此,您会收到此错误,因为您的第二个 LSTM 层 self.seq2 无法处理此元组。所以, 改变

prefix1=self.seq1(input1) 
suffix1=self.seq1(input2)

到这样的事情:

prefix1_out, prefix1_states = self.seq1(input1) 
suffix1_out, suffix1_states = self.seq1(input2) 

然后将 prefix1_out 和 suffix1_out 张量传递给下一个 LSTM 层

prefix2_out, prefix2_states = self.seq2(prefix1_out) 
suffix2_out, suffix2_states = self.seq2(suffix1_out)

并且,像这样连接 prefix1_out 和 suffix1_out 张量

result = torch.cat([out1,out2],1) 

另外,改变

r1=F.sigmoid(self.fc1(result)) 
r2=self.fc2(r1)

到这样的事情:

out_ll = self.fc1(result)
r1 = nn.Sigmoid() 
r2 = self.fc2(r1(out_ll))

【讨论】:

  • 欢迎。很高兴能帮到你。
猜你喜欢
  • 2018-06-13
  • 2018-11-12
  • 1970-01-01
  • 2019-06-22
  • 1970-01-01
  • 1970-01-01
  • 2023-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多