Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
pytorch model.cuda()运行时错误_Pytorch - Fatal编程技术网

pytorch model.cuda()运行时错误

pytorch model.cuda()运行时错误,pytorch,Pytorch,我正在使用pytorch构建一个文本分类器,但在使用.cuda()方法时遇到了一些问题。我知道.cuda()会将所有参数移动到gpu中,这样训练过程会更快。但是,在.cuda()方法中发生如下错误: start\u time=time.time() 对于型号_输入('lstm',): hyperparam_combinations=score_util.all_组合(hyperparam_dict[model_type].values()) #用于选择最佳评分模型 对于test_idx,枚举中

我正在使用pytorch构建一个文本分类器,但在使用.cuda()方法时遇到了一些问题。我知道.cuda()会将所有参数移动到gpu中,这样训练过程会更快。但是,在.cuda()方法中发生如下错误:

start\u time=time.time()
对于型号_输入('lstm',):
hyperparam_combinations=score_util.all_组合(hyperparam_dict[model_type].values())
#用于选择最佳评分模型
对于test_idx,枚举中的设置(超参数组合):
args=自定义数据集。将参数列表到参数(设置,模型类型=模型类型)
打印(args)
tsv=“测试%d\ttrain\u loss\ttrain\u acc\ttrain\u auc\tval\u loss\tval\u acc\tval\u auc\n”%(测试idx)#tsv记录
平均得分=[]平均得分
###4倍交叉验证
对于枚举(cv_分割)中的cv_num(train_iter,val_iter):
###模型启动
模型=模型目录[模型类型](参数)
如果args.emb_type不是None:#单词嵌入init
emb=emb_dict[args.emb_type]
emb=score\u util.embedding\u init(emb,tr\u text\u字段,args.emb\u类型)
model.embed.weight.data.copy(emb)
model.cuda()
---------------------------------------------------------------------------
运行时错误回溯(上次最近调用)
在()
23型号.嵌入.重量.数据.复制(emb)
24
--->25型号.cuda()
26
27 optimizer=torch.optim.Adam(model.parameters(),lr=args.lr)
cuda中的~\Anaconda3\lib\site packages\torch\nn\modules\module.py(自我,设备id)
145复制到该设备
146         """
-->147返回自应用(lambda t:t.cuda(设备id))
148
149 def cpu(自身,设备id=无):
~\Anaconda3\lib\site packages\torch\nn\modules\module.py in\u apply(self,fn)
116 def_应用(自身,fn):
117对于self.children()中的模块:
-->118模块。适用(fn)
119
120表示self._parameters.values()中的参数:
~\Anaconda3\lib\site packages\torch\nn\modules\module.py in\u apply(self,fn)
122#存储在模块中的变量是图叶,我们没有
123#要创建复制节点,我们必须解压缩数据。
-->124参数数据=fn(参数数据)
125如果参数_梯度不是无:
126参数梯度数据=fn(参数梯度数据)
RuntimeError:变量数据必须是张量,但得到torch.cuda.FloatTensor
这些是错误回溯,我不明白为什么会发生这种情况。 在我将epoch参数设置为1以运行一些测试之前,这段代码运行得非常好。我再次将epoch设置为1000,但问题仍然存在。 torch.cuda.FloatTensor对象不也是张量吗?如果有任何帮助,我们将不胜感激

我的模型如下所示:

class tru LSTM(nn.模块):
定义初始化(self,args,
使用_hidden_average=False,
预培训(emb=无):
超级(TR_LSTM,self)。uuu init_uuuuu()
#论据
self.emb_dim=args.embed_dim
self.emb_num=args.embed_num
self.num\u hidden\u unit=args.hidden\u state\u dim
self.num_lstm_layer=args.num_lstm_layer
self.use\u hidden\u average=使用\u hidden\u average
self.batch\u size=args.batch\u size
#层
self.embed=nn.Embedding(self.emb_num,self.emb_dim)
如果预培训的emb不是无:
self.embed.weight.data.copy(预训练的emb)
self.lstm_layer=nn.lstm(self.emb_dim,self.num_hidden_unit,self.num_lstm_layer,batch_first=True)
self.fc\u层=nn.顺序(nn.线性(self.num\u隐藏单元,self.num\u隐藏单元),
nn.线性(自数值隐藏单位,2))
def前进(自身,x):
x=自嵌入(x)#批次*最大顺序*长度*emb尺寸
h_0,c_0=self.init_hidden(x.size(0))
x、 (u,u)=self.lstm_层(x,(h_0,c_0))#批次*顺序*隐藏单位数量
如果不是自我。使用隐藏平均值:
x=x[:,x.尺寸(1)-1,:]
x=x.挤压(1)
其他:
x=x.平均值(1).挤压(1)
x=自.fc_层(x)
返回x
def初始隐藏(自身、批次大小):
h_0,c_0=火炬零点(self.num_lstm_层、批次大小、self.num_隐藏单位)\
torch.zero(self.num\lstm\u层、批次大小、self.num\u隐藏单元)
h_0,c_0=h_0.cuda(),c_0.cuda()
h_0_参数,c_0_参数=火炬.nn.参数(h_0),火炬.nn.参数(c_0)
返回h_0_参数,c_0_参数
model.cuda()在您的训练/测试循环中被调用,这就是问题所在。正如错误消息所示,您反复将模型中的参数(张量)转换为cuda,这不是将模型转换为cuda张量的正确方法

应该创建模型对象,并在循环外部实现cuda。每次输入模型时,只有培训/测试实例才会转换为cuda tensor。我还建议您阅读pytorch文档站点。

model.cuda()在训练/测试循环中调用,这就是问题所在。正如错误消息所示,您重复将模型中的参数(张量)转换为cuda,这不是将模型转换为cuda张量的正确方法


应创建模型对象,并在循环外进行cuda。每次输入模型时,只有培训/测试实例才会转换为cuda tensor。我还建议您阅读pytorch文档网站。

请提供可用于重现错误的代码。请提供可用于重现错误的代码r、 两次缩进会使代码正确,尽管为什么一次初始化几个模型是一个不同的问题两次缩进会使代码正确,尽管为什么一次初始化几个模型是一个不同的问题