python +tnesorflow 使用tf.nn.conv2d ()为什么输入和权重的shape 不一样

基于python+tensorflow的深度学习中,数据的输入一般为[batch, in_height, in_weight, in_channel]

权重格式一般为 [ filter_height, filter_weight, in_channel, out_channels ],其中 filter_height 为卷积核高度,filter_weight 为卷积核宽度,in_channel 是图像通道数 ,和 input 的 in_channel 要保持一致,out_channel 是卷积核数量。

刚刚开始很疑惑,格式完全对不上。后来发现使用这种格式的代码一般为

tf.nn.conv2d (input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=None)

查看api:

input: A `Tensor`. Must be one of the following types:
  `half`, `bfloat16`, `float32`, `float64`.
  A 4-D tensor. The dimension order is interpreted according to the value
  of `data_format`, see below for details.
filter: A `Tensor`. Must have the same type as `input`.
  A 4-D tensor of shape
  `[filter_height, filter_width, in_channels, out_channels]`

input : 输入的要做卷积的图片,要求为一个张量,shape为 [ batch, in_height, in_weight, in_channel ],其中batch为图片的数量,in_height 为图片高度,in_weight 为图片宽度,in_channel 为图片的通道数,灰度图该值为1,彩色图为3。(也可以用其它值,但是具体含义不是很理解)
filter: 卷积核,要求也是一个张量,shape为 [ filter_height, filter_weight, in_channel, out_channels ],其中 filter_height 为卷积核高度,filter_weight 为卷积核宽度,in_channel 是图像通道数 ,和 input 的 in_channel 要保持一致,out_channel 是卷积核数量。
strides: 卷积时在图像每一维的步长,这是一个一维的向量,[ 1, strides, strides, 1],第一位和最后一位固定必须是1
padding: string类型,值为“SAME” 和 “VALID”,表示的是卷积的形式,是否考虑边界。"SAME"是考虑边界,不足的时候用0去填充周围,"VALID"则不考虑
use_cudnn_on_gpu: bool类型,是否使用cudnn加速,默认为true
 

你可能感兴趣的:(python,人工智能,总结)