machine-learning - RuntimeError:输入类型(torch.cuda.FloatTensor)和权重类型(torch.FloatTensor)应该相同
问题描述
我将模型和数据设置为同一设备,但总是引发如下错误:
RuntimeError:输入类型(torch.cuda.FloatTensor)和权重类型(torch.FloatTensor)应该相同
以下是我的训练代码,希望你能解答。谢谢!
def train(train_img_path, train_label_path, pths_path, interval, log_file):
file_num = len(os.listdir(train_img_path))
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
net = EAST(extractor=extractor, geometry_mode=geometry_mode, pretrained=True)
net = net.to(device)
trainset = custom_dataset(train_img_path, train_label_path)
train_loader = data.DataLoader(trainset, batch_size=batch_size,
shuffle=True, num_workers=num_workers, drop_last=True)
optimizer = optim.SGD(net.parameters(), lr=initial_lr, momentum=momentum, weight_decay=weight_decay_sgd)
criterion = Loss(weight_geo, weight_angle, geometry_mode="RBOX")
net.train()
epoch_loss = 0.
for epoch in range(max_epoch):
epoch_time = time.time()
for i, (img, score_gt, geo_gt, ignored_map) in enumerate(train_loader):
start_time = time.time()
img, score_gt, geo_gt, ignored_map = img.to(device), score_gt.to(device),\
geo_gt.to(device), ignored_map.to(device)
score_pred, geo_pred = net(img)
total_loss, score_loss, loss_AABB, loss_angle = criterion(score_pred, geo_pred, score_gt, geo_gt, ignored_map)
epoch_loss += total_loss.item()
optimizer.zero_grad()
total_loss.backward()
optimizer.step()
解决方案
我怀疑你的损失函数有它自己的一些内部参数,因此你也应该
criterion = Loss(weight_geo, weight_angle, geometry_mode="RBOX").to(device)
如果您提供完整的跟踪信息,指出究竟是哪一行导致了错误,则更容易发现错误。
推荐阅读
- twitter-bootstrap - 如何居中内容 col-xs-4?
- python - 如何向 pyqt5 paintEvent 添加参数?
- android - Volley StringRequest 有效,但将其更改为 JsonObjectRequest 会导致 com.android.volley.ClientError
- c# - 为什么我需要刷新页面才能在 Google Analytics 中获取实时数据?
- qt - qml 锚定行内的东西
- javascript - 如何在 ngFor 循环 [Angular] 中制作可扩展的表格行?
- python - django 查询中的“as_”是什么意思?
- google-drive-api - Google Drive Api Stream 大文件 (>25MB)
- java - 具有浮点和字节的交错式 VBO
- c# - xaml - 如何指定使用哪个 ContentTemplateSelector?