在pyTorch上执行RNN代码时出错?

在pyTorch上执行RNN代码时出错?,pytorch,rnn,google-colaboratory,Pytorch,Rnn,Google Colaboratory,我正在使用PyTorch运行两个字符串的二进制加法代码 但是,在培训模型时,我遇到以下错误: can't convert np.ndarray of type numpy.object. The only supported types are: double, float, float16, int64, int32, and uint8. 有人能帮我吗?这是我的密码: featDim=2#每个字符串各两位 outputDim=1#输出零或1的一个输出节点 lstmSize=10 lo

我正在使用PyTorch运行两个字符串的二进制加法代码

但是,在培训模型时,我遇到以下错误:

can't convert np.ndarray of type numpy.object. 
The only supported types are: double, float, float16, int64, int32, and uint8.  
有人能帮我吗?这是我的密码:

featDim=2#每个字符串各两位
outputDim=1#输出零或1的一个输出节点
lstmSize=10
lossFunction=nn.MSELoss()
模型=加法器(featDim、lstmSize、outputDim)
打印('已初始化模型')
#optimizer=optim.SGD(model.parameters(),lr=3e-2,momentum=0.8)
optimizer=optim.Adam(model.parameters(),lr=0.001)
纪元=500
###时代##
totaloss=浮动(“inf”)
当Totaloss>1e-5时:
打印(“最后500个样本的平均损失=%lf”%(Totaloss))
Totaloss=0
对于范围(0,历次)内的i:#平均损失超过200个样本
stringLen=4
testFlag=0
x、 y=getSample(stringLen,testFlag)
模型0_梯度()
x_var=autograd.Variable(torch.from_numpy(x).unsqueze(1.float())#转换为torch张量和变量
#unsqueze()用于添加额外维度,因为
#您的输入必须是t*batchsize*featDim;你不能在pytorch中删除该批次
seqLen=x_变量大小(0)
#打印(x_变量)
x_var=x_var.continuous()
y_var=autograd.Variable(torch.from_numpy(y.float())##此行出错
最终核心=模型(x_var)
#最终核心=最终核心。
损失=损失功能(最终核心,y_变量)
Totaloss+=丢失。数据[0]
optimizer.zero_grad()
loss.backward()
optimizer.step()
totaloss=totaloss/时代
这里的主要问题是您的
y
的类型。您尚未提供任何有关这方面的信息,因此此处将更为一般:

但是显然,您的
ndarray
不包含数字数据类型。您必须使用错误消息中提到的其中一项:

仅支持的类型有:double、float、float16、int64、int32、, 和uint8

下面是一个简短的例子来说明这个问题:

如果使用前面提到的数据类型之一,它就可以正常工作:

导入火炬
将numpy作为np导入
a=np.ndarray(shape=(2,2),dtype=np.float)#数据类型np.float
印刷品(a)
打印(torch.autograd.Variable(torch.from_numpy(a.float()))
输出:

[[2.16641777e-314 2.16641777e-314]
[2.16641777e-314 2.16641777e-314]]
变量包含:
0  0
0  0
[火炬.尺寸为2x2的浮标张量]

但是,如果您使用其他numpy数据类型(如
np.object
),您将收到以下错误消息:

导入火炬
将numpy作为np导入
a=np.ndarray(shape=(2,2),dtype=np.object)#数据类型np.object
印刷品(a)
打印(torch.autograd.Variable(torch.from_numpy(a.float()))
这导致:

[[None]
[无]]
---------------------------------------------------------------------------
运行时错误回溯(上次最近调用)
在()
3a=np.ndarray(shape=(2,2),dtype=np.object)
4印刷品(a)
---->5打印(torch.autograd.Variable(torch.from_numpy(a.float()))
RuntimeError:无法将给定的np.ndarray转换为张量-它的类型无效。仅支持的类型有:double、float、int64、int32和uint8。
您可能没有直接指定数据类型
np.object
。我想这可能是一些嵌套数组的结果

但是您需要使用数字数据类型将numpy数组
y
转化为正确的形状,这样它就应该适合您了