我按照geeks for geeks中的教程操作
我在测试时获得了很好的准确性
Epoch [1/10],Loss:0.1767,Validation Loss:15.1023,Accuracy:0.95,Validation Accuracy:0.95
Epoch [2/10],Loss:0.1112,Validation Loss:11.1439,Accuracy:0.97,Validation Accuracy:0.96
Epoch [3/10],Loss:0.0711,Validation Loss:8.6009,Accuracy:0.96,Validation Accuracy:0.98
Epoch [4/10],Loss:0.0606,Validation Loss:7.4755,Accuracy:0.97,Validation Accuracy:0.98
Epoch [5/10],Loss:0.0393,Validation Loss:6.7248,Accuracy:0.99,Validation Accuracy:0.99
Epoch [6/10],Loss:0.0311,Validation Loss:8.4266,Accuracy:1.00,Validation Accuracy:0.99
Epoch [7/10],Loss:0.0388,Validation Loss:6.4547,Accuracy:1.00,Validation Accuracy:0.99
Epoch [8/10],Loss:0.0216,Validation Loss:6.4336,Accuracy:1.00,Validation Accuracy:1.00
Epoch [9/10],Loss:0.0426,Validation Loss:6.8441,Accuracy:1.00,Validation Accuracy:0.98
Epoch [10/10],Loss:0.0167,Validation Loss:6.0449,Accuracy:0.99,Validation Accuracy:1.00
字符串
测试准确度:
Test Accuracy: 99.12%
precision recall f1-score support
0 0.99 1.00 0.99 980
1 0.99 1.00 0.99 1135
2 0.99 0.99 0.99 1032
3 0.99 0.99 0.99 1010
4 0.99 0.99 0.99 982
5 0.99 0.99 0.99 892
6 1.00 0.99 0.99 958
7 0.99 0.99 0.99 1028
8 0.99 0.99 0.99 974
9 0.99 0.98 0.99 1009
accuracy 0.99 10000
macro avg 0.99 0.99 0.99 10000
weighted avg 0.99 0.99 0.99 10000
型
但当我用自己的图像测试这个模型时,
import cv2
import numpy as np
from PIL import *
image = cv2.imread(r"C:\Users\Sanmitha\Documents\first.jpg",0)
image = cv2.resize(image, (28,28))
batch = torch.tensor(image / 255).unsqueeze(0).float()
with torch.no_grad():
batch = batch.to(device)
output = model( batch )
output = torch.argmax(output, 1)
print(output)
型
输出为:
tensor([5])
型
图像为second.jpg
我还有一张图片要测试:first.jpg的
在这两个图像中,我需要检测门号。答案应该是
在second.jpg中:110/50(至少只有数字)。在first.jpg中:38/42(至少只有数字)
我不知道怎么做这份工作。好心帮忙
1条答案
按热度按时间4bbkushb1#
从您的测试图像中可以明显看出,您并没有试图解决类似MNIST的问题,而是解决类似SVHN的问题。你需要使用一种不同的模型。你训练的那个只能在图像中只有一个数字时分类数字;它不能检测多个数字。因此,您需要像YOLO这样的对象检测模型。YOLO将为图像中的每个数字提供边界框,允许您按坐标对其进行排序并获得正确的顺序。有很多YOLO模型版本,对于其中一些,可以找到预训练的权重。我建议你尝试使用这个代码与预训练模型。