Tensorflow tf.keras和keras之间Conv2D的输出形状不同?
这可能是个愚蠢的问题,因为我对Keras和Tensorflow还不熟悉 我有一个简单的模型:Tensorflow tf.keras和keras之间Conv2D的输出形状不同?,tensorflow,keras,Tensorflow,Keras,这可能是个愚蠢的问题,因为我对Keras和Tensorflow还不熟悉 我有一个简单的模型: classifier=Sequential() classifier.add(Convolution2D(32, 3, 3, input_shape=(64, 64, 3), activation='relu')) classifier.add(MaxPooling2D(pool_size=(2, 2))) classifier.add(Flatten()) classifier.add(Den
classifier=Sequential()
classifier.add(Convolution2D(32, 3, 3, input_shape=(64, 64, 3), activation='relu'))
classifier.add(MaxPooling2D(pool_size=(2, 2)))
classifier.add(Flatten())
classifier.add(Dense(units=128, activation='relu'))
classifier.add(Dense(units=128, activation='relu'))
classifier.add(Dense(units=2, activation='softmax'))
classifier.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
classifier.summary()
当使用tf.keras.*
(如tensorflow.keras.models导入顺序)类运行时,摘要
将第一层显示为:
Layer (type) Output Shape Param #
=================================================================
conv2d (Conv2D) (None, 21, 21, 32) 896
Layer (type) Output Shape Param #
=================================================================
conv2d_1 (Conv2D) (None, 62, 62, 32) 896
但是当使用keras.*
(类似于keras.models中的)类运行时,会导入顺序类<代码>摘要
将第一层显示为:
Layer (type) Output Shape Param #
=================================================================
conv2d (Conv2D) (None, 21, 21, 32) 896
Layer (type) Output Shape Param #
=================================================================
conv2d_1 (Conv2D) (None, 62, 62, 32) 896
为什么它们给出不同的输出形状
我使用的是tensorflow 2.0.0和keras 2.3.1,这实际上与内核大小有关。首先让我们检查一下 例1: 请注意,
Conv2D
中关于代码的微小变化是classifier.add(Conv2D(32,3,3,input_shape=(64,64,3),activation='relu'))
,另一个是kernel_size=(3,3)
。
示例1给出了如下输出形状:
(无、62、62、32)
例2:
让我们将其更改为您的版本
classifier=Sequential()
classifier.add(Conv2D(32, 3, 3, input_shape=(64, 64, 3), activation='relu'))
classifier.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
classifier.summary()
结果,
(无、21、21、32)896
结论是,
tf.keras
api和独立keras
对内核大小的解释不同。注意,我通过tf.keras
api获得了这两个结果。这实际上与内核大小有关。首先让我们检查一下
例1:
请注意,Conv2D
中关于代码的微小变化是classifier.add(Conv2D(32,3,3,input_shape=(64,64,3),activation='relu'))
,另一个是kernel_size=(3,3)
。
示例1给出了如下输出形状:
(无、62、62、32)
例2:
让我们将其更改为您的版本
classifier=Sequential()
classifier.add(Conv2D(32, 3, 3, input_shape=(64, 64, 3), activation='relu'))
classifier.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
classifier.summary()
结果,
(无、21、21、32)896
结论是,tf.keras
api和独立keras
对内核大小的解释不同。注意,我通过tf.keras
api获得了这两个结果