Pytorch串⾏训练两个⽹络
新生儿干呕RuntimeError: Trying to backward through the graph a cond time, but the buffers have already been freed.
(⼀)我要完成的是,把前⼀个⽹络的输出作为后⼀个⽹络的输⼊。
pytorch⽣⼿……我⼀开始还以为是使⽤了两次loss.backward,需要在第⼀个处保存:loss.backward(retain_graph=True),结果还是⼀直报这个错。
后来发现需要对前⼀个⽹络的输出加'.data',也就是写成'output.data',表⽰取出不带梯度的变量值(⼤概是这个意思(··)و✧)。
(⼆)如果还需要多个Dataloader同时训练呢:
from itertools import cycle
为梦想时刻准备着
for step, tupdata in enumerate(zip(cycle(loader1), loader2)):
战略管理论文data1, labels1, data2, labels2 = tupdata[0][0], tupdata[0][1], tupdata[1][0], tupdata[1][1]
这样使⽤cycle时,将再次重复使⽤最⼩的数据集,注意取出的数据是tuple元组类型。半个馒头
载脂蛋白b(三)
1. GPU中的Variable变量:
a.cuda().data.cpu().numpy()
2. GPU中的tensor变量:
a.cuda().cpu().numpy()
书法名人
赞美志愿者3. CPU中的Variable变量:
a.data.numpy()
4. CPU中的tensor变量:
a.numpy()
总结:
.
cuda()是读取GPU中的数据
.data是读取Variable中的tensor
香酥鸭.cpu是把数据转移到cpu上
.numpy()把tensor变成numpy