HaaS AI之手写数字识别快速实践,在VSCode中搭建TensorFlow 2.0简单神经网络

简介: 本文将介绍如何在VSCode里面搭建TensorFlow的开发环境,并跑一个简单的神经网络来进行手写数据的识别。

1、Conda环境安装

参考HaaS AI之VSCode中搭建Python虚拟环境


2、创建TensorFlow Python虚拟环境

conda维护到TensorFlow2.0版本,基于Python3.7版本,因此线创建一个TensorFlow的Python虚拟环境,命名为tf2。

conda create --name tf2 python=3.7

2.1、激活环境

(tf2)$conda activate tf2

2.2、安装TensorFlow2.0

(tf2)$conda install tensorflow

2.3、安装Matplotlib

matplotlib,风格类似 Matlab 的基于 Python 的图表绘图系统。


matplotlib 是 Python最著名的绘图库,它提供了一整套和 matlab 相似的命 API,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入 GUI 应用程序中,在模型训练中常常用来绘制图形。


(tf2)$conda install matplotlib

3、TensorFlow之初体验

TensorFlow是Google开源的深度学习框架,是一个端到端平台,无论您是专家还是初学者,它都可以让您轻松地构建和部署机器学习模型。

image.png

3.1、简单手写数字识别网络

在VSCode中训练一个简单的手写数字识别网络模型:


1. 加载TensorFlow

In [1]:

#Mac OS KMP设置

import os

os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"

# 安装 TensorFlow

import tensorflow as tf

2. 载入并准备好 MNIST 数据集。将样本从整数转换为浮点数:

In [2]:

mnist = tf.keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()

x_train, x_test = x_train / 255.0, x_test / 255.0

3. 将模型的各层堆叠起来,以搭建 tf.keras.Sequential 模型。为训练选择优化器和损失函数:

In [3]:

model = tf.keras.models.Sequential([

 tf.keras.layers.Flatten(input_shape=(28, 28)),

 tf.keras.layers.Dense(128, activation='relu'),

 tf.keras.layers.Dropout(0.2),

 tf.keras.layers.Dense(10, activation='softmax')

])

model.compile(optimizer='adam',

             loss='sparse_categorical_crossentropy',

             metrics=['accuracy'])

4. 训练并验证模型:

In [4]:

model.fit(x_train, y_train, epochs=5)

model.evaluate(x_test,  y_test, verbose=2)

# 输出结果

Out[4]:

Train on 60000 samples

Epoch 1/5

60000/60000 [==============================] - 9s 154us/sample - loss: 0.3008 - accuracy: 0.9120

Epoch 2/5

60000/60000 [==============================] - 9s 147us/sample - loss: 0.1444 - accuracy: 0.9579

Epoch 3/5

60000/60000 [==============================] - 10s 170us/sample - loss: 0.1073 - accuracy: 0.9676

Epoch 4/5

60000/60000 [==============================] - 10s 174us/sample - loss: 0.0890 - accuracy: 0.9726

Epoch 5/5

60000/60000 [==============================] - 11s 180us/sample - loss: 0.0765 - accuracy: 0.9764

10000/1 - 1s - loss: 0.0379 - accuracy: 0.9777

[0.0705649911917746, 0.9777]

3.2、模型保存

model.save('tf_mnist_simple_net.h5')

3.3、模型预测

3.3.1、显示待测图片

从测试集中选择索引号为image_index的图片进行测试。


5. 模型预测

# 定义plot_image函数,查看指定个数数据图像

import matplotlib.pyplot as plt #导入matplotlib.pyplot

def plot_image(image):                  #输入参数为image

   pic=plt.gcf()                       #获取当前图像

   pic.set_size_inches(2,2)            ##设置图片大

 

   plt.imshow(image, cmap='binary')    #使用plt.imshow显示图片

   plt.show()                          #设置图片大

 

# 测试集中图片索引 0~10000

In [1]:

image_index=23

# 显示待预测值

plot_image(x_test[image_index])

image.png

3.3.2、打印测试结果

pred = model.predict_classes(x_test)

#打印预测结果

print(pred)

print("测试数字结果:")

print(pred[image_index])

# 输出结果

Out [1]:

[7 2 1 ... 4 5 6]

测试数字结果:

5

为了节省训练时间,把eporch迭代次数改为1,创建一个Jupyter notebook执行1次迭代训练上述模型:


https://v.youku.com/v_show/id_XNTA5Mzk2NzU2NA==.html


注意:


在创建*.ipynb和*.py文件的名称不能是tensorflow.ipynb/tensorflow.py,否则会出现各种库找不到的情形。


3.3.3、测试代码

将以上代码合在同一个文件中(去掉输出结果部分)就可以进行测试了。


4、FQA

Q1: Mac OS上在执行模型训练时出现错误

OMP: Error #15: Initializing libiomp5.dylib, but found libiomp5.dylib already initialized.


OMP: Hint This means that multiple copies of the OpenMP runtime have been linked into the program. That is dangerous, since it can degrade performance or cause incorrect results. The best thing to do is to ensure that only a single OpenMP runtime is linked into the process, e.g. by avoiding static linking of the OpenMP runtime in any library. As an unsafe, unsupported, undocumented workaround you can set the environment variable KMP_DUPLICATE_LIB_OK=TRUE to allow the program to continue to execute, but that may cause crashes or silently produce incorrect results. For more information, please see http://www.intel.com/software/products/support/.


Abort trap: 6


A1:

大概意思就是初始化libiomp5.dylib时发现已经初始化过了。


经过Google发现这似乎是一个Mac OS 才存在的特殊问题,在代码头部加入:


import os

os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"


相关文章
|
机器学习/深度学习 人工智能 算法
AI 基础知识从 0.6 到 0.7—— 彻底拆解深度神经网络训练的五大核心步骤
本文以一个经典的PyTorch手写数字识别代码示例为引子,深入剖析了简洁代码背后隐藏的深度神经网络(DNN)训练全过程。
1833 56
|
人工智能 安全 网络安全
2025攻防演习回顾,AI赋能下的网络安全新格局
网络安全实战攻防演习历经9年发展,已成为检验安全体系、洞察威胁趋势的重要手段。攻击呈现实战化、体系化特征,APT、0day、勒索攻击等手段升级,AI、大数据等新技术带来新风险。攻击入口多元化、工具智能化、API成重点目标,“AI+人工”协同攻击加剧威胁。面对挑战,企业需构建纵深防御体系,从被动防御转向主动对抗。瑞数信息通过动态安全技术与AI融合,实现0day防护、漏扫干扰、勒索应急等能力,打造WAAP超融合平台,助力关键基础设施构建智能、协同、前瞻的主动防御体系。
1043 1
|
机器学习/深度学习 自然语言处理 数据可视化
基于图神经网络的自然语言处理:融合LangGraph与大型概念模型的情感分析实践
本文探讨了在企业数字化转型中,大型概念模型(LCMs)与图神经网络结合处理非结构化文本数据的技术方案。LCMs突破传统词汇级处理局限,以概念级语义理解为核心,增强情感分析、实体识别和主题建模能力。通过构建基于LangGraph的混合符号-语义处理管道,整合符号方法的结构化优势与语义方法的理解深度,实现精准的文本分析。具体应用中,该架构通过预处理、图构建、嵌入生成及GNN推理等模块,完成客户反馈的情感分类与主题聚类。最终,LangGraph工作流编排确保各模块高效协作,为企业提供可解释性强、业务价值高的分析结果。此技术融合为挖掘非结构化数据价值、支持数据驱动决策提供了创新路径。
931 6
基于图神经网络的自然语言处理:融合LangGraph与大型概念模型的情感分析实践
|
数据采集 机器学习/深度学习 人工智能
运维人的“福音”?AI 驱动的自动化网络监控到底香不香!
运维人的“福音”?AI 驱动的自动化网络监控到底香不香!
1451 0
|
监控 负载均衡 安全
WebSocket网络编程深度实践:从协议原理到生产级应用
蒋星熠Jaxonic,技术宇宙中的星际旅人,以代码为舟、算法为帆,探索实时通信的无限可能。本文深入解析WebSocket协议原理、工程实践与架构设计,涵盖握手机制、心跳保活、集群部署、安全防护等核心内容,结合代码示例与架构图,助你构建稳定高效的实时应用,在二进制星河中谱写极客诗篇。
WebSocket网络编程深度实践:从协议原理到生产级应用
|
人工智能 运维 安全
AI来了,网络安全运维还能靠“人海战术”吗?
AI来了,网络安全运维还能靠“人海战术”吗?
519 28
|
机器学习/深度学习 资源调度 算法框架/工具
AI-ANNE: 将神经网络迁移到微控制器的深度探索——论文阅读
AI-ANNE框架探索将深度学习模型迁移至微控制器的可行路径,基于MicroPython在Raspberry Pi Pico上实现神经网络核心组件,支持本地化推理,推动TinyML在边缘设备中的应用。
709 10
|
人工智能 安全 网络安全
从不确定性到确定性,“动态安全+AI”成网络安全破题密码
2025年国家网络安全宣传周以“网络安全为人民,靠人民”为主题,聚焦AI安全、个人信息保护等热点。随着AI技术滥用加剧,智能化攻击频发,瑞数信息推出“动态安全+AI”防护体系,构建“三层防护+两大闭环”,实现风险前置识别与全链路防控,助力企业应对新型网络威胁,筑牢数字时代安全防线。(238字)
1285 1
|
人工智能 监控 数据可视化
如何破解AI推理延迟难题:构建敏捷多云算力网络
本文探讨了AI企业在突破算力瓶颈后,如何构建高效、稳定的网络架构以支撑AI产品化落地。文章分析了典型AI IT架构的四个层次——流量接入层、调度决策层、推理服务层和训练算力层,并深入解析了AI架构对网络提出的三大核心挑战:跨云互联、逻辑隔离与业务识别、网络可视化与QoS控制。最终提出了一站式网络解决方案,助力AI企业实现多云调度、业务融合承载与精细化流量管理,推动AI服务高效、稳定交付。
|
人工智能 自动驾驶 物联网
AI 来当“交通警察”:如何优化 5G 网络资源分配?
AI 来当“交通警察”:如何优化 5G 网络资源分配?
391 9

热门文章

最新文章