MLP手写数字识别(2)-模型构建、训练与识别(tensorflow)

查看tensorflow版本

import tensorflow as tfprint('Tensorflow Version:{}'.format(tf.__version__))
print(tf.config.list_physical_devices())

在这里插入图片描述

1.MNIST的数据集下载与预处理

import tensorflow as tf
from keras.datasets import mnist
from keras.utils import to_categorical(train_x,train_y),(test_x,test_y) = mnist.load_data()
X_train,X_test = tf.cast(train_x/255.0,tf.float32),tf.cast(test_x/255.0,tf.float32) # 归一化
y_train,y_test = to_categorical(train_y),to_categorical(test_y) # onehot
print(X_train[:5])
print(y_train[:5])

2.搭建MLP模型

from keras import Sequential
from keras.layers import Flatten,Dense
from keras import Inputmodel = Sequential()
model.add(Input(shape=(28,28)))
model.add(Flatten())
model.add(Dense(units=256,kernel_initializer='normal',activation='relu'))
model.add(Dense(units=10,kernel_initializer='normal',activation='softmax'))
model.summary()

在这里插入图片描述

3.模型训练

3.1 调用model.compile()函数对训练模型进行设置

model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])
  • loss=‘categorical_crossentropy’: 损失函数设置为交叉熵损失函数,在深度学习中用交叉熵模式训练效果会比较好。
  • optimizer=‘adam’: 优化器设置为adam, 在深度学习中可以让训练更快收敛,并提高准确率。
  • metrics=[‘accuracy’]:评估模式设置为准确度评估模式。

loss参数常用的损失函数

  • binary_crossentropy: 亦称作对数损失,logloss
  • categorical_crossentropy: 交叉熵损失函数,亦称作多类的对数损失,注意使用该目标函数时,需要将标签转化为onehot形式
  • sparse_categorical_crossentropy:稀疏交叉熵损失函数。
  • kullback_leibler_divergence: 从预测值概率分布Q到真值概率分布P的信息增益,用以度量两个分布的差异
  • poisson: 即(pred-target*log(pred))的均值
  • cosine_proximity:预测值与真实标签的余弦距离平均值的相反数

优化器

  • SGD
  • RMSprop
  • Adagrad
  • Adadelta
  • Adam
  • Adamax
  • Nadam
  • TFOptimizer

评估模式

  • binary_accuracy: 对二分类问题,计算在所有预测值上的平均正确率
  • categorical_accuracy: 对多分类问题,计算在所有预测值上的平均正确率
  • sparse_categorical_accuracy:与categorical_accuracy相同,在对稀疏的目标值预测时有用
  • top_k_categorical_accuracy: 计算top-k正确率,当预测值的前K个值中存在目标类别即认为预测正确
  • sparse_top_k_categorical_accuracy: 与top_k_categorical_accuracy作用相同,但适用于稀疏情况

3.2 调用model.fit()配置训练参数,开始训练,并保存训练结果。

H = model.fit(x=X_train,y=y_train,validation_split=0.2,epochs=20,batch_size=128,verbose=1)

在这里插入图片描述

4.显示模型准确率和误差

import matplotlib.pyplot as pltdef show_train(history,train,validation):plt.plot(history.epoch, history.history[train],label=train)plt.plot(history.epoch, history.history[validation],label=validation)plt.title(train)plt.legend()plt.show()show_train(H,'loss','val_loss')
show_train(H,'accuracy','val_accuracy')

在这里插入图片描述

5.使用测试数据进行识别

import numpy as np
import matplotlib.pyplot as pltdef pred_plot_images_lables(images,labels,start_idx,num=5):# 预测res = model.predict(images[start_idx:start_idx+num])res = np.argmax(res,axis=1)# 画图fig = plt.gcf()fig.set_size_inches(12,14)for i in range(num):ax = plt.subplot(1,num,1+i)ax.imshow(images[start_idx+i],cmap='binary')title = 'label=' + str(labels[start_idx+i]) + ', pred=' + str(res[i])ax.set_title(title,fontsize=10)ax.set_xticks([])ax.set_yticks([])plt.show()pred_plot_images_lables(X_test,test_y,0,5)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/831597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三生随记——博物馆的深夜秘密

博物馆的深夜秘密 第一章:古老的博物馆 在一座历史悠久的城市中,矗立着一座庞大的博物馆,收藏着无数的历史文物和艺术品。这座博物馆的外观宏伟壮观,充满了历史的痕迹。然而,随着夜幕的降临,博物馆里似乎隐…

Adobe 更新 Firefly Image 3 图像生成模型

一个工具或者模型,对于初次使用的人来说,易用性和超出预期的效果很能吸引使用者,suno和mj在这方面我感觉确实不错,第一次使用感觉很惊艳。 Adobe 更新 Firefly Image 3 图像生成模型,我用了mj的提示词,最后…

Python的控制流

Python中的控制流是指通过条件语句和循环来控制程序的执行流程。控制流使程序能够根据不同的条件执行不同的代码块,或者重复执行特定的代码块。本文将详细介绍Python中的条件语句(if语句)和循环(for循环和while循环)&a…

报错cannot import name ‘MultiHeadAttention‘ from ‘tensorflow.keras.layers‘

小伙伴们大家好,废话不多说,直接上解决方案 简单粗暴 ↓ ↓ ↓ ↓ ↓ ↓ ↓ 遇到这个问题我也是找了很多办法 我的python版本是3.8.5,我装的tensorflow版本是2.2.0,说实话 pip install keras-multi-head 这个方法…

低频卡 LF 的应用与技术特点

低频卡 LF(Low Frequency)在现代生活中有着广泛的应用,展现出独特的技术优势。 在畜牧业管理中,LF 卡被广泛用于动物标识,如电子耳标或项圈。这些卡可以实时追踪动物的健康状况、繁殖情况和移动轨迹,为畜牧…

【Cpp】类和对象#拷贝构造 赋值重载

标题:【Cpp】类和对象#拷贝构造 赋值重载 水墨不写bug 目录 (一)拷贝构造 (二)赋值重载 (三)浅拷贝与深拷贝 正文开始: (一)拷贝构造 拷贝构造函数&…

后端python构网并生成纹理图片发回给cesium做贴地处理

在后端Python中,你可以使用一些库来进行网格构建和纹理生成,然后将生成的纹理图片发送给Cesium进行贴地处理。以下是一种可能的方法: 构建网格:使用点的坐标信息和索引信息,可以使用一些三角网格生成算法来构建网格。你…

UG NX二次开发(C#)-获取Part中对象创建时的序号(*)

文章目录 1、前言2、UG NX的对象序号讲解3、采用UG NX二次开发或者建模序号4、注意事项1、前言 在UG NX中,我们创建任意一个对象,都会在模型历史中添加一个创建对象的编号,即是对象序号,这个是递增的,当删除中间产生的对象时,其序号会重新按照建模顺序重新排布。今天一个…

MLP实现fashion_mnist数据集分类(2)-函数式API构建模型(tensorflow)

使用函数式API构建模型,使得模型可以处理多输入多输出。 1、查看tensorflow版本 import tensorflow as tfprint(Tensorflow Version:{}.format(tf.__version__)) print(tf.config.list_physical_devices())2、fashion_mnist数据集分类模型 2.1 使用Sequential构建…

C++关联容器1——关联容器概述,map,set介绍,pair类型

关联容器 关联容器支持高效的关键字查找和访问。 两个主要的关联容器(associative-container)类型是map和set。 map中的元素是一些关键字一值(key-value)对:关键字起到索引的作用,值则表示与索引相关联的数据。 se…

内网安全-代理Socks协议路由不出网后渗透通讯CS-MSF控制上线简单总结

我这里只记录原理,具体操作看文章后半段或者这篇文章内网渗透—代理Socks协议、路由不出网、后渗透通讯、CS-MSF控制上线_内网渗透 代理-CSDN博客 注意这里是解决后渗透通讯问题,之后怎么提权,控制后面再说 背景 只有win7有网,其…

26 JavaScript学习:JSON和void

JSON 英文全称 JavaScript Object NotationJSON 是一种轻量级的数据交换格式。JSON是独立的语言JSON 易于理解。 JSON 实例 简单的 JSON 字符串实例: "{\"name\": \"Alice\", \"age\": 25, \"city\": \"San Francisco\&…

PX4二次开发快速入门(三):自定义串口驱动

文章目录 前言 前言 软件:PX4 1.14.0稳定版 硬件:纳雷NRA12,pixhawk4 仿照原生固件tfmini的驱动进行编写 源码地址: https://gitee.com/Mbot_admin/px4-1.14.0-csdn 修改 src/drivers/distance_sensor/CMakeLists.txt 添加 add…

Servlet详解(从xml到注解)

文章目录 概述介绍作用 快速入门Servelt的执行原理执行流程:执行原理 生命周期概述API 服务器启动,立刻加载Servlet对象(理解)实现Servlet方式(三种)实现Servlet接口实现GenericServlet抽象类,只重写service方法实现HttpServlet实现类实现Htt…

NodeJs入门知识

**************************************************************************************************************************************************************************** 1、配置Node.js与npm下载(精力所致,必有精品) …

算法--分治法

分治法是一种算法设计策略,它将一个复杂的问题分解成两个或多个相同或相似的子问题,直到这些子问题可以简单地直接解决。然后,这些子问题的解被合并以产生原始问题的解。 分治法通常遵循以下三个步骤: 分解:将原问题…

蓝桥杯-路径之谜

题目描述 小明冒充X星球的骑士,进入了一个奇怪的城堡。城堡里面什么都没有,只有方形石头铺成的地面。 假设城堡的地面时n*n个方格。如下图所示。 按习俗,骑士要从西北角走到东南角。可以横向或者纵向移动,但是不能斜着走&#x…

整数的表示和运算

目录 无符号整数 有符号整数 原码表示 原码的缺点 原码-->反码-->补码的转换 原码,补码快速转换技巧(手算) 补码的加法计算 补码的减法计算 总结 无符号整数 无符号整数,即"自然数",0,1,2,3,4,.... C语言中的无符号整数: unsigned short a 1; //无符…

前端初学者的 CSS 入门

文章导读:AI 辅助学习前端,包含入门、进阶、高级部分前端系列内容,当前是 CSS 的部分,瑶琴会持续更新,适合零基础的朋友,已有前端工作经验的可以不看,也可以当作基础知识回顾。 从这篇文章开始…

OneFlow深度学习框架入门与实践

OneFlow深度学习框架入门与实践 一、引言 在深度学习领域,框架的选择对于研究人员和开发者至关重要。OneFlow作为一款新兴的深度学习框架,凭借其高性能、易用性和灵活性,逐渐在业界崭露头角。本文将带领大家深入了解OneFlow深度学习框架&am…