美文网首页深度学习
卷积神经网随笔(上)

卷积神经网随笔(上)

作者: zidea | 来源:发表于2019-10-17 21:07 被阅读0次
MachineLearninginMarketing

准备数据集

用卷积来做手写数字数据集分类问题,我们用 tensorflow 提供的方法来下载数据集。推荐自己写数据集下载方法。

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("../MNIST_data/",one_hot=True)

tf.InteractiveSession()是一种交互式的 session 方式,让自己成为了默认的 session,也就是说用户在不需要指明在哪个 session 下运行,就可以运行起来,这就是默认的好处。这样的话就是 run()eval() 函数可以不指明 session,就可以调用。

sess = tf.InteractiveSession()

权重和偏移值

def weight_variable(shape):
    initial = tf.truncated_normal(shape)
    return tf.Variable(initial)

def bias_variable(shape):
    initial = tf.constant(0.1,shape=shape)
    return tf.Variable(initial)

从截断的正态分布中输出随机值。 shape表示生成张量的维度,mean是均值,stddev是标准差。这个函数产生正太分布,均值和标准差自己设定。

卷积层和池化层

def conv2d(x,W):
    return tf.nn.conv2d(x,W,strides=[1,1,1,1],padding='SAME')

def max_pool_2x2(x):
    return tf.nn.max_pool(x, ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')

卷积层和池化层是卷积神经网的特性,目的在于减少神经网的参数。
tf.nn.conv2d是 tensoflow 中的 2 维卷积函数

  • x 是输入
  • W 是卷积核的参数例如 [5,5,1,32] 前两个参数表示卷积核的大小,1表示颜色通道,如果是彩色 RGB 则是 3,最后表示卷积核的数量。
  • strides 表示移动步数
  • Padding 表示当卷积核移动边缘时候输入矩阵不够时候。

池化层有两种一种是均值池化层另一种是最大值池化层,这里采用的是最大值池化层,将 2 x 2 矩阵化简为 1 x 1 的矩阵。

x = tf.placeholder(tf.float32,[None,784])
y_ = tf.placeholder(tf.float32,[None,10])
# 这里 -1 表示通道不限,28x28 表示图片大小,1 表示一个通道
x_image = tf.reshape(x,[-1,28,28,1])

输入是样本数量个,每一个图片用 784 维矩阵表示,因为样本数量不确定所有用 None 来表示。
输入是一个 1 x 10 向量,是一个随机概率分布,取最大值表示推测数字位置。

第一层卷积层

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)

第一层卷积为 28x28 大小矩阵经过 5x5 大小 32 层的卷积后因为 padding 给的值是 SAME 所以大小没有变化,经过池化层后为大小减半为 14x14

第二层卷积层

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)

经过一个隐藏卷积层后变为 7x7

相关文章

网友评论

    本文标题:卷积神经网随笔(上)

    本文链接:https://www.haomeiwen.com/subject/smavmctx.html