由于卷积用于分类的方法非常固定,因此直接贴上源码以及链接,有需要的直接稍加修改就可以了。 
传送门  
简单写一下心得体会

卷积层+pooling层

#定义变量,初始化为截断正态分布的变量
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)# W为核函数,strides为步长,strides=[1, 1, 1, 1],中间两个为x方向的步长和y方向的步长
# padding='SAME'表示输出的大小和输入的大小一样
def conv2d(x, W):# stride [1, x_movement, y_movement, 1]# Must have strides[0] = strides[3] = 1return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')#2x2的pooling,虽然这里padding也是same,但是下采样了。
def max_pool_2x2(x):# stride [1, x_movement, y_movement, 1]return tf.nn.max_pool(x, ksize=[1,2,2,1], strides=[1,2,2,1], padding='SAME')#定义卷积核的值,设置初始值。其中[5,5, 1,32]为卷积核的shape
W_conv1 = weight_variable([5,5, 1,32]) # patch 5x5, in size 1, out size 32
b_conv1 = bias_variable([32])
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1) # output size 28x28x32
h_pool1 = max_pool_2x2(h_conv1) 

原始代码如下

# View more python tutorial on my Youtube and Youku channel!!!# Youtube video tutorial: https://www.youtube.com/channel/UCdyjiB5H8Pu7aDTNVXTTpcg
# Youku video tutorial: http://i.youku.com/pythontutorial"""
Please note, this code is only for python 3+. If you are using python 2+, please modify the code accordingly.
"""
from __future__ import print_function
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
# number 1 to 10 data
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)def compute_accuracy(v_xs, v_ys):global predictiony_pre = sess.run(prediction, feed_dict={xs: v_xs, keep_prob: 1})correct_prediction = tf.equal(tf.argmax(y_pre,1), tf.argmax(v_ys,1))accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))result = sess.run(accuracy, feed_dict={xs: v_xs, ys: v_ys, keep_prob: 1})return resultdef 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)def conv2d(x, W):# stride [1, x_movement, y_movement, 1]# Must have strides[0] = strides[3] = 1return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')def max_pool_2x2(x):# stride [1, x_movement, y_movement, 1]return tf.nn.max_pool(x, ksize=[1,2,2,1], strides=[1,2,2,1], padding='SAME')# define placeholder for inputs to network
xs = tf.placeholder(tf.float32, [None, 784])/255.   # 28x28
ys = tf.placeholder(tf.float32, [None, 10])
keep_prob = tf.placeholder(tf.float32)
# print(x_image.shape)  # [n_samples, 28,28,1]## conv1 layer ##
W_conv1 = weight_variable([5,5, 1,32]) # patch 5x5, in size 1, out size 32
b_conv1 = bias_variable([32])
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1) # output size 28x28x32
h_pool1 = max_pool_2x2(h_conv1)                                         # output size 14x14x32## conv2 layer ##
W_conv2 = weight_variable([5,5, 32, 64]) # patch 5x5, in size 32, out size 64
b_conv2 = bias_variable([64])
h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2) # output size 14x14x64
h_pool2 = max_pool_2x2(h_conv2)                                         # output size 7x7x64## fc1 layer ##
W_fc1 = weight_variable([7*7*64, 1024])
b_fc1 = bias_variable([1024])
# [n_samples, 7, 7, 64] ->> [n_samples, 7*7*64]
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)
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)## fc2 layer ##
W_fc2 = weight_variable([1024, 10])
b_fc2 = bias_variable([10])
prediction = tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)# the error between prediction and real data
cross_entropy = tf.reduce_mean(-tf.reduce_sum(ys * tf.log(prediction),reduction_indices=[1]))       # loss
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)sess = tf.Session()
# important step
# tf.initialize_all_variables() no long valid from
# 2017-03-02 if using tensorflow >= 0.12
if int((tf.__version__).split('.')[1]) < 12 and int((tf.__version__).split('.')[0]) < 1:init = tf.initialize_all_variables()
else:init = tf.global_variables_initializer()
sess.run(init)for i in range(1000):batch_xs, batch_ys = mnist.train.next_batch(100)sess.run(train_step, feed_dict={xs: batch_xs, ys: batch_ys, keep_prob: 0.5})if i % 50 == 0:print(compute_accuracy(mnist.test.images, mnist.test.labels))

从红色部分可推断:神经网络输入层的个数是由输入的图片的像素个数,对组成的指定的矩阵(如上面xs = tf.placeholder(tf.float32, [None, 784])/255.   # 28x28所示),对该矩阵进行指定像素大小的图片分割(28*28)得到矩阵,x_image = tf.reshape(xs, [-1, 28, 28, 1]),该矩阵与W_conv1连接的反推,可与确定输入层神经元个数相关,需要进一步实验解决h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1) # output size 28x28x32

Tensorflow CNN(两层卷积+全连接+softmax)相关推荐

  1. CNN中卷积层、池化层和全连接层分别有什么作用和区别?

    卷积层:提取特征."不全连接,参数共享"的特点大大降低了网络参数,保证了网络的稀疏性,防止过拟合.之所以可以"参数共享",是因为样本存在局部相关的特性. 池化层 ...

  2. Lesson 16.1016.1116.1216.13 卷积层的参数量计算,1x1卷积核分组卷积与深度可分离卷积全连接层 nn.Sequential全局平均池化,NiN网络复现

    二 架构对参数量/计算量的影响 在自建架构的时候,除了模型效果之外,我们还需要关注模型整体的计算效率.深度学习模型天生就需要大量数据进行训练,因此每次训练中的参数量和计算量就格外关键,因此在设计卷积网 ...

  3. 深度学习 卷积层与全连接层权重参数个数的计算

    1.卷积网络实例分析 构建卷积网络如下: from tensorflow.python.keras import datasets, models, layers class CNN(object): ...

  4. TensorFlow精进之路(七):关于两层卷积神经网络对CIFAR-10图像的识别

    1.概述 在前面已经对官方的CIFAR10图像识别模块进行分析,但如果只做到这一步感觉还是不够,没能做到举一反三以及对之前学的知识的巩固,所以这一节,我打算结合之前学的双层卷积神经网络自己写一个dem ...

  5. TensorFlow精进之路(三):两层卷积神经网络模型将MNIST未识别对的图片筛选出来

    1.概述 自从开了专栏<TensorFlow精进之路>关于对TensorFlow的整理思路更加清晰.上两篇讲到Softmax回归模型和两层卷积神经网络模型训练MNIST,虽然使用神经网络能 ...

  6. 两层卷积网络实现手写字母的识别(基于tensorflow)

    可和这篇文章对比,https://blog.csdn.net/fanzonghao/article/details/81489049,数据集来源代码和链接一样. import tensorflow a ...

  7. 卷积神经网络---卷积层、激励层、池化层以及全连接层

    文章目录 概述 卷积神经网络 局部连接+权值共享** 输入层 卷积层 激励层 池化层 全连接层 参考资料 概述 这两天在看论文,涉及到卷积神经网络的知识,之前一直对这块迷迷糊糊.看到了一篇博文写的很好 ...

  8. 卷积层和全连接层的区别_卷积神经网络中全连接层作用理解总结

    前言 一般来说,卷积神经网络会有三种类型的隐藏层--卷积层.池化层.全连接层.卷积层和池化层比较好理解,主要很多教程也会解释. •  卷积层(Convolutional layer)主要是用一个采样器 ...

  9. 卷积层与全连接层的区别

    卷积层.池化层.全连接层的概念:https://towardsdatascience.com/convolutional-neural-network-17fb77e76c05 关于卷积.全连接层的参 ...

最新文章

  1. 关于学习Python的一点学习总结(22->相关的迭代操作)
  2. 02_Mybatis动态代理
  3. pid调节软件_非常实用的PID算法和PID控制原理
  4. linux下udf光盘权限问题,linux - 关于mysql udf权限的问题?
  5. 后期强ps画意大师完美破解版一键打造中国风
  6. springboot调用so文件
  7. ASUS AURA无法启动问题
  8. linux下连接mysql数据库命令,linux连接mysql命令
  9. linux下桌面编程软件,慧编程桌面端下载|慧编程桌面版 V1.2.0 Linux版 下载_当下软件园_软件下载...
  10. coreldraw怎么改成半圆形_cdr怎么把图形修剪成指定的形状?
  11. 苹果电脑在哪里改计算机id,苹果电脑改密码怎么改(教你两分钟快速解决)
  12. mysql查询前100个_mysql查询前100条数据
  13. 跑跑卡丁车rush服务器维护,跑跑卡丁车rush+每日必做事情整理得丰富奖励
  14. 建立“顾客购买图书”的活动图(使用泳道)
  15. window10关闭磁盘bitlocker加密
  16. MVC、POJO、PO、DTO、TO、BO、VO、DAO、domian、delegate、sql
  17. python xls 转化 xlsx
  18. 让猴子游泳,让鸭子爬树
  19. 元月元日是哪一天_2021年元旦是在哪一天几号 1月1日周五
  20. 可塑造攻击_指导如何帮助塑造我的职业

热门文章

  1. 13-5 15 xshell使用xftp pure-ftpd
  2. Zabbix监控指定端口的步骤
  3. java类成员方法(成员函数)的初步介绍
  4. javascript将base64编码的图片数据转换为file并提交
  5. Visual Studio 2012 和.NET Framework 4.5 快速开始的5分钟视频
  6. C#通用类库--DOS常用命令
  7. 【思维智慧】007.利用贪婪的人身上的破绽
  8. 今天成功的将一个对1,000,000条记录的查询从30'提升到1'以下,庆祝一下
  9. Egg Node.js 从小工坊走向企业级开发 #20
  10. 使用Docker启动Kafka-Manager