实现CNN卷积神经网络

以上是模型,下面是代码:
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卷积神经网络的更多相关文章
- Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN
http://m.blog.csdn.net/blog/wu010555688/24487301 本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep le ...
- [转]Theano下用CNN(卷积神经网络)做车牌中文字符OCR
Theano下用CNN(卷积神经网络)做车牌中文字符OCR 原文地址:http://m.blog.csdn.net/article/details?id=50989742 之前时间一直在看 Micha ...
- Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现(转)
Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文, ...
- CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?
https://www.zhihu.com/question/34681168 CNN(卷积神经网络).RNN(循环神经网络).DNN(深度神经网络)的内部网络结构有什么区别?修改 CNN(卷积神经网 ...
- CNN(卷积神经网络)、RNN(循环神经网络)、DNN,LSTM
http://cs231n.github.io/neural-networks-1 https://arxiv.org/pdf/1603.07285.pdf https://adeshpande3.g ...
- day-16 CNN卷积神经网络算法之Max pooling池化操作学习
利用CNN卷积神经网络进行训练时,进行完卷积运算,还需要接着进行Max pooling池化操作,目的是在尽量不丢失图像特征前期下,对图像进行downsampling. 首先看下max pooling的 ...
- cnn(卷积神经网络)比较系统的讲解
本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep learning简介 [2]Deep Learning训练过程 [3]Deep Learning模型之 ...
- Keras(四)CNN 卷积神经网络 RNN 循环神经网络 原理及实例
CNN 卷积神经网络 卷积 池化 https://www.cnblogs.com/peng8098/p/nlp_16.html 中有介绍 以数据集MNIST构建一个卷积神经网路 from keras. ...
- TensorFlow——CNN卷积神经网络处理Mnist数据集
CNN卷积神经网络处理Mnist数据集 CNN模型结构: 输入层:Mnist数据集(28*28) 第一层卷积:感受视野5*5,步长为1,卷积核:32个 第一层池化:池化视野2*2,步长为2 第二层卷积 ...
- tensorflow CNN 卷积神经网络中的卷积层和池化层的代码和效果图
tensorflow CNN 卷积神经网络中的卷积层和池化层的代码和效果图 因为很多 demo 都比较复杂,专门抽出这两个函数,写的 demo. 更多教程:http://www.tensorflown ...
随机推荐
- Laravel笔记--Eloquent 模型
Eloquent 模型 默认继承use Illuminate\Database\Eloquent\Model类. 数据表名称与模型名称约定: 数据库的表名一般使用“蛇形命名法”命名.蛇形命名法要求单词 ...
- MySQL面试题中:主从同步部署介绍
主从同步部署1.两台相同版本的mysql数据库,一台做主库,一台从库 主库开启binlog 在配置文件中的[mysqld]模块中添加log-bin=mysql-bin和server-id=1,一定要保 ...
- python读写文件\r\n问题
newline controls how universal newlines mode works (it only applies to text mode). It can be None, ' ...
- C# 操作redis
下载 redis windows 版本 官网目前没有windows安装下载,下载地址为 https://github.com/MicrosoftArchive/redis/releases 直接点击安 ...
- VS2017报错 未能加载文件或程序集”Oracle.DataAccess, Version=2.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342"或它的某一个依赖项。试图加载格式不正确的程序
1.VS2017调用Oracle数据库报错:(采取Oracle.DataAccess.Client.dll方法调用) 2.解决方案:(将架构由anycpu转成x86或者x64) 3.具体步骤:anyc ...
- AD中修改OU下面用户的属性
第一种方法可行: get-ADuser -searchbase "ou=Wireless,dc=lstech,dc=com" -filter * | set-ADuser -Giv ...
- 爬虫系列4:Requests+Xpath 爬取动态数据
爬虫系列4:Requests+Xpath 爬取动态数据 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参 ...
- Consul集群搭建 2Server+ 3Client
环境说明: 192.168.202.177 consul-server01 192.168.202.177 consul-server02192.168.202.174 mysql server no ...
- RMAN-06900 RMAN-06901 ORA-19921
转自http://blog.itpub.net/12778571/viewspace-700360/ 1.连接到rman中$ rman target/Recovery Manager: Release ...
- asp.net mvc5中使用Swagger 自动生成WebApi文档笔记
Swagger可以自动生成Api说明文档,并内置在线测试,通过NSwagStudio还可以自动生成Api客户端调用代码,以下为具体实现步骤 1.写一个简单的WebApi并加上注释 public cla ...