模型摘要符合预期。正如您所注意到的,使用扩张卷积会导致感受野增加。然而,扩张卷积实际上保留了输入图像/激活的输出形状,因为我们只是改变卷积核。常规内核可能如下
0 1 0
1 1 1
0 1 0
膨胀率为 2 的内核会在原始内核的每个条目之间添加零,如下所示。
0 0 1 0 0
0 0 0 0 0
1 0 1 0 1
0 0 0 0 0
0 0 1 0 0
事实上,您可以看到我们的原始内核也是一个膨胀内核,膨胀率为 1。增加感受野的其他方法会导致输入图像尺寸缩小。最大池化和跨步卷积是两种替代方法。
例如。如果你想通过减小输出形状的大小来增加感受野,你可以使用如下的跨步卷积。我用跨步卷积替换了扩张卷积。您将看到输出形状减少了每一层。
import tensorflow.keras as keras
nn = input_layer = keras.layers.Input(shape=(200, 2))
nn = keras.layers.Conv1D(5, 5, padding='causal', strides=2)(nn)
nn = keras.layers.Conv1D(5, 5, padding='causal', strides=4)(nn)
nn = keras.layers.Dense(1)(nn)
model = keras.Model(input_layer, nn)
opt = keras.optimizers.Adam(lr=0.001)
model.compile(loss='mse', optimizer=opt)
model.summary()
Model: "model_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_2 (InputLayer) [(None, 200, 2)] 0
_________________________________________________________________
conv1d_3 (Conv1D) (None, 100, 5) 55
_________________________________________________________________
conv1d_4 (Conv1D) (None, 25, 5) 130
_________________________________________________________________
dense_1 (Dense) (None, 25, 1) 6
=================================================================
Total params: 191
Trainable params: 191
Non-trainable params: 0
_________________________________________________________________
总而言之,扩张卷积只是增加模型感受野的另一种方法。它的优点是保留输入图像的输出形状。