模型测试

import cv2
from torchvision import transforms, datasets, models
from torch.utils.data import DataLoader
import torch
import numpy as np
import os
from sklearn import metrics
import matplotlib.pyplot as plt device = torch.device("cuda:2" if torch.cuda.is_available() else "cpu")
print(device)
num_class = 3
model_path = 模型路径
model = 模型(num_class).to(device)
model.load_state_dict(torch.load(model_path))
model.eval() # Set model to evaluate mode test_dataset = 数据集读取(train=False)
test_loader = DataLoader(test_dataset, batch_size=1, shuffle=False, num_workers=2) def turn(l):
l = l.data.cpu().numpy()
l = l.squeeze()
l = np.swapaxes(l, 0, 2)
l = np.swapaxes(l, 0, 1)
return l for inputs, labels in test_loader:
model.to(device)
inputs = inputs.to(device)
labels = labels.to(device) pred = model(inputs)
# pred = torch.relu(pred)
pred = turn(pred)
gt = turn(labels)

评价指标

混淆矩阵

以分割为例,经过.flatten()处理。

def acc(pred, gt):
tp = 0
tn = 0
fp = 0
fn = 0
num = len(pred)
for i in range(num):
if pred[i] > 0 and gt[i] == 1:
tp += 1
if pred[i] > 0 and gt[i] == 0:
fp += 1
if pred[i] == 0 and gt[i] == 1:
fn += 1
if pred[i] == 0 and gt[i] == 0:
tn += 1
acc = (tp + tn) / num
iou = tp / (tp + fp + fn)
rec = tp / (tp + fn)
pre = tp / (tp + fp)
f1 = 2 * pre * rec / (pre + rec)
print("mAcc is :{}, mIou is :{}, recall is :{}, precision is :{}, f1 is :{}".format(acc, iou, rec, pre, f1))

ROC曲线图

def draw_roc(pred, gt, name):
tpr, fpr, thresholds = metrics.roc_curve(gt, pred, pos_label=0)
plt.figure
plt.plot(fpr, tpr, label = name)
plt.xlabel('FPR')
plt.ylabel('TPR')
plt.legend(loc = 'lower right')
plt.title(name)
plt.savefig('路径/{}.png'.format(name))
# plt.close() 如果有多个类别,不close()就会画在一张图上

最新文章

  1. DOM扩展之 HTML5
  2. 浅谈js的事件冒泡机制
  3. CMSIS Example - Signal
  4. 使用charles 抓包
  5. Android_Spinner_example
  6. 安装,卸载或重装Vmware Workstation时失败的官方解决方案
  7. ps命令用法
  8. DbContext 和ObjectContext
  9. Eclipse 项目以非gradle方式导入Android Studio
  10. JavaScript脚本放在哪里
  11. laravle 整合 thrift
  12. NEST.net Client
  13. Delphi数据库技术中Disablecontrols和Enablecontrols的功能
  14. 阿里云logtail采集IDC机房机器需添加AliUids操作
  15. file /usr/lib64/mysql/plugin/dialog.so from install of Percona-Server-server-56-5.6.24-rel72.2.el6.x86_64 conflicts with file from package mariadb-libs-1:5.5.60-1.el7_5.x86_64
  16. JS 变量是否有值的判断
  17. EF 1
  18. 在java中为什么要把main方法定义为一个static方法?
  19. namp命令详解
  20. poj 3740 Easy Finding(Dancing Links)

热门文章

  1. NC224938 加减
  2. Apache:dbutils 开源JDBC工具类库
  3. MySQL经典50题
  4. Grid属性太多记不住?【Grid栅格布局可视化编辑器】直观易懂高效,拖拉拽,有手就行!
  5. (一)java基础篇-----认识java
  6. 多人共用一个Linux用户, 实现Bash配置文件独立
  7. 西文字符与中文GBK编码的区别
  8. Class对象功能概述和Class对象功能获取Field
  9. 利用本地HTTPS模拟环境为FastAPI框架集成FaceBook社交三方登录
  10. HTML5 基础学习