我是Keras/Tensorflow的初学者。我想我对Conv 2DTranspose的一般功能有一个基本的了解。在细节上我很挣扎。
因此,我写了一个非常简单的例子,这个例子将显示,如何在源矩阵,内核和目标矩阵的值是精确连接:
- 5x 5源矩阵有一个1,其余为0
- 3x 3内核按1-9枚举
- 步幅为2,2
import numpy as np
import keras as keras
X = np.asarray([[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])
X = X.reshape((5, 5, 1))
model = keras.models.Sequential()
layer = keras.layers.Conv2DTranspose(1, (3,3), strides=(2,2), padding='same', input_shape=(5, 5, 1))
model.add(layer)
weights = [np.array([ [[[1]],[[2]],[[3]]],
[[[4]],[[5]],[[6]]],
[[[7]],[[8]],[[9]]]
], dtype="float32"),
np.array([0.], dtype="float32")]
layer.set_weights(weights)
y = model.predict(X).reshape((10, 10))
print(y)
结果是
[[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 1. 2.]
[4. 5. 7. 8. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]
- 非常惊喜:内核右下角位置的9甚至没有出现在结果中
- 同样令人惊讶的是:1-9相对于源中1的位置
有人能解释吗?
1条答案
按热度按时间qnyhuwrf1#
谢谢@xdurch0。回答得很好。
在用
X = X.reshape((1,5, 5, 1))
对X进行整形之后,我得到了我所期望的结果:我只是张贴适当的答案,因为其他人也可能会问“Conv 2DTranspose到底做什么”