我是CNN和tensorflow的新手。自完成Geron的动手TF书以来,已经有2天了。如果有人可以帮助我,我将不胜感激。
目标:了解keras官方文档(https://www.tensorflow.org/api_docs/python/tf/keras/layers/Conv2D)如何使用Conv2D (m,n...)
符号以及为何使用符号。
问题:我编写了两组代码。我理解第一个,它使用明确的声明集来表示filters
and的数量kernel_size
。
TF和Python版本:
sys.version
Out: '3.7.9 (default, Aug 31 2020, 17:10:11) [MSC v.1916 64 bit (AMD64)]'
tf.__version__
Out: '2.3.0'
代码1:
import tensorflow as tf
input_shape = (4, 30, 60, 3) #Sample 30x60 images with RGB channel. `batch_size` = 4
a1=tf.keras.layers.Conv2D(filters=10,kernel_size=(3,3), input_shape=input_shape[1:])
a1(tf.random.normal(input_shape)).shape
a1.filters
a1.kernel_size
model = tf.keras.Sequential()
model.add(a1)
model.output_shape
model.summary()
输出:
Out[99]: TensorShape([4, 28, 58, 10]) #we are not using padding. So, the shape of tensor is 4 batch x 28x58 x 10 filters Out[99]: 10 # number of filters Out[99]: (3, 3) #kernel size Out[99]: (None, 28, 58, 10) #this is the feature map for one image Model: "sequential_24" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d_34 (Conv2D) (None, 28, 58, 10) 280 ================================================================= Total params: 280 Trainable params: 280 Non-trainable params: 0 _________________________________________________________________
我对上面的输出很好。我已经在上面添加了我的想法。
代码2:现在,我修改了上面的代码中不明确提到kernel_size
并filters
按照上面的官方文件。
a2=tf.keras.layers.Conv2D(10,3,3, input_shape=input_shape[1:]) #here's the change.
a2(tf.random.normal(input_shape)).shape
a2.filters
a2.kernel_size
model = tf.keras.Sequential()
model.add(a2)
model.output_shape
model.summary()
输出:
Out[100]: TensorShape([4, 10, 20, 10]) Out[100]: 10 Out[100]: (3, 3) Out[100]: (None, 10, 20, 10) Model: "sequential_25" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d_35 (Conv2D) (None, 10, 20, 10) 280 ================================================================= Total params: 280 Trainable params: 280 Non-trainable params: 0 _________________________________________________________________
如我们所见,唯一的区别是代码1使用,Conv2D(filters=10,kernel_size=(3,3),...
而代码2使用Conv2D(10,3,3,...
。而且filters
和kernel_size
也一样。但是,output_shape
完全不同。
为什么是这样?有人可以解释一下吗?我在keras官方文档(https://www.tensorflow.org/api_docs/python/tf/keras/layers/Conv2D)上找不到任何内容。
使用tf.keras.layers.Conv2D()时,应将第二个参数(kernel_size)作为元组传递,(3, 3)
否则,您将分配第二个参数kernel_size = 3,然后分配第三个参数stride = 3。通过使用3的跨度,您会看到一个input_shape,它是原始inputh形状的1/3,四舍五入为最接近的整数。
因此,将您的代码更改为:
a2=tf.keras.layers.Conv2D(10, (3,3), input_shape=input_shape[1:])
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句