我从凯拉斯搬到了皮托克。我对搬到CUDA这件事很陌生。我花了好几个小时在网上冲浪,却什么都没找到?修复可能是一两行。如果有人知道如何解决这个问题,我会很感激的?
下面是我的代码,首先我将我的u-net模型定义为一个nn类。类似于以下代码的模块:
import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.utils.data import Dataset, DataLoader
from torchvision import transforms, utils
class unet(nn.Module):
def __init__(self):
super(unet, self).__init__()
self.conv1 = nn.Conv3d(1, 32, 3, padding=1)
self.conv1_1 = nn.Conv3d(32, 32, 3, padding=1)
self.conv2 = nn.Conv3d(32, 64, 3, padding=1)
self.conv2_2 = nn.Conv3d(64, 64, 3, padding=1)
self.conv3 = nn.Conv3d(64, 128, 3, padding=1)
self.conv3_3 = nn.Conv3d(128, 128, 3, padding=1)
self.convT1 = nn.ConvTranspose3d(128, 64, 3, stride=(2,2,2), padding=1, output_padding=1)
self.conv4 = nn.Conv3d(128, 64, 3, padding=1)
self.conv4_4 = nn.Conv3d(64, 64, 3, padding=1)
self.convT2 = nn.ConvTranspose3d(64, 32, 3,stride=(2,2,2), padding=1, output_padding=1)
self.conv5 = nn.Conv3d(64, 32, 3, padding=1)
self.conv5_5 = nn.Conv3d(32, 32, 3, padding=1)
self.conv6 = nn.Conv3d(32, 1 ,3, padding=1)
def forward(self, inputs):
conv1 = F.relu(self.conv1(inputs))
conv1 = F.relu(self.conv1_1(conv1))
pool1 = F.max_pool3d(conv1, 2)
conv2 = F.relu(self.conv2(pool1))
conv2 = F.relu(self.conv2_2(conv2))
pool2 = F.max_pool3d(conv2, 2)
conv3 = F.relu(self.conv3(pool2))
conv3 = F.relu(self.conv3_3(conv3))
conv3 = self.convT1(conv3)
up1 = torch.cat((conv3, conv2), dim=1)
conv4 = F.relu(self.conv4(up1))
conv4 = F.relu(self.conv4_4(conv4))
conv4 = self.convT2(conv4)
up2 = torch.cat((conv4, conv1), dim=1)
conv5 = F.relu(self.conv5(up2))
conv5 = F.relu(self.conv5_5(conv5))
conv6 = F.relu(self.conv6(conv5))
return conv6
然后我像下面的代码一样运行我的unet。请注意,在定义模块时,我将其设置为cuda。我还将输入数据及其标签设置为cuda。
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model = unet().to(device)
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)
loss_fn = nn.MSELoss()
datasets = torch.utils.data.TensorDataset(data_recon, data_truth)
train_loader = DataLoader(datasets, batch_size=2, shuffle=True)
def training_loop(n_epochs, optimizer, model, loss_fn, train_loader):
for epoch in range(1, n_epochs + 1):
loss_train = 0
for imgs, labels in train_loader:
imgs.to(device)
labels.to(device)
outputs = model(imgs)
loss = loss_fn(outputs, labels)
optimizer.zero_grad()
loss.backward()
optimizer.step()
loss_train += loss.item()
print('{} Epoch {}, Training loss {}'.format(datetime.datetime.now(), epoch, float(loss_train)))
training_loop(50, optimizer, model, loss_fn, train_loader)
但是我得到了这个错误:
RuntimeError Traceback(最近的调用最后)在----
在训练循环中(n个时期、优化器、模型、损耗、训练装载机)5个IMG。至(装置)6个标签。至(装置)----
/opt/anaconda3/lib/python3.7/site-packages/torch/nn/modules/module.py在调用(自我,*输入,**kwargs)491结果=自我。_slow_forward(*输入,**kwargs)492其他:-
前进档(自身,输入)18 19 def前进档(自身,输入):---
/opt/anaconda3/lib/python3.7/site-packages/torch/nn/modules/module.py在调用(自我,*输入,**kwargs)491结果=自我。_slow_forward(*输入,**kwargs)492其他:-
/opt/anaconda3/lib/python3。7/现场包/torch/nn/modules/conv.py正向(自我,输入)474自我。自我膨胀。组)475返回F.conv3d(输入、体重、偏差、步幅、--
运行时错误:后端CPU的预期对象,但参数#2的权重得到后端CUDA
我花了几个小时上网,却什么也没找到?修复可能是一两行。如果有人知道如何解决这个问题,我将不胜感激?
问题是这条线
imgs.to(device)
labels.to(device)
. to(设备)
返回一个新的张量,并且不会更改imgs
和标签
。所以cuda错误是有效的。您可以简单地通过分配新的张量来修复它,如下所示:
imgs = imgs.to(device)
labels = labels.to(device)
问题内容: 我正在使用此代码: 但是在编译时出现此错误: 然后是堆栈跟踪的编译器错误。 我将在课堂开始时同时进行这两种导入: 有什么事吗 在Netbeans中,我看到自动完成选项并且Locale对象没有语法错误… 问题答案: 您的设置有些麻烦,下面的程序对我来说很好用。 它要求源代码的事实使我相信它正在尝试以某种调试模式进行编译或运行。您不需要编译java.util。*的源代码,这很奇怪。 看看我
问题内容: 我正在尝试更新我的棱角分明的版本,而且我认为凉亭发疯了。 我的部门: 重要的是:所有的角度模块都是1.2.0-rc.2版本 但是当做 结果如下: 鲍尔似乎认为角度方案1.2.0-rc2需要角度1.0.8 … 这实际上只是错误的:https : //github.com/angular/bower-angular- scenario/tree/v1.2.0-rc.2 bower.json
SpringBoot项目本地运行测试一切正常,Jar包在本地运行也正常,当打包后传到 Linux 系统上,项目启动也没有问题,但是在前端发送请求后,发生了 Caused by: java.lang.ClassNotFoundException: com.qsj.acojbackendmodel.entity.User,这个User路径是错误的 ,正常应该是:com.qsj.acoj.model.e
我已经在Android Studio中编写了它,也在同一个项目中与Kotlin一起工作。这是我的java代码的错误列表(按照Android Studio扔给我的顺序): 无法解析符号“重写” 无法解析方法“在创建时(?)” 无法解析符号“Saved InstanceState” 无法解析方法“在创建时(?)” 无法解析符号“Saved InstanceState” 无法解析方法“Set Conte
本文向大家介绍pytorch数据预处理错误的解决,包括了pytorch数据预处理错误的解决的使用技巧和注意事项,需要的朋友参考一下 出错: 这是因为输入的大小不匹配,跟数据集有关,也跟数据预处理中的函数相关: transforms.Resize(input_size) 该函数是按比例缩放,可能是因为该数据集的分辨率不同,所以出来的结果不是(224,224)的,解决办法是改为使用: transfor
问题内容: 知道为什么我会收到这个例外吗? 问题答案: 我怀疑如果是接口(是吗?),您将不会遇到此错误。我相信您可能有一个正在使用cglib代理,执行魔术等操作的类,最后,它不能安全地转换为setter或构造函数中的参数。尝试对接口进行编程,看看错误是否消失。 更新 :不是接口。这是一个扩展的类。 鉴于此,我建议您尝试以下操作: 重命名为。 从已命名的接口中提取一个接口(例如“ ”) 浏览所有使用