自动编码器:out_backprop 的大小与计算的不匹配

数据挖掘 喀拉斯 自动编码器
2022-02-16 12:08:14

之前有人问过这个问题,但没有人回答过,我有代码

def AutoEncoder(cfg):
    input_img = Input(shape=(cfg.patch_size, cfg.patch_size, cfg.input_channel))

    h = Conv2D(cfg.flc, (4, 4), strides=2, activation=LeakyReLU(alpha=0.2), padding='same')(input_img)
    h = Conv2D(cfg.flc, (8, 8), strides=2, activation=LeakyReLU(alpha=0.2), padding='same')(h)
    h = Conv2D(cfg.flc, (4, 4), strides=2, activation=LeakyReLU(alpha=0.2), padding='same')(h)
    h = Conv2D(cfg.flc, (4, 4), strides=2, activation=LeakyReLU(alpha=0.2), padding='same')(h)
    h = Conv2D(cfg.flc, (3, 3), strides=1, activation=LeakyReLU(alpha=0.2), padding='same')(h)
    h = Conv2D(cfg.flc*2, (4, 4), strides=2, activation=LeakyReLU(alpha=0.2), padding='same')(h)
    h = Conv2D(cfg.flc*2, (3, 3), strides=1, activation=LeakyReLU(alpha=0.2), padding='same')(h)
    h = Conv2D(cfg.flc*4, (4, 4), strides=2, activation=LeakyReLU(alpha=0.2), padding='same')(h)
    h = Conv2D(cfg.flc*2, (3, 3), strides=1, activation=LeakyReLU(alpha=0.2), padding='same')(h)
    h = Conv2D(cfg.flc, (3, 3), strides=1, activation=LeakyReLU(alpha=0.2), padding='same')(h)
    encoded = Conv2D(cfg.z_dim, (8, 8), strides=1, activation='linear', padding='same')(h)

    h = Conv2DTranspose(cfg.flc, (8, 8), strides=1, activation=LeakyReLU(alpha=0.2), padding='same')(encoded)
    h = Conv2D(cfg.flc*2, (3, 3), strides=1, activation=LeakyReLU(alpha=0.2), padding='same')(h)
    h = Conv2D(cfg.flc*4, (3, 3), strides=1, activation=LeakyReLU(alpha=0.2), padding='same')(h)
    h = Conv2DTranspose(cfg.flc*2, (4, 4), strides=2, activation=LeakyReLU(alpha=0.2), padding='same')(h)
    h = Conv2D(cfg.flc*2, (3, 3), strides=1, activation=LeakyReLU(alpha=0.2), padding='same')(h)
    h = Conv2DTranspose(cfg.flc, (4, 4), strides=2, activation=LeakyReLU(alpha=0.2), padding='same')(h)
    h = Conv2D(cfg.flc, (3, 3), strides=1, activation=LeakyReLU(alpha=0.2), padding='same')(h)
    h = Conv2DTranspose(cfg.flc, (4, 4), strides=2, activation=LeakyReLU(alpha=0.2), padding='same')(h)
    h = Conv2DTranspose(cfg.flc, (4, 4), strides=2, activation=LeakyReLU(alpha=0.2), padding='same')(h)
    h = Conv2DTranspose(cfg.flc, (8, 8), strides=2, activation=LeakyReLU(alpha=0.2), padding='same')(h)
    decoded = Conv2DTranspose(cfg.input_channel, (4, 4), strides=2, activation='sigmoid', padding='same')(h)

    return Model(input_img, decoded)

模型摘要是:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         [(None, 512, 512, 3)]     0         
_________________________________________________________________
conv2d (Conv2D)              (None, 256, 256, 32)      1568      
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 128, 128, 32)      65568     
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 64, 64, 32)        16416     
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 32, 32, 32)        16416     
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 32, 32, 32)        9248      
_________________________________________________________________
conv2d_5 (Conv2D)            (None, 16, 16, 64)        32832     
_________________________________________________________________
conv2d_6 (Conv2D)            (None, 16, 16, 64)        36928     
_________________________________________________________________
conv2d_7 (Conv2D)            (None, 8, 8, 128)         131200    
_________________________________________________________________
conv2d_8 (Conv2D)            (None, 8, 8, 64)          73792     
_________________________________________________________________
conv2d_9 (Conv2D)            (None, 8, 8, 32)          18464     
_________________________________________________________________
conv2d_10 (Conv2D)           (None, 8, 8, 500)         1024500   
_________________________________________________________________
conv2d_transpose (Conv2DTran (None, 8, 8, 32)          1024032   
_________________________________________________________________
conv2d_11 (Conv2D)           (None, 8, 8, 64)          18496     
_________________________________________________________________
conv2d_12 (Conv2D)           (None, 8, 8, 128)         73856     
_________________________________________________________________
conv2d_transpose_1 (Conv2DTr (None, 16, 16, 64)        131136    
_________________________________________________________________
conv2d_13 (Conv2D)           (None, 16, 16, 64)        36928     
_________________________________________________________________
conv2d_transpose_2 (Conv2DTr (None, 32, 32, 32)        32800     
_________________________________________________________________
conv2d_14 (Conv2D)           (None, 32, 32, 32)        9248      
_________________________________________________________________
conv2d_transpose_3 (Conv2DTr (None, 64, 64, 32)        16416     
_________________________________________________________________
conv2d_transpose_4 (Conv2DTr (None, 128, 128, 32)      16416     
_________________________________________________________________
conv2d_transpose_5 (Conv2DTr (None, 256, 256, 32)      65568     
_________________________________________________________________
conv2d_transpose_6 (Conv2DTr (None, 512, 512, 3)       1539      
=================================================================
Total params: 2,853,367
Trainable params: 2,853,367
Non-trainable params: 0

我不清楚为什么我会收到错误

tensorflow.python.framework.errors_impl.InvalidArgumentError:  Conv2DCustomBackpropInput: Size of out_backprop doesn't match computed: actual = 4, computed = 8 spatial_dim: 1 input: 8 filter: 8 output: 4 stride: 1 dilation: 1
     [[node model/conv2d_transpose/conv2d_transpose (defined at train2.py:75) ]] [Op:__inference_train_function_2995]

非常感谢任何帮助

0个回答
没有发现任何回复~