网站关键词快速排名,常州做的网站的公司,电脑路由器做网站服务器,工人找活平台模型训练识别手写数字#xff08;一#xff09;使用手写数字图像进行模型测试
一、生成手写数字图像
1. 导入所需库
import cv2
import numpy as np
import oscv2用于计算机视觉操作。 numpy用于处理数组和图像数据。 os用于文件和目录操作。 2. 初始化画布
canvas np.z…模型训练识别手写数字一使用手写数字图像进行模型测试
一、生成手写数字图像
1. 导入所需库
import cv2
import numpy as np
import oscv2用于计算机视觉操作。 numpy用于处理数组和图像数据。 os用于文件和目录操作。 2. 初始化画布
canvas np.zeros((280, 280), dtypeuint8)创建一个280x280的黑色画布值为0表示黑色。 3. 鼠标回调函数
def draw(event, x, y, flags, param):if event cv2.EVENT_MOUSEMOVE and flags cv2.EVENT_FLAG_LBUTTON:cv2.circle(canvas, (x, y), 5, 255, -1)draw函数在鼠标移动时绘制白色圆点值为255到画布上。圆点的半径为5像素。 4. 创建窗口并设置回调
cv2.namedWindow(Canvas)
cv2.setMouseCallback(Canvas, draw)创建一个名为“Canvas”的窗口并设置鼠标回调函数。 5. 主循环
while True:cv2.imshow(Canvas, canvas)key cv2.waitKey(1) 0xFF不断显示画布等待用户输入。 6. 处理用户输入
if key ord(c):canvas np.zeros((280, 280), dtypeuint8)
elif key ord(q):break按 c 键清空画布按 q 键退出循环。 7. 保存图像目录
save_dir Data
if not os.path.exists(save_dir):os.makedirs(save_dir)检查并创建保存图像的目录。 8. 保存图像文件
save_path os.path.join(save_dir, handwritten_digit.png)
if cv2.imwrite(save_path, canvas):print(fImage saved successfully at {save_path})
else:print(Failed to save image.)将画布保存为PNG文件并输出保存状态。 9. 关闭窗口
cv2.destroyAllWindows()关闭所有OpenCV窗口。 二、调用训练的模型进行测试
1. 导入所需库
import cv2
import matplotlib.pyplot as plt
import numpy as np
from keras.api.models import load_modelcv2用于图像处理。 matplotlib.pyplot用于可视化结果。 numpy用于数值计算。 load_model用于加载训练好的Keras模型。 2. 加载训练的模型
model load_model(my_model.h5) 从文件中加载训练好的模型。 3. 加载手写数字图像
original_img cv2.imread(Data/handwritten_digit.png, cv2.IMREAD_GRAYSCALE)读取手写数字图像并以灰度模式加载。 4. 处理图像用于预测
img cv2.resize(original_img, (28, 28)) # 调整为28x28大小
img cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV)[1] # 二值化
img img.astype(float32) / 255 # 归一化将图像调整为28x28像素这是模型所需的输入尺寸。 使用阈值处理将图像二值化黑白并将背景设置为白色手写数字为黑色。 将图像数据归一化到[0, 1]范围。 5. 调整图像形状以便于预测
img img.flatten() # 展平为一维数组
img img.reshape(1, 784) # 调整形状为 (1, 784)将28x28的图像展平为784个像素值的单行数组以适应模型的输入格式。 6. 进行预测
predictions model.predict(img)
predicted_class np.argmax(predictions, axis1)7. 可视化预测结果
plt.figure(figsize(6, 6))# 显示原图
plt.imshow(original_img, cmapgray, aspectequal) # 使用原始图像
plt.title(fPredicted: {predicted_class[0]}, fontsize14)
plt.axis(off)plt.tight_layout()
plt.show()创建一个图形窗口并显示原始图像。 在标题中显示模型预测的类别。 使用tight_layout()优化图形布局并显示图形。 手写8预测却是2说明模型在训练集上表现良好但在测试却表现差。
目前使用的是一个全连接神经网络Feedforward Neural Network。这个网络的结构通常包括以下几个部分
输入层接受输入数据例如在你的例子中是手写数字的像素值。隐藏层通过全连接的方式进行计算使用激活函数如 ReLU引入非线性。输出层生成预测结果通常使用 softmax 激活函数进行分类。
全连接神经网络在处理图像时通常需要将输入图像展平flatten这可能导致对空间特征的捕捉不够有效因此卷积神经网络CNN更适合图像数据因为它们能够利用卷积层自动提取空间特征从而提高分类性能。