import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data# ====================一、载入训练数据==============================
mnist = input_data.read_data_sets("../MNIST_data", one_hot=True)
batch_size = 100
n_batch = mnist.train.num_examples# 初始化权值
def weight_variable(shape):# 生成一个截断的正太分布initial = tf.truncated_normal(shape=shape, stddev=0.1)return tf.Variable(initial)# 初始化偏置值
def bias_variable(shape):initial = tf.constant(0.1, shape=shape)return tf.Variable(initial)# 卷积层
def conv2d(x, W):# x是输入的tensor,形状如[batch, in_height, in_width, in_channels],# 其中in_height和in_width表示图片的长宽,in_channels表示通道数,1表示黑白,3表示彩色# W是滤波器/卷积核,形如[filter_height, filter_width, in_channels, out_channels],# filter_height表示滤波器的高,其中包括输入通道in_channels和输出通道out_channels# strides是步长,其中strides[0]和strides[3]都固定等于1. strides[1]代表x方向的步长,strides[2]代表y方向的步长# pandding是边缘,"SAME"表示边缘补零,"VALID"表示不补零return tf.nn.conv2d(x, W, strides=[1,1,1,1], padding="SAME")# 池化层
def max_pool_2x2(x):# ksize表示池化核的大小,形如[1,x,y,1],其中第0和3个位置都固定为1return tf.nn.max_pool(x, ksize=[1,2,2,1], strides=[1,2,2,1], padding="SAME")# ====================二、构造神经网络==============================
# 定义placeholder
x = tf.placeholder(tf.float32, [None, 784])
y = tf.placeholder(tf.float32, [None, 10])
# 把x还原会图片的样子,形如[batch, in_height, in_width, in_channels]
x_image = tf.reshape(x, [-1, 28, 28, 1])# 分析:
# 28*28的图片第一次卷积后还是28*28,卷积核为[1,1,1,1],所以不变;
# 第一次池化后变为14*14,因为池化核是[1,2,2,1],所以缩小了一半
# 第二次卷积后为14*14,第二次池化后变为了7*7
# 进过上面操作后得到64张7*7的平面# 初始化第一个卷积层的权值和偏置值
# 形状[filter_height, filter_width, in_channels, out_channels],in_channels表示输入通道数1,out_channels表示输出32个卷积核
W_conv1 = weight_variable([5,5,1,32])
# 每一个卷积核一个偏置值
b_conv1 = bias_variable([32])# 卷积操作,并通过激活函数
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1)+b_conv1)
# 池化操作
h_pool1 = max_pool_2x2(h_conv1)# 初始化第二个卷积层的权值和偏置值
W_conv2 = weight_variable([5,5,32,64])
b_conv2 = bias_variable([64])# 计算第二层卷积
h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2)+b_conv2)
h_pool2 = max_pool_2x2(h_conv2)# -------------------------------------------------
# 定义第一层全连接层,7*7*64代表上一层的输出,1024是我们自己定义的
# 初始化
W_fc1 = weight_variable([7*7*64, 1024])
b_fc1 = bias_variable([1024])# 先把上面第二层的池化层[100, 7, 7, 64]还原为一维的形状,这里的-1表示任意值,类似于None
h_pool2_flat = tf.reshape(h_pool2, [-1, 7*7*64])
# 求第一层全连接层的输出
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)# 添加Dropout操作
keep_pro = tf.placeholder(tf.float32)
h_fc1_drop = tf.nn.dropout(h_fc1, keep_pro)# 初始化第二个全连接层(其实就是输出层)
W_fc2 = weight_variable([1024, 10])
b_fc2 = bias_variable([10])
prediction = tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)# ====================三、损失函数==============================
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=prediction))# ====================四、最小化损失函数==============================
train = tf.train.AdadeltaOptimizer(learning_rate=0.2).minimize(loss=loss)# 验证准确率
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(prediction, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))# ====================五、开始训练==============================
init = tf.global_variables_initializer()
with tf.Session() as sess:sess.run(init)for step in range(1):for batch in range(n_batch):batch_xz, batch_yz = mnist.train.next_batch(batch_size=batch_size)result = sess.run(train, feed_dict={x:batch_xz, y:batch_yz, keep_pro:0.5})print("====batch====>"+str(batch)+"====accuracy====>"+str(sess.run(accuracy, feed_dict={x:mnist.test.images, y:mnist.test.labels, keep_pro:0.5})))acc = sess.run(accuracy, feed_dict={x:mnist.test.images, y:mnist.test.labels, keep_pro:0.5})print("======最后的准确率======>"+str(acc))

结束线/

欢迎大家加入Q群讨论:463255841

结束线/

TensorFlow学习(11)——卷积神经网络相关推荐

  1. Tensorflow学习之 卷积神经网络 (一)什么是卷积?

    这一节回顾一下卷积神经网络 第一张图是单通道的一张照片,在RGB中只有一个通道,即一个0-255的值来表示其灰度: 第二张图就是一张彩色的图片了,这里具有三个通道,也就是我们常见的RGB三个0-255 ...

  2. 深度学习之卷积神经网络(11)卷积层变种

    深度学习之卷积神经网络(11)卷积层变种 1. 空洞卷积 2. 转置卷积 矩阵角度 转置卷积实现 3. 分离卷积 卷积神经网络的研究产生了各种各样优秀的网络模型,还提出了各种卷积层的变种,本节将重点介 ...

  3. 深度学习之卷积神经网络(2)卷积神经网络结构

    深度学习之卷积神经网络(2)卷积神经网络结构 1. 单通道输入和单卷积核 2. 多通道输入和单卷积核 3. 多通道输入.多卷积核 4. 步长 5. 填充  卷积神经网络通过充分利用局部相关性和权值共享 ...

  4. 深度学习之卷积神经网络(1)什么是卷积

    深度学习之卷积神经网络(1)什么是卷积 1. 全连接网络的问题 2. 局部相关性 3. 权值共享 4. 卷积运算 1. 全连接网络的问题  首先我们来分析全连接网络存在的问题.考虑一个简单的4层全连接 ...

  5. 深度学习~卷积神经网络(CNN)概述

    目录​​​​​​​ 1. 卷积神经网络的形成和演变 1.1 卷积神经网络结构 1.2 卷积神经网络的应用和影响 1.3 卷积神经网络的缺陷和视图 1.3.1 缺陷:可能错分 1.3.2 解决方法:视图 ...

  6. 深度学习之卷积神经网络(12)深度残差网络

    深度学习之卷积神经网络(12)深度残差网络 ResNet原理 ResBlock实现 AlexNet.VGG.GoogleLeNet等网络模型的出现将神经网络的法阵带入了几十层的阶段,研究人员发现网络的 ...

  7. 深度学习之卷积神经网络(10)CIFAR10与VGG13实战

    深度学习之卷积神经网络(10)CIFAR10与VGG13实战 MNIST是机器学习最常用的数据集之一,但由于手写数字图片非常简单,并且MNIST数据集只保存了图片灰度信息,并不适合输入设计为RGB三通 ...

  8. 深度学习之卷积神经网络(8)BatchNorm层

    深度学习之卷积神经网络(8)BatchNorm层 BatchNorm层概念 BatchNorm层实现 1. 向前传播 2. 反向更新 3. BN层实现 4. 完整代码 卷积神经网络的出现,网络参数量大 ...

  9. 深度学习之卷积神经网络(6)梯度传播

    深度学习之卷积神经网络(6)梯度传播  在完成手写数字图片识别实战后,我们对卷积神经网络的使用有了初步的了解.现在我们来解决一个关键问题,卷积层通过移动感受野的方式实现离散卷积操作,那么它的梯度传播是 ...

最新文章

  1. ExtJS 4.x 得到资源树上任意的节点对象
  2. 曼哈顿距离和切比雪夫距离链接
  3. 对List中对象的去重
  4. bilibili源码_Java开源商城源码推荐,从菜鸡到大神,永远绕不开的商城系统
  5. 浅谈AsyncLocal,我们应该知道的那些事儿
  6. C#中结构体定义并转换字节数组
  7. 剑指offer:26-30记录
  8. VS Code 的常用快捷键
  9. 【Redis】redis基本数据结构之ZSet
  10. netty半包粘包 处理_老王:Netty到底是个什么鬼?有没有简单的理解方式?
  11. 黑马博客——详细步骤(一)路由跳转和抽取公共部分代码
  12. Linux系统中CPU忙闲的衡量——load和idle
  13. paip.连接access2003数据库python3.3以及php5对比
  14. ACM公约数和公倍数
  15. 东南亚跨境电商shopee平台有什么选品渠道?
  16. python保存对话框_python打开文件对话框的方法
  17. Java中Files工具类的使用
  18. uniapp 实时定位(系统、后台运行、支持息屏)插件 Ba-Location
  19. 华强北四代慧联A10|悦虎1562M怎么样?
  20. skycc供求信息发布软件 V8.5正式版

热门文章

  1. win10配置docker环境
  2. 微信 html自动加载js,微信小程序实现图片预加载组件
  3. 创建OMF(Oracle Managed Files,Oracle管理的文件)
  4. oracle 12c omf,从参数取值瞅Oracle OMF特性
  5. 改变生活的态度,突破瓶颈
  6. win10共享打印机搜索不到计算机,Win10 1909电脑中搜索不到共享打印机的解决方法...
  7. Wallpaper Engine使用视频壁纸黑屏解决方法(window10)
  8. Oculus/VR新手入门指南
  9. uniapp h5 海报
  10. 动物棋c语言程序,斗兽棋游戏手机版|斗兽棋游戏下载 v0.2C 安卓版_最火软件站...