卷积神经网络---padding

Posted cnugis

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了卷积神经网络---padding相关的知识,希望对你有一定的参考价值。

#coding:utf-8
import tensorflow as tf
tf.reset_default_graph()
image = tf.random_normal([1, 112, 96, 3])
in_channels = 3
out_channels = 32
kernel_size = 5
conv_weight = tf.Variable(tf.truncated_normal([kernel_size, kernel_size, in_channels, out_channels], stddev=0.1,
                                              dtype=tf.float32))

print image shape, image.get_shape()
print conv weight shape, conv_weight.get_shape()
bias = tf.Variable(tf.zeros([out_channels], dtype=tf.float32))
conv = tf.nn.conv2d(image, conv_weight, strides=[1, 3, 3, 1], padding=SAME)
conv = tf.nn.bias_add(conv, bias)
print conv output shape with SAME padded, conv.get_shape()

conv = tf.nn.conv2d(image, conv_weight, strides=[1, 3, 3, 1], padding=VALID)
conv = tf.nn.bias_add(conv, bias)
print conv output shape with VALID padded, conv.get_shape()


‘‘‘
两种padding方式的不同
SAME 简而言之就是丢弃,像素不够的时候对那部分不进行卷积,输出图像的宽高计算公式如下(向上取整,进1):
HEIGHT = ceil(float(in_height)/float(strides[1]))
WIDTH = ceil(float(in_width)/float(strides[2]))

VALID 简而言之就是补全,像素不够的时候补0,输出图像的宽高计算公式如下
HEIGHT = ceil(float(in_height - filter_height + 1)/float(strides[1]))
WIDTH = ceil(float(in_width - filter_width + 1)/float(strides[2]))
‘‘‘

 

以上是关于卷积神经网络---padding的主要内容,如果未能解决你的问题,请参考以下文章

卷积神经网络中的stride、padding和channel概念

卷积神经网络padding和strides图示

卷积神经网络---padding

如何标记从卷积神经网络的分割算法生成的图像片段?

卷积神经网络学习

卷积神经网络(原理与代码实现)