TensorFlow详解3举个cnn卷积栗子

news2024/9/22 6:05:32

一、实现简单的cnn卷积神经网络

实现简单的cnn卷积神经网络(用到的是MNIST手写数字的数据库yann.lecun.com/exdb/mnist)
用到激活函数:
在这里插入图片描述

二、步骤

输入端是28281这样的一张图片,就是一张黑白的图片(假如他是一张彩色图片,它的高度是28283,RGB3通道红绿蓝三原色图像的高度);
经过第一层卷积,有32个过滤器,就会变成282832,之后经过一个石化层pool,变成141432这样一个网络结构,然后在经过第二层的卷积网络就会变成141464这样的网络结构,再经过一个pool亚采样层就会变成7764之后再对他进行一个扁平的序列化,它就变成111024最后经过一个全连接网络进行一个输出就会变成一个1110这样的一个结果;
大致就是这样。
在这里插入图片描述
conv2:inputs(需要的输入);
filters(表示过滤器的数目,也就是输出的深度如图为32个过滤器);
kernel_size(就是卷积核横向的大小,55);
strides步长,每隔多少步取样一次,此处设置为1,保证28个采样);
padding(卷积神经网络里面的补零,补零方案有两种,一种是valid表示采样的时候不超过28
28边界此时不需要补零,另一种same表示采样之后得到采样之后大小与之前一致,)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、pool方案

有max、avarage两种;
max_pooling2d
在这里插入图片描述

四、代码即注释详解

import numpy as np
import input_data #下载并手动导入MNIST手写数字库(55000*28*28其中一部分不然太多)
import tensorflow as tf
import os #解除警报必须写
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'#解除警报必须写
tf.compat.v1.disable_eager_execution()#新版tensorflow需要
#from tensorflow.examples.tutorials.mnist import input_data###太远了import不进来
#from tensorflow.contrib.learn.python.learn.datasets.mnist import read_data_sets#没卵用了老代码
#把下载下的mnist数据集使用读取数据集函数保存在py同文件夹下起名为mnist_data
#one_hot是一种编码(encoding)形式,叫做读热码,0,1,2,3,4,5,6,7,8,9
#这样的十位数字以一种独特的形式进行表示,比如0:1000000000;1:0100000000
#None表示tensor张量的一个维度,第一个维度可以是任何长度
mnist=input_data.read_data_sets('mnist_data',one_hot=True)
#输入(除以255是因为是0-255灰度值的范围)
input_x=tf.compat.v1.placeholder(tf.float32,[None,28*28])/255.
#输出10个数字的标签
output_y=tf.compat.v1.placeholder(tf.int32,[None,10])
#把输入图片变成28*28*1的矩阵样式
input_x_images=tf.reshape(input_x,[-1,28,28,1])
#从Test测试数据集选取3000个手写数字的图片和对应的标签
test_x=mnist.test.images[:3000]#0-2999一共三千张图片
test_y=mnist.test.labels[:3000]#标签
#构建卷积神经网络
#构建第一层卷积
conv1=tf.compat.v1.layers.conv2d(
    inputs=input_x_images,#形状【28,28,1】
    filters=32,#过滤器的数目也就是输出的深度
    kernel_size=[5,5],#过滤器在二维的大小
    strides=1,#步长是1
    padding='same',#采用same在外围补零方案
    activation=tf.nn.relu
)#经过这层神经网络图片会变成28*28*32的采样结果
#第一层池化(亚采样)
pool1=tf.compat.v1.layers.max_pooling2d(
    inputs=conv1,
    pool_size=[2,2],
    strides=2#步长是2
)#经过亚采样形状是14*14*32
#构建第二层卷积
conv2=tf.compat.v1.layers.conv2d(
    inputs=pool1,#形状【14,14,32】
    filters=64,#过滤器的数目也就是输出的深度
    kernel_size=[5,5],#过滤器在二维的大小
    strides=1,#步长是1
    padding='same',#采用same在外围补零的方案
    activation=tf.nn.relu
)#经过这层神经网络图片会变成14*14*64的采样结果
#第二层池化(亚采样)
pool2=tf.compat.v1.layers.max_pooling2d(
    inputs=conv2,#形状14*14*64
    pool_size=[2,2],#过滤器在二维的大小是2*2
    strides=2#步长是2
)#经过亚采样形状是7*7*64
#平坦化(flat)
flat=tf.compat.v1.reshape(pool2,[-1,7*7*64])
#用1024个神经元组成全连接层
dense=tf.compat.v1.layers.dense(inputs=flat,units=1024,activation=tf.nn.relu)
#Droput:丢失50%,rete=0.5
dropout=tf.compat.v1.layers.dropout(inputs=dense,rate=0.5,training=True)
#10个神经元的全链接层的构建,这里不用激活函数来做非线性化了
logits=tf.compat.v1.layers.dense(inputs=dropout,units=10)#输出形状表征【1*1*10】
#计算误差,用误差反向传递,优化神经网络参数让模型精度不断提高
#Cross entropy(交叉熵),再用Softmax计算百分比概率
loss=tf.compat.v1.losses.softmax_cross_entropy(onehot_labels=output_y,logits=logits)
#用Adam优化器最小化误差,学习率也就是步长为0.001
train_op=tf.compat.v1.train.AdamOptimizer(learning_rate=0.001).minimize(loss)
#计算神经网络精度即预测值和实际标签匹配程度
#返回(accuracy,update_op),会创建两个局部变量
accuracy=tf.compat.v1.metrics.accuracy(
    labels=tf.argmax(output_y,axis=1),
    predictions=tf.compat.v1.argmax(logits,axis=1)
)[1]
#创建一个会话
sess=tf.compat.v1.Session()
#初始化变量:全局和局部
init=tf.group(tf.compat.v1.global_variables_initializer(),tf.compat.v1.local_variables_initializer())
sess.run(init)
for i in range(20000):
    batch=mnist.train.next_batch(50)#从Train数据集里面取到下一组50个样本
    train_loss,train_op_=sess.run([loss,train_op],{input_x:batch[0],output_y:batch[1]})
    if i%100==0:
        test_accuracy=sess.run(accuracy,{input_x:test_x,output_y:test_y})
        print(("Step=%d,Train loss=%.4f,[Test accurancy=%.2f]")%(i,train_loss,test_accuracy))
#测试:打印20个预测值和真实值的对
test_output=sess.run(logits,{input_x:test_x[:20]})
inferenced_y=np.argmax(test_output,1)
print(inferenced_y,'Inferenced numbers')#推测的数字
print(np.argmax(test_y[:20],1),'Real numbers')#真实的数字

参数的设置至关重要,我这里简单的设置以下并没有寻求最优,下面是我简单改变其中一些参数之后运行出来的精确度等结果:
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Cat入门学习笔记整理

Cat入门学习笔记整理链路调用追踪介绍链路调用监控实现过程简析常见的链路追踪框架CAT报表介绍Transaction报表Event报表Problem报表Heartbeat报表Business报表Cat实战docker安装客户端集成API介绍Transaction扩展APIEventMetricCAT监控界面介绍DashBoardTransactionEventProbl…

C++ 构造函数与析构函数

1.构造函数的引出 一个实实在在的对象,应该有合法的属性,而不是在对象出来之后,再去设置属性,要实现这个过程,必须在对象出来的这一时刻初始化合法的值,而且不能由程序员调用,要给属性合法的值&…

熟悉requests用法,实现简单网站爬虫

本文模拟的是前后端分离项目,使用账号密码登录获取到token,拿着token加载用户信息,加载分页列表数据并存储文件。 本文用到的知识点: 1、urllib.parse URL解析; 2、session用法,保存所有请求在一个会话中&a…

muduo源码剖析--Buffer

Buffer类 Buffer类是自定义处理数据输入缓冲的类&#xff0c;底层是vector< char >&#xff0c;通过readIdx和writeIdx将缓冲区分为3个部分&#xff0c;第一部分是预留的8字节已经读出的缓冲区字节数、第二部分是还未读出的部分、第三部分是可写的部分。 Buffer类的设计…

JavaScript【三】JavaScript中的数组

文章目录&#x1f31f;前言&#x1f31f;数组&#x1f31f;声明&#xff1a;&#x1f31f; 隐式创建&#xff1a;&#x1f31f; 实例化构造函数&#xff1a;&#x1f31f; 注意&#xff1a;一个值为数组的长度。&#x1f31f; 访问&#xff1a;&#x1f31f; 遍历&#xff1a;&…

C++练级之初级:第三篇

C练级之初级&#xff1a;第三篇 1.探索C中函数重载的本质 &#x1f914;首先我们先解决一下为什么C支持函数重载&#xff0c;而C语言不支持&#xff1f; 这里就不得不提起编译链接了&#x1f601;&#xff1b; &#x1f449;这是编译链接篇 以这三个简单的文件为例&#xff1…

C51单片机串口通信(概念部分)

1.通信的基本概念 1.1&#xff1a;串行通信与并行通信 &#xff08;1&#xff09;.串行通信 串行通信是指用一根数据线将 一个字节的八个bit位连接&#xff0c;从低位开始依次传输。 优点&#xff1a;成本便宜&#xff0c;传输稳定 缺点&#xff1a;速度慢 并行通信是指将一…

重学Java设计模式-行为型模式-责任链模式

重学Java设计模式-行为型模式-责任链模式 内容摘自&#xff1a;https://bugstack.cn/md/develop/design-pattern/2020-06-18-重学 Java 设计模式《实战责任链模式》.html#重学-java-设计模式-实战责任链模式「模拟618电商大促期间-项目上线流程多级负责人审批场景」 责任链模…

stegano(图片隐写、摩斯密码)

附件是PDF&#xff0c;我们在选择内容时发现光标溢出了文本 说明这里还存在一些我们看不到的内容 直接CtrlA全选&#xff0c;CtrlC复制后新建一个纯文本文件 将复制的东西粘贴过去 粘贴后发现果然多出来了一些东西&#xff0c;提取出来 BABA BBB BA BBA ABA AB B AAB ABAA A…

3.2 三角分解法

思维导图&#xff1a; 3.2 矩阵的三角分解 3.2.1 什么是矩阵的三角分解&#xff1a; 矩阵的三角分解&#xff0c;也称为LU分解&#xff0c;是一种将一个矩阵分解为一个下三角矩阵和一个上三角矩阵的方法。该分解通常用于解线性方程组和计算矩阵的行列式和逆矩阵。 设A为n*n的…

【通世智库】宁晓红:医疗更完整的样子

2022年的10月&#xff0c;北京协和医院缓和医学中心成立了&#xff0c;这是巨大的好消息&#xff01;北京协和医院连续13年蝉联中国医院排行榜榜首&#xff0c;它率先成立了缓和医学中心&#xff0c;可见缓和医疗在医学领域的重要地位和不可估量的价值。【作者&#xff1a;宁晓…

软件安全之CRC检测

CRC介绍 在玩某些游戏&#xff0c;例如fps类游戏时&#xff0c;你想要修改某些特定的数值实现一些功能&#xff0c;这时你很有可能会被查封账号甚至禁封机器码。因为你更改了游戏中的数据&#xff0c;从而导致接收方收到”错误的数据“。为尽量提高接收方收到数据的正确率&…

可视化Echarts中title、tooltip、legend的常用属性设置

title中常用的设置 配置项--tooltip 配置项--legend title中常用的设置 title 标题组件&#xff0c;包含主标题和副标题。 以下是常用的对标题的设置 title:{//设置图表的标题text:"主标题",link:"baidu.com", //设置标题超链接target:"self&q…

2023最新谷粒商城笔记之支付服务篇(全文总共13万字,超详细)

支付服务 这里我们是使用的支付宝进行支付&#xff0c;所以需要调用支付宝的相关API&#xff0c;下面来了解一下怎样使用支付宝进行线上支付。 支付宝配置相关概念 支付宝开放平台传送门&#xff1a;支付宝开放平台 网站支付DEMO传送门&#xff1a;手机网站支付 DEMO &…

数字滤波器设计——IIR 滤波器

数字滤波器设计实践介绍 此示例说明如何使用 Signal Processing Toolbox 产品中的 designfilt 函数&#xff0c;根据频率响应设定设计 FIR 和 IIR 滤波器。该示例重点讲述低通滤波器&#xff0c;但大多数结果也适用于其他响应类型。 此示例主要介绍数字滤波器的设计&#xff…

D3.js实现线条的流动效果(从一端移动到另一端并且变色)

参考&#xff1a; SVG&#xff1a;理解stroke-dasharray和stroke-dashoffset属性 使用SVG CSS实现动态霓虹灯文字效果 纯CSS实现帅气的SVG路径描边动画效果 实现的效果为&#xff1a;路径左移到完全看不见的地方&#xff0c;然后一边右移&#xff0c;一边从黑色变为红色 <…

社科院与杜兰大学金融管理硕士项目—人生的每一条路都可以看作是正确的路

成年人的世界里没有什么是容易的。生活中经常听到人说&#xff1a;早知道现在过得这么辛苦&#xff0c;当年真应该好好读书&#xff1b;早知道这个行业这么难出头&#xff0c;当年真不应该踏入这一行&#xff1b;早知道爱人这么不靠谱&#xff0c;当年不跟他结婚就好了……有时…

系统集成项目管理工程师软考知识点(每天更新)

第一章指路&#xff1a;系统集成项目管理工程师软考知识点&#xff08;第一章已完结&#xff09;_程序猿幼苗的博客-CSDN博客 第二章指路&#xff1a;系统集成项目管理工程师软考知识点&#xff08;第二章已完结&#xff09;_程序猿幼苗的博客-CSDN博客 本专栏将会更新完整~ …

【DRF开发手册】使用 Django Rest Framework 的 @action 定义自定义方法

本文节选自笔者博客&#xff1a; https://www.blog.zeeland.cn/archives/so3f209hfeac &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是Zeeland&#xff0c;全栈领域优质创作者。&#x1f4dd; CSDN主页&#xff1a;Zeeland&#x1f525;&#x1f4e3; 我的博客&…

C++ Primer Plus(第6版) 全书重点学习笔记

目录 第10章 对象和类 10.1 过程性编程和面向对象编程 10.2 抽象和类 10.2.1 类简介 10.2.2 实现类成员函数 10.3 类的构造函数和析构函数 10.3.1 声明和定义构造函数 10.3.2 使用构造函数 10.3.3 默认构造函数 10.3.4 析构函数 10.4 this指针 10.5 对象数组 10.6 …