三维卷积神经网络预测MNIST数字详解

from __future__ import division,print_function
import tensorflow as tf
import  matplotlib.pyplot as plt
import numpy as np
#导入mnist数据集
from tensorflow.examples.tutorials.mnist import  input_data
mnist = input_data.read_data_sets('MNIST_data/',one_hot=True)

'''
设置batch_size等超参数
'''
learning_rate = 0.001
training_iters = 500
batch_size = 128
'''
display_step :控制报告的粒度
例如:若display_step = 2,则将每训练2个样本输出依次损失粒度,
与超参数不同,修改display_step 不会改变模型学习的规律

通俗的说就是每隔10个训练样本打印输出一次
'''
display_step = 10
#网络参数
n_input = 784  #28*28
n_classes = 10
'''
dropout:意为抛弃,取值为0-1之间,表示隐藏层中的节点在每次迭代中
被遗弃的概率,通过在迭代中遗弃部分节点来使更多的节点都能取到比较是合适的值
'''
dropout = 0.85

#声明占位符
'''
[None,n_input]中的None表示一维值
'''
x = tf.placeholder(tf.float32,[None,n_input])
y = tf.placeholder(tf.float32,[None,n_classes])
'''
keep-prob 是一个具体数字,上个示例
中它是 0.5,而本例中它是 0.8,它表示保留某个隐藏单元的概率,
此处 keep-prob 等于 0.8,
它意味着消除任意一个隐藏单元的概率是 0.2
'''
keep_prob = tf.placeholder(tf.float32)

'''
定义一个输入为x,权值为W,偏置为b,给定步幅的卷积层,激活函数是ReLu,padding
设置为Same模式
strides:步长,
strides参数表示的是滑窗在输入张量各个维度上的移动步长
而且一般要求 strides的参数,strides[0] = strides[3] = 1
具体什么含义呢?
一般而言,对于输入张量(input tensor)有四维信息:[batch, height, width, channels](分别表示 batch_size, 
也即样本的数目,单个样本的行数和列数,样本的频道数,
rgb图像就是三维的,灰度图像则是一维),
对于一个二维卷积操作而言,其主要作用在 height, width上。
strides参数确定了滑动窗口在各个维度上移动的步数。
一种常用的经典设置就是要求,strides[0]=strides[3]=1。
strides[0] = 1,也即在 batch 维度上的移动为 1,也就是不跳过任何一个样本,否则当初也不该把它们作为输入(input)
strides[3] = 1,也即在 channels 维度上的移动为 1,也就是不跳过任何一个颜色通道;

padding设置same模式
padding一般有两种模式 same ,valid
same模式:在卷积核做卷积的过程中(假如卷积核是2*2 但后续不足2*2的话,
same模式会给空缺值补0,从而使得特征图大小不发生改变)
valid模式:在卷积过程中如果后续不足卷积核大小,则后续的值将会被舍弃
这种方法的特征图一般来说会变小
'''
def conv2d(x,W,b,strides=1):
    x = tf.nn.conv2d(x,W,strides=[1,strides,strides,1],padding='SAME')
    '''
tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)
除去name参数用以指定该操作的name,与方法有关的一共五个参数:
第一个参数input:指需要做卷积的输入图像,它要求是一个Tensor,
具有[batch, i

你可能感兴趣的:(机器学习,深度学习,tensorflow,神经网络,python,卷积)