当前位置: 首页 > news >正文

网站推广的效果好做系统去哪个网站好

网站推广的效果好,做系统去哪个网站好,网站模板怎么建站,购买平台有哪些TensorFlow 2.0 (五) - mnist手写数字识别(CNN卷积神经网络) 源代码/数据集已上传到 Github - tensorflow-tutorial-samples 大白话讲解卷积神经网络工作原理#xff0c;推荐一个bilibili的讲卷积神经网络的视频#xff0c;up主从youtube搬运过来#xff0c;用中文讲了一遍。…TensorFlow 2.0 (五) - mnist手写数字识别(CNN卷积神经网络) 源代码/数据集已上传到 Github - tensorflow-tutorial-samples 大白话讲解卷积神经网络工作原理推荐一个bilibili的讲卷积神经网络的视频up主从youtube搬运过来用中文讲了一遍。 这篇文章是 TensorFlow 2.0 Tutorial 入门教程的第五篇文章介绍如何使用卷积神经网络Convolutional Neural Network, CNN来提高mnist手写数字识别的准确性。之前使用了最简单的784x10的神经网络达到了 0.91 的正确性而这篇文章在使用了卷积神经网络后正确性达到了0.99 卷积神经网络Convolutional Neural Network, CNN是一种前馈神经网络它的人工神经元可以响应一部分覆盖范围内的周围单元对于大型图像处理有出色表现。 卷积神经网络由一个或多个卷积层和顶端的全连通层对应经典的神经网络组成同时也包括关联权重和池化层pooling layer。这一结构使得卷积神经网络能够利用输入数据的二维结构。与其他深度学习结构相比卷积神经网络在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网络卷积神经网络需要考量的参数更少使之成为一种颇具吸引力的深度学习结构。 ——维基百科 1. 安装TensorFlow 2.0 Google与2019年3月发布了TensorFlow 2.0TensorFlow 2.0 清理了废弃的API通过减少重复来简化API并且通过Keras能够轻松地构建模型从这篇文章开始教程示例采用TensorFlow 2.0版本。 1pip install tensorflow2.0.0-beta0或者在这里下载whl包安装https://pypi.tuna.tsinghua.edu.cn/simple/tensorflow/ 2. 代码目录结构 1 2 3 4 5 6 7 8 9 10 11 12 13data_set_tf2/ # TensorFlow 2.0的mnist数据集|--mnist.npz test_images/ # 预测所用的图片|--0.png|--1.png|--4.png v4_cnn/|--ckpt/ # 模型保存的位置|--checkpoint|--cp-0005.ckpt.data-00000-of-00001|--cp-0005.ckpt.index|--predict.py # 预测代码|--train.py # 训练代码3. CNN模型代码train.py 模型定义的前半部分主要使用Keras.layers提供的Conv2D卷积与MaxPooling2D池化函数。 CNN的输入是维度为 (image_height, image_width, color_channels)的张量mnist数据集是黑白的因此只有一个color_channel颜色通道一般的彩色图片有3个R,G,B,熟悉Web前端的同学可能知道有些图片有4个通道(R,G,B,A)A代表透明度。对于mnist数据集输入的张量维度就是(28,28,1)通过参数input_shape传给网络的第一层。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24import os import tensorflow as tf from tensorflow.keras import datasets, layers, modelsclass CNN(object):def __init__(self):model models.Sequential()# 第1层卷积卷积核大小为3*332个28*28为待训练图片的大小model.add(layers.Conv2D(32, (3, 3), activationrelu, input_shape(28, 28, 1)))model.add(layers.MaxPooling2D((2, 2)))# 第2层卷积卷积核大小为3*364个model.add(layers.Conv2D(64, (3, 3), activationrelu))model.add(layers.MaxPooling2D((2, 2)))# 第3层卷积卷积核大小为3*364个model.add(layers.Conv2D(64, (3, 3), activationrelu))model.add(layers.Flatten())model.add(layers.Dense(64, activationrelu))model.add(layers.Dense(10, activationsoftmax))model.summary()self.model modelmodel.summary()用来打印我们定义的模型的结构。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24Model: sequential _________________________________________________________________ Layer (type) Output Shape Param # conv2d (Conv2D) (None, 26, 26, 32) 320 _________________________________________________________________ max_pooling2d (MaxPooling2D) (None, 13, 13, 32) 0 _________________________________________________________________ conv2d_1 (Conv2D) (None, 11, 11, 64) 18496 _________________________________________________________________ max_pooling2d_1 (MaxPooling2 (None, 5, 5, 64) 0 _________________________________________________________________ conv2d_2 (Conv2D) (None, 3, 3, 64) 36928 _________________________________________________________________ flatten (Flatten) (None, 576) 0 _________________________________________________________________ dense (Dense) (None, 64) 36928 _________________________________________________________________ dense_1 (Dense) (None, 10) 650 Total params: 93,322 Trainable params: 93,322 Non-trainable params: 0 _________________________________________________________________我们可以看到每一个Conv2D和MaxPooling2D层的输出都是一个三维的张量(height, width, channels)。height和width会逐渐地变小。输出的channel的个数是由第一个参数(例如32或64)控制的随着height和width的变小channel可以变大从算力的角度。 模型的后半部分是定义输出张量的。layers.Flatten会将三维的张量转为一维的向量。展开前张量的维度是(3, 3, 64) 转为一维(576)的向量后紧接着使用layers.Dense层构造了2层全连接层逐步地将一维向量的位数从576变为64再变为10。 后半部分相当于是构建了一个隐藏层为64输入层为576输出层为10的普通的神经网络。最后一层的激活函数是softmax10位恰好可以表达0-9十个数字。 最大值的下标即可代表对应的数字使用numpy很容易计算出来 1 2 3 4 5 6import numpy as npy1 [0, 0.8, 0.1, 0.1, 0, 0, 0, 0, 0, 0] y2 [0, 0.1, 0.1, 0.1, 0.5, 0, 0.2, 0, 0, 0] np.argmax(y1) # 1 np.argmax(y2) # 44. mnist数据集预处理train.py 1 2 3 4 5 6 7 8 9 10 11 12 13class DataSource(object):def __init__(self):# mnist数据集存储的位置如何不存在将自动下载data_path os.path.abspath(os.path.dirname(__file__)) /../data_set_tf2/mnist.npz(train_images, train_labels), (test_images, test_labels) datasets.mnist.load_data(pathdata_path)# 6万张训练图片1万张测试图片train_images train_images.reshape((60000, 28, 28, 1))test_images test_images.reshape((10000, 28, 28, 1))# 像素值映射到 0 - 1 之间train_images, test_images train_images / 255.0, test_images / 255.0self.train_images, self.train_labels train_images, train_labelsself.test_images, self.test_labels test_images, test_labels因为mnist数据集国内下载不稳定因此数据集也同步到了Github仓库。 对mnist数据集的介绍大家可以参考这个系列的第一篇文章TensorFlow入门(一) - mnist手写数字识别(网络搭建)。 5. 开始训练并保存训练结果train.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22class Train:def __init__(self):self.cnn CNN()self.data DataSource()def train(self):check_path ./ckpt/cp-{epoch:04d}.ckpt# period 每隔5epoch保存一次save_model_cb tf.keras.callbacks.ModelCheckpoint(check_path, save_weights_onlyTrue, verbose1, period5)self.cnn.model.compile(optimizeradam,losssparse_categorical_crossentropy,metrics[accuracy])self.cnn.model.fit(self.data.train_images, self.data.train_labels, epochs5, callbacks[save_model_cb])test_loss, test_acc self.cnn.model.evaluate(self.data.test_images, self.data.test_labels)print(准确率: %.4f共测试了%d张图片 % (test_acc, len(self.data.test_labels)))if __name__ __main__:app Train()app.train()在执行python train.py后会得到以下的结果 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15Train on 60000 samples Epoch 1/5 60000/60000 [] - 45s 749us/sample - loss: 0.1477 - accuracy: 0.9536 Epoch 2/5 60000/60000 [] - 45s 746us/sample - loss: 0.0461 - accuracy: 0.9860 Epoch 3/5 60000/60000 [] - 50s 828us/sample - loss: 0.0336 - accuracy: 0.9893 Epoch 4/5 60000/60000 [] - 50s 828us/sample - loss: 0.0257 - accuracy: 0.9919 Epoch 5/5 59968/60000 [.] - ETA: 0s - loss: 0.0210 - accuracy: 0.9930 Epoch 00005: saving model to ./ckpt/cp-0005.ckpt 60000/60000 [] - 51s 848us/sample - loss: 0.0210 - accuracy: 0.9930 10000/10000 [] - 3s 290us/sample - loss: 0.0331 - accuracy: 0.9901 准确率: 0.9901共测试了10000张图片可以看到在第一轮训练后识别准确率达到了0.95365轮之后使用测试集验证准确率达到了0.9901 在第五轮时模型参数成功保存在了./ckpt/cp-0005.ckpt。接下来我们就可以加载保存的模型参数恢复整个卷积神经网络进行真实图片的预测了。 6. 图片预测predict.py 为了将模型的训练和加载分开预测的代码写在了predict.py中。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40import tensorflow as tf from PIL import Image import numpy as npfrom train import CNN python 3.7 tensorflow 2.0.0b0 pillow(PIL) 4.3.0 class Predict(object):def __init__(self):latest tf.train.latest_checkpoint(./ckpt)self.cnn CNN()# 恢复网络权重self.cnn.model.load_weights(latest)def predict(self, image_path):# 以黑白方式读取图片img Image.open(image_path).convert(L)img np.reshape(img, (28, 28, 1)) / 255.x np.array([1 - img])# API refer: https://keras.io/models/model/y self.cnn.model.predict(x)# 因为x只传入了一张图片取y[0]即可# np.argmax()取得最大值的下标即代表的数字print(image_path)print(y[0])print( - Predict digit, np.argmax(y[0]))if __name__ __main__:app Predict()app.predict(../test_images/0.png)app.predict(../test_images/1.png)app.predict(../test_images/4.png)最终执行predict.py可以看到 1 2 3 4 5 6 7 8 9 10$ python predict.py ../test_images/0.png [1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]- Predict digit 0 ../test_images/1.png [0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]- Predict digit 1 ../test_images/4.png [0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]- Predict digit 4与TensorFlow1.0的区别总结 数据集从tensorflow.examples.tutorials.mnist切换到了tensorflow.keras.datasetsKeras的接口成为了主力datasets, layers, models都是从Keras引入的而且在网络的搭建上代码更少更为简洁。 附 推荐 一篇文章入门 Python
http://www.yutouwan.com/news/280296/

相关文章:

  • 网页网站自做全搞定wordpress产品页插件
  • 登录广东省建设监理协会网站首页永安市住房与城乡建设局网站
  • 菠菜网站的代理怎么做建筑工程公司有什么职位
  • 洛阳霞光高端定制网站建设天河网站建设哪家好
  • 怎样怎样优化网站建设网站建设存在的问题和不足
  • 网站开发学生鉴定表如何介绍自己做的网站
  • 网站建设 工商注册凡科互动app下载
  • ueditor wordpress4.5郑州网站关键词优化外包
  • 新网站百度搜不到我想开网店需要怎么做
  • 网站开发需要的人员做网站怎么宣传运营
  • asp.net网站开发流程及相关工具六安网站建设培训
  • 搭建网站的架构广州公司网页制作
  • 医院网站和公众号建设方案可以做数学题的网站
  • 建设音乐网站的目的wordpress链接失效
  • 专业网站制作案例广告制作公司
  • 网站开发能不能用win7系统搜狗站长管理平台
  • 网站内容维护合同学院网站板块
  • 电子商务网站建设结构分析郑州网站建设首选创新
  • 网站建设工作量评估单页企业网站模板
  • 网站建设考察试卷网站开发费用投入情况
  • 流量统计网站推广法wordpress链接在哪里设置密码
  • 免费外链网站wordpress调用header
  • 济南免费网站建设排版设计是什么
  • 建筑公司网站制作陕西省建设厅网站首页
  • 手机网站怎么建百度竞价规则
  • 贵州两学一做专题网站宠物社区网站开发设计文档
  • 网站的域名和ip地址如何重新解析工业品牌设计公司
  • 个人怎么创建网站seo短视频网页入口引流方法
  • 在哪个网站找学做包子互联网营销师证书报名入口
  • 春风家教营销型网站建设wordpress 引用 格式