首页 > 其他分享 >机器学习之手写阿拉伯数字识别

机器学习之手写阿拉伯数字识别

时间:2024-09-12 16:52:05浏览次数:10  
标签:plt keras 阿拉伯数字 代码 28 解读 复制 手写 识别

样本:github.com/mc6666/Kera…


markdown

代码解读

复制代码

# 手写阿拉伯数字识别 本项目将使用 TensorFlow 和 Keras 构建一个卷积神经网络(CNN)模型来识别手写阿拉伯数字。以下是各个步骤的详细说明。


python

代码解读

复制代码

# 导入必要的库 import tensorflow as tf import numpy as np import matplotlib.pyplot as plt from tensorflow.keras.preprocessing.image import ImageDataGenerator from skimage import io from skimage.transform import resize # 设置中文字体 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False


markdown

代码解读

复制代码

## 步骤1:加载 MNIST 手写阿拉伯数字数据 我们将使用 Keras 提供的 MNIST 数据集,它包含了 60000 个训练样本和 10000 个测试样本,每个样本是一个 28x28 像素的灰度图像。


python

代码解读

复制代码

mnist = tf.keras.datasets.mnist (x_train, y_train), (x_test, y_test) = mnist.load_data()


markdown

代码解读

复制代码

## 步骤2:数据清理 此步骤无需进行,因为 MNIST 数据集已经过清理和处理。


markdown

代码解读

复制代码

## 步骤3:特征工程 将图像数据的像素值缩放到 (0, 1) 之间,以提高模型的训练效果。


python

代码解读

复制代码

x_train_norm, x_test_norm = x_train / 255.0, x_test / 255.0


markdown

代码解读

复制代码

## 步骤4:数据分割 加载 MNIST 数据时已经完成了数据分割。


markdown

代码解读

复制代码

## 步骤5:建立改进的模型结构 我们将构建一个卷积神经网络(CNN),包含多个卷积层、池化层和全连接层。


python

代码解读

复制代码

model = tf.keras.models.Sequential([ tf.keras.layers.Reshape((28, 28, 1), input_shape=(28, 28)), tf.keras.layers.Conv2D(32, (3, 3), activation='relu'), tf.keras.layers.MaxPooling2D((2, 2)), tf.keras.layers.Conv2D(64, (3, 3), activation='relu'), tf.keras.layers.MaxPooling2D((2, 2)), tf.keras.layers.Conv2D(64, (3, 3), activation='relu'), tf.keras.layers.Flatten(), tf.keras.layers.Dense(256, activation='relu'), tf.keras.layers.BatchNormalization(), tf.keras.layers.Dropout(0.3), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.BatchNormalization(), tf.keras.layers.Dropout(0.3), tf.keras.layers.Dense(10, activation='softmax') ])


markdown

代码解读

复制代码

## 编译模型 我们使用 Adam 优化器和稀疏分类交叉熵损失函数来编译模型,并选择准确率作为评估指标。


python

代码解读

复制代码

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])


markdown

代码解读

复制代码

## 步骤6:使用数据增强进行模型训练 我们将使用图像数据生成器对训练数据进行数据增强,以提高模型的泛化能力。


python

代码解读

复制代码

datagen = ImageDataGenerator( rotation_range=10, width_shift_range=0.1, height_shift_range=0.1, zoom_range=0.1, shear_range=0.1 ) # 训练模型 history = model.fit(datagen.flow(x_train_norm.reshape(-1, 28, 28, 1), y_train, batch_size=128), steps_per_epoch=len(x_train_norm) // 128, epochs=20, validation_data=(x_test_norm.reshape(-1, 28, 28, 1), y_test))


markdown

代码解读

复制代码

## 绘制训练过程的准确率和损失 我们将绘制模型在训练过程中的准确率和损失,以便于观察模型的训练情况。


python

代码解读

复制代码

plt.figure(figsize=(12, 4)) plt.subplot(1, 2, 1) plt.plot(history.history['accuracy'], 'r', label='训练准确率') plt.plot(history.history['val_accuracy'], 'g', label='验证准确率') plt.title('模型准确率') plt.legend() plt.subplot(1, 2, 2) plt.plot(history.history['loss'], 'r', label='训练损失') plt.plot(history.history['val_loss'], 'g', label='验证损失') plt.title('模型损失') plt.legend() plt.show()


markdown

代码解读

复制代码

## 步骤7:评分 我们将使用测试数据集对模型进行评分,以评估其性能。


python

代码解读

复制代码

score = model.evaluate(x_test_norm.reshape(-1, 28, 28, 1), y_test, verbose=0) print(f'测试准确率: {score[1]:.4f}')


markdown

代码解读

复制代码

## 步骤8:评估 我们将使用测试数据集对模型进行预测,并显示前 20 个测试样本的实际值和预测值。


python

代码解读

复制代码

predictions = np.argmax(model.predict(x_test_norm.reshape(-1, 28, 28, 1)), axis=-1) print('实际值 :', y_test[:20]) print('预测值 :', predictions[:20])


markdown

代码解读

复制代码

## 步骤9:模型部署 将训练好的模型保存到文件,以便在后续的预测任务中使用。


python

代码解读

复制代码

model.save('data/DigitSense_model_improved.keras')


markdown

代码解读

复制代码

## 步骤10:新数据预测 定义一个函数,用于对新图像进行预测。


python

代码解读

复制代码

def predict_digit(file_path): # 读取图像并转为单色 image = io.imread(file_path, as_gray=True) # 缩放为 (28, 28) 大小的图像 image_resized = resize(image, (28, 28), anti_aliasing=True) # 反转颜色并reshape X = np.abs(1 - image_resized).reshape(1, 28, 28, 1) # 预测 prediction = np.argmax(model.predict(X), axis=-1) # 显示图像和预测结果 plt.imshow(image, cmap='gray') plt.title(f'预测结果: {prediction[0]}') plt.axis('off') plt.show() return prediction[0]


markdown

代码解读

复制代码

## 测试自定义图像 使用自定义图像进行测试,并显示预测结果。


python

代码解读

复制代码

for i in range(10): file_path = f'./data/images/{i}.png' predicted_digit = predict_digit(file_path) print(f'图像 {i}.png 的预测结果: {predicted_digit}')


markdown

代码解读

复制代码

## 显示模型汇总信息 显示模型的结构和参数数量。


python

代码解读

复制代码

model.summary()

原文链接:https://juejin.cn/post/7412899060827111475

标签:plt,keras,阿拉伯数字,代码,28,解读,复制,手写,识别
From: https://blog.csdn.net/weixin_47588164/article/details/142134629

相关文章

  • 深度学习|模型训练:手写 SimpleNet
    文章目录引言SimpleNet网络结构激活函数损失函数梯度计算SimpleNet类权重参数模型推理损失计算梯度计算SimpleNet概览模型训练数据准备训练过程结语引言从前文「深度学习|梯度下降法:误差最小化的权重参数」,我们知道了神经网络的学习就是“找寻使损失函数的值尽......
  • 苹果研究人员提出了一种新颖的AI算法来优化字节级表示以自动语音识别(ASR),并将其与UTF
    端到端(E2E)神经网络已成为多语言自动语音识别(ASR)的灵活且准确的模型。然而,随着支持的语言数量增加,尤其是像中文、日语、韩语(CJK)这样大字符集的语言,输出层的大小显著增长。这种扩展对计算资源、内存使用和资产大小产生了负面影响。在多语言系统中,这一挑战尤为严重,因为输出通常包......
  • 离线语音识别芯片让家用饮水茶吧机更智能
    随着科技的飞速发展,智能家居逐渐走进人们的生活。本文将探讨离线语音识别技术如何为家用饮水茶吧机带来智能化的全新体验。通过引入语音模块,家用饮水茶吧机得以实现更加便捷的操作方式,为用户带来更加智能的生活体验。在如今快速发展的时代,我们已经习惯了通过手机、电脑等设备来控制......
  • 夜班睡岗离岗识别检测系统
    夜班睡岗离岗识别检测系统依据智能视频分析,能够对值班中关键岗位的运行状态开展全天候实时识别检测,夜班睡岗离岗识别检测系统对区域工作人员的睡岗、离岗、缺岗、玩手机、抽烟等行为进行识别。在出入口岗亭,设定摄像头对岗位进行监测。在工地值班室部署离岗监测功能,根据监控人员是......
  • 人员离岗睡岗自动识别系统
    人员离岗睡岗自动识别系统依据机器学习智能视频分析技术,系统全自动识别职工的岗位状态。人员离岗睡岗自动识别系统一旦发现员工不在工作岗位的时间超出规定设置时间,系统会把报警信息传送到后台并同步信息到相关人员的手机上,随后通过现场视频监控摄像机语音提醒,让员工马上回到岗位,......
  • 煤矿反光衣穿戴识别系统
    煤矿反光衣穿戴识别系统对视频监控画面开展实时识别分析,可以及时预警施工工地工作员是不是按照规定穿反光衣。当煤矿反光衣穿戴识别系统发现视频监控界面中有工作人员不穿反光衣时,系统会积极主动开启警报提示。工程师依据煤矿情景开展有目的的算法优化。本优化计算方法具有较好的......
  • 释放静电行为监测识别系统
    释放静电行为监测识别系统对烟花爆竹厂进入车间的入口处进行实时监测分析,当释放静电行为监测识别系统监测一部分员工进到车间之前并没有触摸静电释放仪,系统就会自动开启警报同时语音提醒工人触碰静电释放器释放静电,并把警报截屏和视频保存到下来生成表格,推送给有关人员。静电、......
  • 睡岗离岗识别检测系统
    睡岗离岗识别检测系统根据监控视频ai分析技术可以24h不间断全自动识工作人员的岗位,一旦发现员工工作中不在位置的时间超过规定,睡岗离岗识别检测系统将立即警报,并把报警信息传送到后台。随后,通过现场语音视频监控摄像头给出语音提醒,便于员工可以立即回到岗位,系统同时会储存警报视频......
  • 工地安全帽识别闸机联动 YOLOv5
    工地安全帽识别闸机联动系统基于人脸识别技术和安全帽反光衣穿戴识别技术,工地安全帽识别闸机联动系统通过对施工人员的人脸、安全帽和反光衣进行识别,判断是否符合安全要求。只有当人脸识别成功且安全帽、反光衣齐全时,闸机才会打开允许施工人员进入工地。工地安全帽识别闸机联动......
  • 基于深度学习的骨龄检测识别系统(PyTorch+Pyside6+YOLOv5模型)
    骨龄是骨骼年龄的简称,需要借助于骨骼在X光摄像中的特定图像来确定。通常要拍摄左手手腕部位的X光片,医生通过X光片观察来确定骨龄。在2006年,《中华-05》骨龄标准被编入《中华人民共和国行业标准》,成为中国目前唯一的行业骨龄标准。而在《中华-05》中作者一般推荐使用RUS-CHN计......