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

 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. 【Oracle】ORA-14400: 插入的分区关键字未映射到任何分区

    问题描述: 工作中使用kettle将原始库中的数据抽取到标准库中,在抽取过程中报错:[ORA-14400: 插入的分区关键字未映射到任何分区]/[ORA-14400: inserted partiti ...

  2. 如何在本地同时管理github仓库和codingnet仓库?

    本文的前提条件是你在电脑上接入了github或者gitlab的仓库,现在要接入codingnet的仓库. 电脑上已经有了 github 的 ssh key,怎么继续接入codingnet 的git仓库 ...

  3. 2019春招——Vivo大数据开发工程师面经

    Vvio总共就一轮技术面+一轮HR面,技术面总体而言,比较宽泛,比较看中基础,面试的全程没有涉及简历上的东西(都准备好跟他扯项目了,感觉是抽取的题库...)具体内容如下: 1.熟悉Hadoop哪些组件 ...

  4. Linux期中架构

    1    在构建完模板后  开启虚拟机后 需要再重启一次  以解决网卡不能看见的问题 ########################################add begin 2018-05 ...

  5. nfs与dhcp服务

    NFS服务端概述 NFS,是Network File System的简写,即网络文件系统.网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS: NFS允许一个系统在网络上与他人共享目录 ...

  6. RN-进阶

    ActivityIndicator 显示一个圆形的loading的提示符 react-native-tab-navigator npm install react-native-tab-navigat ...

  7. Android View添加删除或隐藏显示的默认动画;

    代码中给控件设置Visibility ? VISIBLE : GONE ;时太生硬,用户体验不好:设置一个Android ViewGroup的默认动画很实用: 给需要添加动画的控件或布局的父布局,记住 ...

  8. 快速获取IP地址的各种方法

    调用百度的IP定位API(首先需要去百度开放平台注册申请key值http://lbsyun.baidu.com/apiconsole/key) http://api.map.baidu.com/loc ...

  9. postman引用外部文件中的变量和数据

    接口参数显示: 点击collections下文件夹test0424右边的箭头,点击run按钮: DataFile导入txt文件: 预览文件数据: 运行,成功:

  10. 文件系统扫描工具-fsck

    文件系统扫描工具-fsck 注意的是fsck扫描文件系统时一定要在单用户模式.修复模式或把设备umount后进行.建议在单用户模式下运行.如果扫描正常运行中的系统,会造成系统文件损坏. fsck不仅可 ...