1,tf中默认是 nhwc,而可以改为nchw,需要更改则需要data_format =‘NCHW’,
2,各种变换可以使用tf.transpose()做更改。
3,对于tf输出矩阵如何好看即axis的使用:
一般情况下对于axis =0,到 =3,分别表示了 n h w c的变化,如何立即:
一般一个图像是这么存放的:
[[[[1,2,3],[1,2,3],[1,2,3]],
[[4,5,6],[4,5,6],[4,5,6]]]]
表示2行3列,每个像素是3个channel表示。
即:nhwc为 1 x 2 x 3 x 3,
但是tf显示是这样的
[[[[1,2,3]
[1,2,3]
[1,2,3]]
[[4,5,6]
[4,5,6]
[4,5,6]]]]
4,kernal 中一般size 是 sizeh sizew inputchannel, outputsize,即为kernal 长宽 个数,和输出大小
tf.nn.conv2d中的filter参数,是[filter_height, filter_width, in_channels, out_channels]的形式
filter1 = tf.constant(value=0, shape=[3,3,1,1],dtype=tf.float32)
5,tf中的上采样 参考 反卷积,Tensorflow的反卷积(上采样):https://blog.csdn.net/guvcolie/article/details/76785275中,
conv2d_transpose(value, filter, output_shape, strides, padding="SAME", data_format="NHWC", name=None),其中:
-
第二个参数filter:卷积核,它要求是一个Tensor,具有[filter_height, filter_width, out_channels, in_channels]这样的shape,具体含义是[卷积核的高度,卷积核的宽度,卷积核个数,图像通道数
https://blog.csdn.net/IT_BOY__/article/details/100552298。比较重要的是,当input的个数为n时候,kernal大小为m*m时候,输出为k的时候参数为:(m*m*n+1)*k,需要这么多参数。6,比较好的理解测试 权重数量的 博客:
7,对于如何理解tf.nn.conv2d和tf.nn.depth_wise_conv2d:注意2d卷积 中 对于 https://blog.csdn.net/weiyumeizi/article/details/82153821:tf.nn.conv2d、tf.layers.conv2d、tf.contrib.layers.conv2d,
其中tf.layers.conv2d最简单,不需要输入各种初始化参数,但是不好理解内部如何实现的,下面理解下:
输入:是 1*5*5*2的图像(nhwc),做卷积3*3 kernal的输出2个featuremap(即model = models.Sequential(),model.add(layers.Conv2D(2, (3, 3), activation='relu', input_shape=(5, 5, 2))))或者(
1 input_data =tf.Variable(np.random.rand(1,5,5,2),dtype=np.float32) 2 filter_data = tf.Variable(np.random.rand(3,3,2,2),dtype=np.float32)# kernalheight kernalwidth inputnum outputnum 3 y = tf.nn.conv2d(input_data,filter_data,strides=[1,1,1,1],padding='SAME') #)都表示了 如何表征待求参数权重的表达式:
为 mmnk的方式,所以内部逻辑是,n作为input表示几个 mm做卷积,而k表示几个输出,所以这个kernal应该是,注意keraml大小为 mmnk的方式
例如权重为 0 ,1 ,2 ,3 的阵列,则1 5 5 2 的卷积核为 3 3 2 2内部,利用3 3 的 0 1 卷积 和+bias 一次,利用3 3 的2 3 卷积第二次,两次后作为最后的featuremap输出。