如何解决我收到错误 RuntimeError: Found dtype Double but expected Float
我在尝试为火灾检测模型训练模型时看到此错误, 我试图将图像转换为浮动,但没有用
loss_hist = Averager()
best_val = None
patience = es_patience
for epoch in range(num_epochs):
start_time = time.time()
itr = 1
loss_hist.reset()
model.train()
for images,targets,image_ids in train_data_loader:
images = list(image.to(torch.float).to(device) for image in images)
targets = [{k: v.to(device) if k =='labels' else v.to(device) for k,v in t.items()} for t in targets]#[{k: v.double().to(device) if k =='boxes' else v.to(device) for k,v in t.items()} for t in targets]
loss_dict = model(images,targets)
print(loss_dict)
losses = sum(loss for loss in loss_dict.values())
print(losses)
loss_value = losses.item()
loss_hist.send(loss_value)
optimizer.zero_grad()
losses.backward()
optimizer.step()
if itr % 50 == 0:
print(f"Iteration #{itr} loss: {loss_value}")
itr += 1
# update the learning rate
if lr_scheduler is not None:
lr_scheduler.step()
错误发生在这一行
losses.backward()
有关输入数据集代码的更多详细信息:
class FireSmokeDataset(Dataset):
def __init__(self,dataframe,image_dir,transforms=None):
super().__init__()
self.image_ids = dataframe['filename'].unique()
self.df = dataframe
self.image_dir = image_dir
self.transforms = transforms
def __len__(self) -> int:
return self.image_ids.shape[0]
def __getitem__(self,index: int):
image_id = self.image_ids[index]
records = self.df[self.df['filename'] == image_id]
image = cv2.imread(f'{self.image_dir}/{image_id}',cv2.IMREAD_COLOR)
#if image is not None:
# gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
#else:
# print("empty frame")
# exit(1)
image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB).astype(np.float64)
image /= 255.0
#Else for train and validation data
boxes = records[['xmin','ymin','xmax','ymax']].values
boxes = torch.as_tensor(boxes,dtype=torch.float64)
area = (boxes[:,3] - boxes[:,1]) * (boxes[:,2] - boxes[:,0])
area = torch.as_tensor(area,dtype=torch.float64)
# there is 2 class
labels = torch.tensor(records["class_id"].values,dtype=torch.int64)
# suppose all instances are not crowd
iscrowd = torch.zeros((records.shape[0],),dtype=torch.int64)
target = {}
target['boxes'] = boxes
target['labels'] = labels
target['filename'] = torch.tensor([index])
target['area'] = area
target['iscrowd'] = iscrowd
if self.transforms:
sample = {
'image': image,'bboxes': target['boxes'],'labels': labels
}
sample = self.transforms(**sample)
image = sample['image']
target['boxes'] = torch.stack(tuple(map(torch.tensor,zip(*sample['bboxes'])))).permute(1,0)
#target['boxes'] = torch.stack(tuple(map(torch.tensor,0)
return image,target,image_id
我想知道如何修复该错误。很难指出确切的问题来自哪里。
我该如何解决这个问题?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。