手写数字识别 识别本地图片 但是结果不对

  • 使用 PIL (Python Imaging Library) 加载本地图片,并进行相应的预处理。
  • 用加载的网络对每张图片进行预测,输出预测结果。
import numpy as np
import pickle
from PIL import Image
import matplotlib.pyplot as plt
from common.functions import sigmoid, softmax

# 初始化网络
def init_network():
    with open("../dataset/sample_weight.pkl", 'rb') as f:
        network = pickle.load(f)
    return network

# 预处理图像
def preprocess_image(image_path):
    # 打开图像并转换为灰度
    img = Image.open(image_path).convert('L')

    # 将图像调整为 28x28 像素
    img = img.resize((28, 28))

    # 转换为 numpy 数组
    img_array = np.array(img)

    # 归一化处理(将像素值从 [0, 255] 映射到 [0, 1])
    img_array = img_array / 255.0

    # 将图像展平为 1D 数组,适应模型输入格式
    img_array = img_array.flatten()

    return img_array

# 前向传播和预测
def predict(network, x):
    W1, W2, W3 = network['W1'], network['W2'], network['W3']
    b1, b2, b3 = network['b1'], network['b2'], network['b3']

    # 前向传播
    a1 = np.dot(x, W1) + b1
    z1 = sigmoid(a1)
    a2 = np.dot(z1, W2) + b2
    z2 = sigmoid(a2)
    a3 = np.dot(z2, W3) + b3
    y = softmax(a3)

    return y

# 获取测试图片路径
image_path = '..\dataset\digit1.jpg'  # 替换为你的图片路径

# 加载网络
network = init_network()

# 预处理并预测图像
img_array = preprocess_image(image_path)
y = predict(network, img_array)
predicted_digit = np.argmax(y)

# 显示图像和预测结果
img = Image.open(image_path).convert('L')
plt.imshow(img, cmap='gray')
plt.title(f"Prediction: {predicted_digit}")
plt.axis('off')
plt.show()

# 输出预测的结果
print(f"Predicted Digit: {predicted_digit}")

图片颜色反转之后只对了一个 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿崽meitoufa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值