09-CNN手写数字识别

CNN卷积神经网络的本质就是卷积运算
维度的调整:
tf.reshape(imageInput,[-1,28,28,1])
imageInput为[None,784],N行* 784维 调整为 M28行28列*1通道 即:二维转化为四维数据
参数一:等价于运算结果M
参数二:28 28 表示图片的宽高信息 1表示channel通道个数,因为当前读取的是灰度图故为1

定义变量:
tf.Variable(tf.truncated_normal([5,5,1,32],stddev = 0.1))
参数一:最终生成的维度,这里设置为5*5的卷积内核大小,输入的维度;输入的维度或当前通道数或imageInputReshape最后一位为1,输出为32维
参数二:期望方差

layer1:激励函数+卷积运算
imageInputReshape : w0:5,5,1,32
通过激励函数,来完成当前的卷积运算
tf.nn.relu(tf.nn.conv2d(imageInputReshape,w0,strides=1,1,1,1],padding='SAME')+b0)
参数一:输入图像数据,imageInputReshape是一个M2828*1
参数二:权重矩阵 w0是一个5,5,1,32的维度
参数三:每次移动的步长,这里的步长是个四维的
参数四:SAME表示卷积核可以停留在图像的边缘

其实池化就等价于采样
创建池化层,是得数据量大大减少;
tf.nn.max_pool(layer1,ksize=[1,4,4,1],strides=[1,4,4,1],padding='SAME')
参数一:layer1
参数二:ksize=[1,4,4,1] 表明输入数据是一个M282832 这个数据与对应的ksize相除即M/1 28/4 28/4 32/1=M7732即为池化层的输出结果
参数三:池化层的步长
参数四:池化层是否可以停留在图像的边缘
而max_pool即将[1 2 3 4]结果池化层后变为一维[4],即原来数组中最大的内容

#1 import 导包
import tensorflow as tf
import numpy as np
from tensorflow.examples.tutorials.mnist import input_data
# 2 load data 加载数据
mnist = input_data.read_data_sets('E:\\Jupyter_workspace\\study\\DL\\MNIST_data',one_hot = True)
# 3 input
imageInput = tf.placeholder(tf.float32,[None,784]) # 输入图片为28*28=784维,图片个数为None 
labeInput = tf.placeholder(tf.float32,[None,10]) # 10表示标签
# 4 data reshape 数据维度的调整
# [None,784]->M*28*28*1  2D->4D  28*28 wh 1 channel 
imageInputReshape = tf.reshape(imageInput,[-1,28,28,1])
# 5 实现卷积运算 w0 : 卷积内核 5*5 out:32  in:1 
w0 = tf.Variable(tf.truncated_normal([5,5,1,32],stddev = 0.1))#w0为权重矩阵,作为卷积的内核来使用,卷积核大小为5*5,输出为32维 输入为1维
b0 = tf.Variable(tf.constant(0.1,shape=[32]))#偏移矩阵一般放在卷积运算之后来进行相加,故相加的时候改变的只是最后一个维度,所以必须让偏移矩阵和权重矩阵的最后一个维度保持一致,即32维
# 6 layer1:激励函数+卷积运算
# imageInputReshape : M*28*28*1  w0:5,5,1,32  
layer1 = tf.nn.relu(tf.nn.conv2d(imageInputReshape,w0,strides=[1,1,1,1],padding='SAME')+b0)#卷积运算
# M*28*28*32
# pool 采样 数据量减少很多M*28*28*32 => M*7*7*32
layer1_pool = tf.nn.max_pool(layer1,ksize=[1,4,4,1],strides=[1,4,4,1],padding='SAME')#创建池化层
# [1 2 3 4]->[4]# 7 layer2 out : 激励函数+乘加运算:  softmax是一个回归计算函数(激励函数 + 乘加运算)
# [7*7*32,1024]
#实现第二层layer2输出层out:(激励函数+乘加运算)作为另外一个乘加运算的输入内容,最后的计算结果是一个softmax回归计算函数
w1 = tf.Variable(tf.truncated_normal([7*7*32,1024],stddev=0.1))#二维
b1 = tf.Variable(tf.constant(0.1,shape=[1024]))
h_reshape = tf.reshape(layer1_pool,[-1,7*7*32])# M*7*7*32 -> N*N1  维度转换  将四维数据转换维二维数据
# [N*7*7*32]  [7*7*32,1024] = N*1024
h1 = tf.nn.relu(tf.matmul(h_reshape,w1)+b1)
# 7.1 softMax
w2 = tf.Variable(tf.truncated_normal([1024,10],stddev=0.1))
b2 = tf.Variable(tf.constant(0.1,shape=[10]))
pred = tf.nn.softmax(tf.matmul(h1,w2)+b2)# N*1024  1024*10 = N*10   最后的输出结果维N*10  N表示N张图片,10表示0-9这10个维度上分布的概率
# N*10( 概率 )N1【0.1 0.2 0.4 0.1 0.2 。。。】0.1表示0出现的概率 0.2表示1出现的概率 0.4表示2出现的概率依此类推
# label。        【0 0 0 0 1 0 0 0。。。】
loss0 = labeInput*tf.log(pred)
loss1 = 0
# 7.2 
for m in range(0,500):#测试训练时每次500张for n in range(0,10):#label标签总共有10个维度,需要把这10个维度中的内容进行累加loss1 = loss1 - loss0[m,n]
loss = loss1/500#总共有500组数据# 8 train训练过程,让当前的误差尽可能的减小
train = tf.train.GradientDescentOptimizer(0.01).minimize(loss)#梯度下降法,每次下降0.01,目标是尽可能的缩小当前loss的步长
# 9 run
with tf.Session() as sess:sess.run(tf.global_variables_initializer())#完成所以图片的初始for i in range(100):images,labels = mnist.train.next_batch(500)#分别把图片和标签读取出来,每次读取500张图片进行训练sess.run(train,feed_dict={imageInput:images,labeInput:labels})#完成pred的获取pred_test = sess.run(pred,feed_dict={imageInput:mnist.test.images,labeInput:labels})#获得最终的预测结果,是10维的;与label标签都一样也都是10维的acc = tf.equal(tf.arg_max(pred_test,1),tf.arg_max(mnist.test.labels,1))#比较pred和label最大值是否相等acc_float = tf.reduce_mean(tf.cast(acc,tf.float32))#转换均值为float浮点类型acc_result = sess.run(acc_float,feed_dict={imageInput:mnist.test.images,labeInput:mnist.test.labels})print(acc_result)

在这里插入图片描述

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

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

相关文章

Opencv将处理后的视频保存出现的问题

问题描述: 代码运行过程中,imshow出来的每帧的效果图是正确的,但是按照网上的方法保存下来却是0kb,打开不了。 参考的网上的一些方法,均是失败的,具体原因我也不清楚: 1、例如我这样设置&#x…

黑白图片颜色反转并保存

将图像的黑白颜色反转并保存 import cv2 # opencv读取图像 img cv2.imread(rE:\Python-workspace\OpenCV\OpenCV/YY.png, 1) cv2.imshow(img, img) img_shape img.shape # 图像大小(565, 650, 3) print(img_shape) h img_shape[0] w img_shape[1] # 彩色图像转换为灰度图…

家猫WEB系统

现在只放源码在些.为它写应用很简单有空整理文档演示地址:jiamaocode.com/os/ 源码:http://jiamaocode.com/ProCts/2011/04/14/1918/1918.html转载于:https://www.cnblogs.com/jiamao/archive/2011/04/16/2018339.html

plesk 运行不了php,如何在Plesk中使用composer(使用其他版本的PHP运行Composer)

对于基于Plesk的服务器, composer的默认安装将使用系统安装的PHP版本, 而不使用Plesk所安装的任何版本。尽管Composer至少需要PHP 5.3.2, 但是当你尝试在需要特定版本PHP的项目中安装依赖项时, 就会出现问题。例如, 如果你有一个至少需要PHP 7.2的项目, 并且系统的默认PHP安装是…

Error: Flash Download failed - Target DLL has been cancelled

博主联系方式: QQ:1540984562 QQ交流群:892023501 群里会有往届的smarters和电赛选手,群里也会不时分享一些有用的资料,有问题可以在群里多问问。 由于换了新电脑,keil重装了下,然而之前的MCU的支持包没有安装,以及一些其他的问题,导致可以编译但是不能将程序烧录到单片…

我也谈委托与事件

虽然在博客园里面已经有很多关于C#委托和事件的文章,但是为了自己在学习的过程中,加深对委托的理解,我还是决定写一下自己的心得体会。以备他日在回来复习。委托(delegate)是一个类,但是这个类在声明的时候…

设计合理的实验方案来研究阳离子改性棉织物与未改性棉的染色动力学性能

染色动力学性能研究染色的什么问题?设计合理的实验方案来研究阳离子改性棉织物与未改性棉的染色动力学性能?并指出如何计算反映染色动力学的主要参数? 标准答案: 染色动力学研究染色速率问题。 为了研究阳离子改性棉纤维及未改性棉纤维对活性染料染色动力学性能,首先要测…

SQL SERVER的锁机制(四)——概述(各种事务隔离级别发生的影响)

SQL SERVER的锁机制(一)——概述(锁的种类与范围) SQL SERVER的锁机制(二)——概述(锁的兼容性与可以锁定的资源) 本文上接SQL SERVER的锁机制(三)——概述&a…

如何测定拼色染液中,各染料在不同染色时间时,染液中残留染料量及织物上吸附上染的染料量?

如何测定拼色染液中,各染料在不同染色时间时,染液中残留染料量及织物上吸附上染的染料量? 标准答案: 通常依据各染料对特定波长光的吸光度具有加和性;吸光度值符合朗伯比尔定律,吸光度与浓度成正比;吸光度值分光光度计可以读出;通过联立方程,可以求出拼色各染料在染液中…

oracle云数据库 免费的吗,使用免费的Oracle云服务-创建ATP数据库

前面我们讲了在Oracle的云主机安装数据库,虽然现在安装数据库已经很简单了,但是真正要在生产环境使用,还是需要进行很多配置和优化的,这通常需要专业的人员。而ATP(自治事务性数据库服务)正是Oracle云提供的非常强大的数据库云服务…

请分析比较下列四种染料在相同浓度和相同温度的水染液中的聚集度大小?

请分析比较下列四种染料在相同浓度和相同温度的水染液中的聚集度大小? 标准答案: 染料聚集度从大到小的顺序为:3〉1〉4〉2 比较1-4染料结构差异,1、2共轭体系较短,3、4共轭体系较长,1、3磺酸基在端部,2、4磺酸基在中间; 染料3共轭体系长,范德华力大,而水溶性磺酸基团…

VC++动态链接库深入浅出(转)

1.概论  先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量、函数或类。在仓库的发展史上经历了“无库-静态链接库-动态链接库”的时代。 静态链接库与动态链…

《Two Dozen Short Lessons in Haskell》(二十)分数

《Two Dozen Short Lessons in Haskell》(Copyright © 1995, 1996, 1997 by Rex Page,有人翻译为Haskell二十四学时教程,该书如果不用于赢利,可以任意发布,但需要保留他们的copyright)这本书是学习 Ha…

数字图像课程工程大作业分析

试题分析: 在连续的视频中对火焰及水柱的轨迹检测,效果如图。 ** 提示: 1、火焰可利用亮度和颜色 2、水柱的轨迹需要先用背景差分获得水柱的连通域,然后利用连通域上的像素点进行曲线的拟合,水枪的位置视为已知&#…

设计电子商务网站的10个技巧(转自ITEye)

导读:随着先进科学技术的应用,人们无需外出逛几个小时来“猎”东西,直接坐在家里就可以购买所需商品,支付服务费用。你只需一台电脑就能搞定。人们习惯了周到的服务和漂亮的橱窗,对网店的选择也不例外。因此&#xff0…

C++语法:vector的使用

【1】vector的创建与元素插入【2】vector元素的访问【3】vector的基本使用技巧【4】vector的几个重要操作【1】vector的创建与元素插入 std::vector<cv::Point> points; //vector容器中保存的类型是Point for (int i 0;i < 10;i) {float x rng.uniform(0, img.cols…

C++语法:求vector中的最大值及其位置

代码&#xff1a; #include <iostream> #include <vector> #include <algorithm> using namespace std;int main(){vector<int> a { 2,4,6,7,1,0,8,9,6,3,2 };auto maxPosition max_element(a.begin(), a.end());cout << *maxPosition <&l…

C#编码简单性之函数篇(如何编写简短的C#代码,随时更新)

作者&#xff1a;陈勇出处&#xff1a;blog.csdn.net/cheny_com这是编码简单性系列中的其中一篇&#xff0c;之前几篇包括代码篇和语义篇。因为要积累案例&#xff0c;会随时更新。之前提到&#xff1a;编码简单性的“心法”就是&#xff1a;只要屏幕上有任何两部分代码看上去相…

R学习笔记(1):R是什么

本文最新版已更新至http://thinkinside.tk/2013/05/03/r_notes_1_what.html 在学习量化投资的时候&#xff0c;我发现了R&#xff08;www.r-project.org&#xff09;。R到底是什么呢&#xff1f;在开始之前&#xff0c;先看看R的神奇之处。 1. R初窥 从CRAN&#xff08;The Co…

数字图像处理知识总结

一&#xff1a;基本概念 数字图像&#xff1a;指由被称作像素的小块区域组成的二维矩阵。将物理图像行列划分后&#xff0c;每个小块区域称为像素&#xff08;pixel&#xff09;。每个像素包括两个属性&#xff1a;位置和灰度。图像数字化一般分为采样、量化与编码三个步骤。数…