【TensorFlow】卷积神经网络
tensorflow对卷积神经网络提供了非常好的支持,以下程序实现了一个卷积层的前向传播过程:
# 卷积层的参数前两维代表过滤器的尺寸,第三个维度表示当前层的深度,第四个维度表示过滤器的深度 filter_weight = tf.get_variable(weight, [5,5,3,16], initializer=tf.truncated_normal_initializer(stddev=0.1)) # 和卷积层的权重类似,当前层矩阵上不同位置的偏置项也是共享的,所以总共有下一层深度个不同的偏置项。 biases = tf.get_variable(biases, [16], initializer=tf.constant_initializer(0.1)) # tf.nn.conv2d提供了一个非常方便的函数来实现卷积层前向传播的算法。这个函数的第一个输入为当前层的节点矩阵,注意这个矩阵是一个四维矩阵,后面三个维度对应一个节点矩阵,第一维对应一个输入batch。第二个参数提供了卷积层的权重,第三个参数为不同维度上的步长,虽然第三个参数提供的是一个长度为4的数组,但是第一维和最后一维的数字要求一定是1.这是因为卷积层的步长只是对矩阵的长和宽有效,最后一个参数是填充的方法,tensorflow中提供same或者valid两种选择,其中same表示添加全0填充,valid表示不添加 conv = tf.nn.conv2d(input, fileter_weight, strides=[1,1,1,1], padding=same) # tf.nn.bias_add提供了一个方便的函数给每一个节点加上偏置项。注意这里不能直接使用加法,因为矩阵上不同位置的节点都需要加上同样的偏置项。 bias = tf.nn.bias_add(conv, bias) actived_conv = tf.nn.relu(bias) # tf.nn.max_pool实现了最大池化层的前向传播过程,它的参数和tf.nn.conv2d函数类似,ksize提供了过滤器的尺寸 pool = tf.nn.max_pool(actived_conv, ksize=[1,3,3,1], strides=[1,2,2,1], padding=SAME)
参考资料: TensorFlow:实战Google深度学习框架-中国工信出版集团
上一篇:
JS实现多线程数据分片下载