Tensorflow卷积神经网络常用结构

来源:互联网 发布:手机通话变声器软件 编辑:程序博客网 时间:2024/06/07 03:33

1.卷积层

Tensorflow对卷积神经网络有着很好的支持,下面的程序实现了一个卷积层的前向传播。

import tensorflow as tffilter_weight = tf.get_variable(    #前两个维度代表过滤器的尺寸,第三个维度表示当前层的深度,    #第四个表示过滤器的深度。    'weight',[5, 5, 3, 16],    initializer=tf.truncated_normal_initializer(stddev=0.1))biases = tf.get_variable(    #由于当前过滤器的深度为16,所以偏置相为16,也是神经网络中下一层节点矩阵深度    'biases',[16],initializer=tf.constant_initializer(0.1))conv = tf.nn.conv2d(    input,filter_weight,strides=[1,1,1,1],padding='SAME')bias = tf.nn.bias_add(conv,biases)#通过ReLU函数激活,去线性化actived_conv = tf.nn.relu(bias)

注:

1.tf.nn.conv2d提供了一个简单方便的函数来实现卷积层前向传播的算法。该函数第一个输入为当前层的节点矩阵,注意该矩阵为一个四维矩阵,后面三个维度对应一个节点矩阵,第一维输入一个batch。如input[0,:,:,:]指输入第一张图片,input[1,:,:,:]指输入第二张图片。该函数提供的第二个参数是卷积层的权重,第三个为不同维度上的步长,虽然第三个参数提供的一个长度为4的数组,但是第一维和第四维一定为1,因为卷积层的步数只对矩阵的长宽有效。最后一个参数为填充(padding)的方法,一共有’SAME’和’VALID’两种选择,其中SAME是指添加全0填充,VAILID表示不添加。

2.tf.nn.bias_add提供一个方便的函数给每个节点加上一个偏置项。注意这里不能直接使用方法,因为矩阵上不同位置的节点都需要加上同样的偏置项。

2.池化层

pool = tf.nn.max_pool(actived_conv,ksize=[1,3,3,1],strides=[1,2,2,1],padding='SAME')

tf.nn.max_pool实现了最大池化层的前向传播,他的参数和tf.nn.conv2d函数类似。ksize提供了过滤器的尺寸,strides提供了步长信息,padding提供了是否需要使用全0填充。

原创粉丝点击