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

 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. 记一次nmap扫描信息收集过程

    1.首先扫描网段内存活主机 nmap -sP 192.168.1.1-254 2.获取到存活主机后,开始进行端口扫描 nmap -p1-1000 192.168.1.66 可得到端口状态: filte ...

  2. ThinkPHP 中使用 IS_AJAX 判断原生 JS 中的 Ajax 出现问题

    问题: 在 ThinkPHP 中使用原生 js 发起 Ajax 请求的时候.在控制器无法使用 IS_AJAX 进行判断.而使用 jQuery 中的 ajax 是没有问题的. 在ThinkPHP中.有一 ...

  3. 安装git-review

    参考 https://blog.csdn.net/qq18340811755/article/details/80965188 当yum install git-review安装失效,没有安装包时,只 ...

  4. python selenium 爬取淘宝

    # -*- coding:utf-8 -*- # author : yesehngbao # time:2018/3/29 import re import pymongo from lxml imp ...

  5. [UE4]让箭头保持水平的第二种方法:Combinrotators、Delta(Rotator)

    一.手柄在世界坐标系中有一个绝对朝向,我们可以知道箭头相对于手柄的朝向,相对于手柄的旋转角度. 可以通过手柄绝对朝向.箭头的相对于手柄的朝向计算得到箭头的绝对朝向. 在得到箭头的相对于手柄的角度,在这 ...

  6. Vue 封装可向左向右查看图片列表的组件

    <template> <div class="content-container"> <div class="content-contain ...

  7. 页面中dropDownListt的二级关联

    当下拉框选项不多,而且可以写死的情况下,用js在页面写可能更方便. 我的html代码如下,两个关联是下拉框:配件类型.子类型. <div class="col-md-3 col-sm- ...

  8. (Python基础)简单购物车代码

    以下是最简单,最基础的购物车代码,一起学习,一起参考.product_list = [ ('Iphone',5800), ('Mac Pro',15800), ('car',580000), ('co ...

  9. strace参数

    strace参数 -c 统计每一系统调用的所执行的时间,次数和出错的次数等. -d 输出strace关于标准错误的调试信息. -f 跟踪由fork调用所产生的子进程. -ff 如果提供-o filen ...

  10. spring boot 整合quartz ,job不能注入的问题

    在使用spring boot 整合quartz的时候,新建定时任务类,实现job接口,在使用@AutoWire或者@Resource时,运行时出现nullpointException的问题.显然是相关 ...