深度学习神经网络 卷积神经网络 第一节,构建前向传播函数(一)

因为敲卷积神经网络的代码确实浪费了不少时间,这里我详细地把代码进行解释。

只导入一个模块:

import tensorflow as tf

提前先把变量定义好:这个卷积层是先输入28*28维的图像,图像的通道数是1。第一个卷积核的大小是5,卷积核数量是32.第二个卷积核的大小是5,数量是64。第三层是全连接层的。

# 设定神经网络的超参数
# 定义神经网络可以接收的图片的尺寸和通道数
IMAGE_SIZE = 28
NUM_CHANNELS = 1
# 定义第一层卷积核的大小和个数
CONV1_SIZE = 5
CONV1_KERNEL_NUM = 32
# 定义第二层卷积核的大小和个数
CONV2_SIZE = 5
CONV2_KERNEL_NUM = 64
# 定义第三层全连接层的神经元个数
FC_SIZE = 512
# 定义第四层全连接层的神经元个数
OUTPUT_NODE = 10

我画个图表示一下:

现在开始定义网络各个层的参数。首先是网络权重函数。

该函数不但可以用来生成卷积层的参数,还可以用来生成全网络层的参数。(反正只需要注意运算方式不同即可)

# 定义初始化网络权重函数
def get_weight(shape, regularizer):
    '''
    args:
    shape:生成张量的维度
    regularizer: 正则化项的权重
     '''
    # tf.truncated_normal 生成去掉过大偏离点的正态分布随机数的张量,stddev 是指定标准差
    w = tf.Variable(tf.truncated_normal(shape, stddev=0.1))
    # 为权重加入 L2 正则化,通过限制权重的大小,使模型不会随意拟合训练数据中的随机噪音
    if regularizer != None: tf.add_to_collection('losses', tf.contrib.layers.l2_regularizer(regularizer)(w))
    return w

然后是生成偏置的函数。注意其实卷积层也可以给每个卷积的最后运算结果上加个偏置。

# 定义初始化偏置项函数
def get_bias(shape):
    '''
    args:
    shape:生成张量的维度
    '''
    b = tf.Variable(tf.zeros(shape))  # 统一将 bias 初始化为 0
    return b

然后我们定义卷积函数:

该函数返回一个卷积的计算图,输入数据和卷积核,然后进行计算

# 定义卷积计算函数
def conv2d(x, w):
    '''
    args:
    x: 一个输入 batch [batch , 5分辨率 , 5分辨率 , 3通道数]
    w: 卷积层的权重 [3 3 3通道数 16核个数]
    '''
    # strides 表示卷积核在不同维度上的移动步长为 1,第一维和第四维一定是 1,这是因为卷积层的步长只对矩阵的长和宽有效;
    # padding='SAME'表示使用全 0 填充,而'VALID'表示不填充
    return tf.nn.conv2d(x, w, strides=[1, 1, 1, 1], padding='SAME')

然后我们定义池化操作函数:池化过滤器边长为2,移动步长为2,边界填充0.

# 定义最大池化操作函数
def max_pool_2x2(x):
    '''
    args:
    x: 一个输入 batch
    '''
    # ksize 表示池化过滤器的边长为 2,strides 表示过滤器移动步长是 2,'SAME'提供使用全 0 填充
    return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')

有了这四个函数,下一节里,我们就可以现在定义前向传播的函数了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dezeming

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值