gpt4 book ai didi

tensorflow - 在 Keras 中使用扩张卷积

转载 作者:行者123 更新时间:2023-12-04 15:22:06 28 4
gpt4 key购买 nike

WaveNet ,扩张卷积用于增加上面层的感受野。
Dilated convolution
从图中,您可以看到内核大小为 2 且幂为 2 的扩张率的扩张卷积层创建了一个树状的感受野结构。我试图(非常简单地)在 Keras 中复制上述内容。

import tensorflow.keras as keras
nn = input_layer = keras.layers.Input(shape=(200, 2))
nn = keras.layers.Conv1D(5, 5, padding='causal', dilation_rate=2)(nn)
nn = keras.layers.Conv1D(5, 5, padding='causal', dilation_rate=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()
和输出:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_4 (InputLayer) [(None, 200, 2)] 0
_________________________________________________________________
conv1d_5 (Conv1D) (None, 200, 5) 55
_________________________________________________________________
conv1d_6 (Conv1D) (None, 200, 5) 130
_________________________________________________________________
dense_2 (Dense) (None, 200, 1) 6
=================================================================
Total params: 191
Trainable params: 191
Non-trainable params: 0
_________________________________________________________________
我在期待 axis=1每次收缩后 conv1d图层,类似于gif。为什么不是这样?

最佳答案

模型摘要符合预期。正如您所注意到的,使用扩张卷积会导致感受野增加。然而,扩张卷积实际上保留了我们输入图像/激活的输出形状,因为我们只是在改变卷积核。常规内核可能如下所示

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。增加感受野的替代方法导致输入图像的缩小。最大池化和跨步卷积是 2 种替代方法。
例如。如果你想通过减小输出形状的大小来增加感受野,你可以使用如下的跨步卷积。我用跨步卷积替换了扩张卷积。您将看到输出形状减少了每一层。
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
_________________________________________________________________

总结扩张卷积只是增加模型感受野的另一种方法。它的好处是可以保留输入图像的输出形状。

关于tensorflow - 在 Keras 中使用扩张卷积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63073760/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com