以上是模型,下面是代码:

 import tensorflow as tf
import numpy as np
import time
from tensorflow.examples.tutorials.mnist import input_data import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '' start = time.clock() # 下载并载入MNIST 手写数字库
mnist = input_data.read_data_sets("./data/MNIST", one_hot=True) input_x = tf.placeholder(tf.float32, shape=[None, 28 * 28]) / 255 # 灰度的处理
output_y = tf.placeholder(tf.float32, shape=[None, 10]) #输出10个数字的标签
input_x_images = tf.reshape(input_x, shape=[-1, 28, 28, 1]) #改变形状之后的输入 # 从Test(测试)数据集里选取3000个手写数字的图片和对应的标签
test_x = mnist.test.images[:3000]
test_y = mnist.test.labels[:3000] # 构建我们的卷积神经网络
# 第一层卷积
conv1 = tf.layers.conv2d(inputs=input_x_images, # 形状为[28,28,1]
filters=32, # 32个过滤器,输出的深度位32
kernel_size=[5, 5], # 过滤器在二维的大小是(5*5)
strides=1, # 步长是1
padding="same", # snme表示输出大小不变,因此要在外围补零2圈
activation=tf.nn.relu # 表示激活函数是relu
) # 形状[28,28,32] # 第一层池化(亚采样)
pool1 = tf.layers.max_pooling2d(
inputs=conv1, # 形状[28,28,32]
pool_size=[2, 2], # 过滤器在二维的大小是[2,2]
strides=2 # 步长是2
) # 形状[14,14,32] # 第二层卷积
conv2 = tf.layers.conv2d(inputs=pool1, # 形状为[14,14,32]
filters=64, # 64个过滤器,输出的深度位64
kernel_size=[5, 5], # 过滤器在二维的大小是(5*5)
strides=1, # 步长是1
padding="same", # snme表示输出大小不变,因此要在外围补零2圈
activation=tf.nn.relu # 表示激活函数是relu
) # 形状[14,14,64] # 第二层池化(亚采样)
pool2 = tf.layers.max_pooling2d(
inputs=conv2, # 形状[14,14,64]
pool_size=[2, 2], # 过滤器在二维的大小是[2,2]
strides=2 # 步长是2
) # 形状[7,7,64] #平坦化(flat)
flat = tf.reshape(pool2,shape=[-1,7 * 7 * 64]) #形状[7 * 7 * 64] #1024个神经元的全连接层
dense = tf.layers.dense(inputs=flat,units=1024,activation=tf.nn.relu) #Dropout :丢弃 50% rate = 0.5
dropout = tf.layers.dropout(inputs=dense,rate=0.5) #10个神经元的全连接层,这里不用激活函数来做非线性化了。
logits = tf.layers.dense(inputs=dropout,units=10) #输出形状[1,1,10] #计算误差(计算 Cross entropy(交叉熵)),再用softmax计算百分比概率
loss = tf.losses.softmax_cross_entropy(onehot_labels=output_y,logits=logits) # Adam 优化器来最小化误差,学习率0.001
train_op = tf.train.AdadeltaOptimizer(learning_rate=0.001).minimize(loss) #精度,计算,预测值 和 实际标签 的匹配程度
#返回 (accuracy .update_op) 会创建两个局部变量
accuracy = tf.metrics.accuracy(
labels=tf.argmax(input=output_y,axis=1),
predictions=tf.argmax(input=logits,axis=1)
)[1] #创建会话
with tf.Session() as sess:
#初始化变量
init = tf.group(tf.global_variables_initializer(),tf.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],feed_dict={input_x:batch[0],output_y:batch[1]})
if i % 100 == 0:
test_accuracy = sess.run(accuracy,feed_dict={input_x:test_x,output_y:test_y})
print(("Step+%d,Train loss=%.4f,[Test accuracy=%.2f]") % (i,train_loss,test_accuracy)) #测试:打印20个 预测值 和 真实值 的对
test_output = sess.run(logits,feed_dict={input_x:test_x[:20]})
inference_y = np.argmax(test_output,1)
print(inference_y," Inference number") #推测的数字
print(np.argmax(test_y[:20],1),"Real numbers") #真实的数字 #显示时间
end = time.clock()
print(end - start, "秒")

当然CNN还有很长一段路要走。代码不容易,且敲且珍惜。

实现CNN卷积神经网络的更多相关文章

  1. Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN

    http://m.blog.csdn.net/blog/wu010555688/24487301 本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep le ...

  2. [转]Theano下用CNN(卷积神经网络)做车牌中文字符OCR

    Theano下用CNN(卷积神经网络)做车牌中文字符OCR 原文地址:http://m.blog.csdn.net/article/details?id=50989742 之前时间一直在看 Micha ...

  3. Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现(转)

    Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现 zouxy09@qq.com http://blog.csdn.net/zouxy09          自己平时看了一些论文, ...

  4. CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?

    https://www.zhihu.com/question/34681168 CNN(卷积神经网络).RNN(循环神经网络).DNN(深度神经网络)的内部网络结构有什么区别?修改 CNN(卷积神经网 ...

  5. CNN(卷积神经网络)、RNN(循环神经网络)、DNN,LSTM

    http://cs231n.github.io/neural-networks-1 https://arxiv.org/pdf/1603.07285.pdf https://adeshpande3.g ...

  6. day-16 CNN卷积神经网络算法之Max pooling池化操作学习

    利用CNN卷积神经网络进行训练时,进行完卷积运算,还需要接着进行Max pooling池化操作,目的是在尽量不丢失图像特征前期下,对图像进行downsampling. 首先看下max pooling的 ...

  7. cnn(卷积神经网络)比较系统的讲解

    本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep learning简介 [2]Deep Learning训练过程 [3]Deep Learning模型之 ...

  8. Keras(四)CNN 卷积神经网络 RNN 循环神经网络 原理及实例

    CNN 卷积神经网络 卷积 池化 https://www.cnblogs.com/peng8098/p/nlp_16.html 中有介绍 以数据集MNIST构建一个卷积神经网路 from keras. ...

  9. TensorFlow——CNN卷积神经网络处理Mnist数据集

    CNN卷积神经网络处理Mnist数据集 CNN模型结构: 输入层:Mnist数据集(28*28) 第一层卷积:感受视野5*5,步长为1,卷积核:32个 第一层池化:池化视野2*2,步长为2 第二层卷积 ...

  10. tensorflow CNN 卷积神经网络中的卷积层和池化层的代码和效果图

    tensorflow CNN 卷积神经网络中的卷积层和池化层的代码和效果图 因为很多 demo 都比较复杂,专门抽出这两个函数,写的 demo. 更多教程:http://www.tensorflown ...

随机推荐

  1. SpringMVC Mybatis Spring

    Spring MVC Mybatis整合过程中 Mapper.java 不需要使用 @componenet, Service 等spring注解 但是在service 中创建mapper对象的时候是需 ...

  2. Vue项目中GraphQL入门学习与应用

    1.GraphQL是什么,能干什么? 正如官网所说,GraphQL是一种用于API查询的语言.Facebook 的移动应用从 2012 年就开始使用 GraphQL.GraphQL 规范于 2015 ...

  3. CSS3 Vendor-prefixing

    Browser vendors needed a way to add support for new features that were not yet standardized, but wit ...

  4. navicat for mysql 注册码,简简单单,一个搞定(蔡军帅亲测有效)

    打开navicat for mysql接着打开帮助,选中注册, 把下面的复制上去就可以了 NAVH-WK6A-DMVK-DKW3 转载自:https://blog.csdn.net/qq_403845 ...

  5. Java中final、finally、finalize有什么区别?

    final.finally和finalize的区别是什么? final: 最终的意思,可以修饰类,方法和变量. 它修饰的类,不能被继承 它修饰的方法,不能被重写 它修饰的变量,不能被改变 finall ...

  6. 2018-2019-2 20165312《网络攻防技术》Exp6 信息搜集与漏洞扫描

    2018-2019-2 20165312<网络攻防技术>Exp6 信息搜集与漏洞扫描 目录 一.信息搜集技术与隐私保护--知识点总结 二.实验步骤 各种搜索技巧的应用 Google Hac ...

  7. windows2012 IIS部署GeoTrust证书踩过的坑。 视频测试可用 IIS 证书导入

    证书导入方式 https://wenku.baidu.com/view/3504f29a55270722192ef78a.html https://www.cnblogs.com/jackrebel/ ...

  8. Servlet-Context学习笔记

    介绍 ServletContext其实就是全局作用域对象, 上下文环境对象 利用context可以实现对,当前网站中所有的Servlet共享数据 context对象只能由Tomcat负责创建,在tom ...

  9. Sysbench 1.0.17安装与测试

    Sysbench安装与测试 1.安装: cd /usr/local/src wget https://codeload.github.com/akopytov/sysbench/tar.gz/1.0. ...

  10. Promise的一点感悟~

    在什么大环境下? 今天要讨论的Promise,是js的同步|异步任务的概念下出来的 什么是同步?什么是异步? 我的理解: 一件事情Q 分三部分:Q1 ,  Q2  ,  Q3 同步方式完成: Q1 - ...