Keras:Conv2DTranspose到底是做什么的?

sy5wg1nm  于 2023-03-02  发布在  其他
关注(0)|答案(1)|浏览(164)

我是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的位置

有人能解释吗?

qnyhuwrf

qnyhuwrf1#

谢谢@xdurch0。回答得很好。
在用X = X.reshape((1,5, 5, 1))对X进行整形之后,我得到了我所期望的结果:

[[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. 3. 0. 0. 0.]
 [0. 0. 0. 0. 4. 5. 6. 0. 0. 0.]
 [0. 0. 0. 0. 7. 8. 9. 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.]]

我只是张贴适当的答案,因为其他人也可能会问“Conv 2DTranspose到底做什么”

相关问题