使用的数据集是MNIST,下载方法见之前的博客

from tensorflow.examples.tutorials.mnist import input_data
import tensorflow as tf
mnist = input_data.read_data_sets(r"D:\PycharmProjects\tensorflow\MNIST_data", one_hot=True)
sess = tf.InteractiveSession()# 后面有很多权重和偏置需要创建,所以这里定义创建权重和偏置的函数以方便重复使用
# 我们需要给权重制造噪声以打破完全对称,因为我们使用ReLU,也给偏置加一些小的正值以避免死亡节点
def weight_variable(shape):initial = tf.truncated_normal(shape, stddev=0.1)return tf.Variable(initial)def bias_variable(shape):initial = tf.constant(0.1, shape=shape)return tf.Variable(initial)# 卷积层和池化层也是接下来重复使用的,因此也为它们定义创建函数
# x是输入,W是卷积的参数,比如[5,5,1,32],前面两个数字是卷积核的尺寸,第三个数字代表有多少个channel
# 这里我们是灰度单色,所以是1,最后一个数字代表卷积核的数量,也就是这个卷积层会提取多少个特征
# 第三个参数是步长,虽然第三个参数提供的是一个长度为4的数组,但是第一维和最后一维的数字要求一定是 1
# 最后一个参数是填充的方法,SAME但表示添加全0填充,VALID表示不添加
def conv2d(x, W):return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')# 第二个参数为过滤器的尺寸。虽然是一个长度为4的一维数组,但是这个数组的第一个和最后一个数必须为1。
# 这意味着池化层的过滤器是不可以跨不同输入样例或者节点矩阵深度的。因为x的第一维对应一个batch,第四维是channel数
# 因为希望整体上缩小尺寸,所以strides步长设为2,如果设为1,我们会得到一个尺寸不变的图片
def max_pool_2x2(x):return tf.nn.max_pool(x, ksize=[1, 2, 2, 1],strides=[1, 2, 2, 1], padding='SAME')  x = tf.placeholder(tf.float32, [None, 784])
y_ = tf.placeholder(tf.float32, [None, 10]) # 真实标签
x_image = tf.reshape(x, [-1,28,28,1]) #将1×784转为28×28,颜色通道只有1,-1代表样本数量不确定#定义第一个卷积层,尺寸为5×5,1个颜色通道,32个卷积核
#tf.nn.bias_add提供了一个方便的函数给每一个节点加上偏置项,注意这里不能直接使用加法
#因为矩阵上不同位置上的节点都需要加上同样的偏置项
W_conv1 = weight_variable([5, 5, 1, 32])
b_conv1 = bias_variable([32])
h_conv1 = tf.nn.relu(tf.nn.bias_add(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(tf.nn.bias_add(conv2d(h_pool1, W_conv2), b_conv2))
h_pool2 = max_pool_2x2(h_conv2)#因为前面经历了两次2×2的池化层,所以边长只有1/4即图片变成7×7,因为第二个卷积层的卷积核数量为64
#所以输出tensor的尺寸为7×7×64,将其转成1D向量,再连接一个1024个隐含节点的全连接层
W_fc1 = weight_variable([7 * 7 * 64, 1024])
b_fc1 = bias_variable([1024])
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)#减轻过拟合
keep_prob = tf.placeholder(tf.float32)
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)#将dropout输出层的输出连接一个softmax层,得到概率输出
W_fc2 = weight_variable([1024, 10])
b_fc2 = bias_variable([10])
y_conv=tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y_conv), reduction_indices=[1]))
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)#定义准确率
correct_prediction = tf.equal(tf.argmax(y_conv,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))tf.global_variables_initializer().run()
for i in range(20000):batch = mnist.train.next_batch(50)if i%100 == 0: #每100次训练,对准确率进行一次评测train_accuracy = accuracy.eval(feed_dict={x:batch[0], y_: batch[1], keep_prob: 1.0})print("step %d, training accuracy %g"%(i, train_accuracy))train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})print("test accuracy %g"%accuracy.eval(feed_dict={x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0}))

TensorFlow实现简单的卷积网络相关推荐

  1. 【Tensorflow】深度学习实战01——Tensorflow实现简单的卷积网络(MNIST)

    [fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 前言 现在深度学习可以说很是热门,自己也非常感兴趣,之前有看过吴恩达老师的课程,也看过一些书 ...

  2. 【Tensorflow】深度学习实战02——Tensorflow实现进阶的卷积网络(CIFAR-10)

    [fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 前言 之前使用Tensorflow实现了一个简单卷积神经网络用于手写数字识别,那是一个简单的 ...

  3. tensorflow包_在Keras和Tensorflow中使用深度卷积网络生成Meme(表情包)文本

    作者 | dylan wenzlau 来源 | Medium 编辑 | 代码医生团队 本文介绍如何构建深度转换网络实现端到端的文本生成.在这一过程中,包括有关数据清理,训练,模型设计和预测算法相关的内 ...

  4. 英伟达RTX 3080值不值得抢?在TensorFlow上训练了卷积网络

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:机器之心 AI博士笔记系列推荐 周志华<机器学习> ...

  5. pytorch 图像分割的交并比_Segmentation101系列-最简单的卷积网络语义分割(1)-PASCAL VOC图像分割...

    作者:陈洪瀚 /洪瀚笔记知乎专栏 摘要:介绍了使用PyTorch和torchvision加载训练好的全卷积网络FCN或DeepLab模型,并对PASCAL VOC图像进行分割并显示结果. 网址: gi ...

  6. tensorflow随笔——简单的卷积神经网络分类实例

    下例是用tensorflow写的2层cnn+2层fc的一个卷积神经网络做mnist的分类例子,旨在简单明了,过一遍TF代码的分类流程. 实例只有两个文件: train.py:数据读取,模型训练. # ...

  7. TensorFlow:简单的卷积层、池化层(采样层)示例

    卷积层: ws=tf.get_variable('w',[5,5,3,16],initializer=tf.truncated_normal_initializer(stddev=0.1)) bs=t ...

  8. tensorflow 搭建简单的卷积神经网络,输入二维数组完成分类

    目录 一.数据处理 二.搭建cnn模型 三.训练并测试模型 一.数据处理 导入数据 #导入数据 X=pd.read_csv('data.csv',header=None) X=np.array(tes ...

  9. 深度学习之利用TensorFlow实现简单的卷积神经网络(MNIST数据集)

    卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习 ...

最新文章

  1. C语言实现最小堆minheap(附完整源码)
  2. node linux脚本,用Shell脚本快速搭建Ubuntu下的Nodejs开发环境
  3. [转]项目失败的经验
  4. Linux用find查找指定文件的操作
  5. android 16 登陆,那些年我们一起养过的电子鸡登陆Android平台
  6. 打印出不同顺序的字符串单引号和双引号的差异
  7. Spring MVC学习总结(8)——Swagger入门详解
  8. SQLi LABS Less 26a 联合注入+布尔盲注
  9. win11系统卡死怎么办 Windows11系统卡死的解决方法
  10. NUC1013 阶乘结果末尾有多少零【分析思维】
  11. 英特尔开源技术中心招收虚拟化工程师若干(北京/上海)
  12. python 入门教程
  13. 仿uc设置默认浏览器
  14. 数据结构——p = new Lnode和Lnode *p有什么区别
  15. 什么是模拟信号?数字信号?区别是什么?它们又是如何完成转换的?
  16. office 2021 最新版详细安装教程,附激活方法
  17. Android API 中文(13) —— ToggleButton
  18. 景联文科技—专业数据采集公司和智能数据管理执行一体化平台
  19. Linux 二进制文件调试命令
  20. 如何创建数据链接文件

热门文章

  1. c 语言银行排队系统,C++实现银行排队系统
  2. python docx包_[Python02] Python-docx包的使用,快速处理 Word 文件!
  3. Android官方开发文档Training系列课程中文版:Android的安全建议
  4. Eureka 简介和使用
  5. 这就是深度学习如此强大的原因
  6. C#多线程与并行编程方面的电子书,中英文版本
  7. SpringBoot RequestBody ajax提交对象
  8. 图形化安装配置:安装oracle、新建数据库、用plsql连接oracle,套路明白了其实挺简单...
  9. 虚拟机安装CentOS6.4
  10. linux yum下载RPM包后再安装LAMP环境