You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自定义输入深度为4的CNN自编码器网络?

问题

现有一个CNN自编码器结构,在输入形状为(200,800,2)时运行正常。测试输入维度为(200,800,4)的情况时,因输出层add_4的形状为(200,800,2),与输入形状不匹配报错:

ValueError: Dimensions must be equal, but are 2 and 4 for '{{node mean_squared_error/SquaredDifference}} = SquaredDifference[T=DT_FLOAT](model/add/add, IteratorGetNext:1)' with input shapes: [?,200,800,2], [?,200,800,4].

当前网络代码:

input_img = Input(shape=(200, 800, 2))
## Encoder
x = Conv2D(16, (3, 3), activation='tanh', padding='same')(input_img)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(8, (3, 3), activation='tanh', padding='same')(x)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(8, (3, 3), activation='tanh', padding='same')(x)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(8, (3, 3), activation='tanh', padding='same')(x)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(4, (3, 3), activation='tanh', padding='same')(x)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(4, (3, 3), activation='tanh', padding='same')(x)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Reshape([4*13*4])(x) 
encoded = Dense(2,activation='tanh')(x)
## Two variables
val1= Lambda(lambda x: x[:,0:1])(encoded)
val2= Lambda(lambda x: x[:,1:2])(encoded)
## Decoder 1
x1 = Dense(4*13*4,activation='tanh')(val1)
x1 = Reshape([4,13,4])(x1)
x1 = UpSampling2D((2,2))(x1)
x1 = Conv2D(4,(3,3),activation='tanh',padding='same')(x1)
x1 = UpSampling2D((2,2))(x1)
x1 = Conv2D(8,(3,3),activation='tanh',padding='same')(x1)
x1 = UpSampling2D((2,2))(x1)
x1 = Conv2D(8,(3,3),activation='tanh',padding='same')(x1)
x1 = UpSampling2D((2,2))(x1)
x1 = Conv2D(8,(3,3),activation='tanh',padding='same')(x1)
x1 = UpSampling2D((2,2))(x1)
x1 = Conv2D(16,(3,3),activation='tanh',padding='same')(x1)
x1 = UpSampling2D((2,2))(x1)
x1d = Conv2D(2,(3,3),activation='linear',padding='same')(x1)
## Decoder 2
x2 = Dense(4*13*4,activation='tanh')(val2)
x2 = Reshape([4,13,4])(x2)
x2 = UpSampling2D((2,2))(x2)
x2 = Conv2D(4,(3,3),activation='tanh',padding='same')(x2)
x2 = UpSampling2D((2,2))(x2)
x2 = Conv2D(8,(3,3),activation='tanh',padding='same')(x2)
x2 = UpSampling2D((2,2))(x2)
x2 = Conv2D(8,(3,3),activation='tanh',padding='same')(x2)
x2 = UpSampling2D((2,2))(x2)
x2 = Conv2D(8,(3,3),activation='tanh',padding='same')(x2)
x2 = UpSampling2D((2,2))(x2)
x2 = Conv2D(16,(3,3),activation='tanh',padding='same')(x2)
x2 = UpSampling2D((2,2))(x2)
x2d = Conv2D(2,(3,3),activation='linear',padding='same')(x2)

decoded = Add()([x1d,x2d])

输出形状信息:

__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
input_6 (InputLayer)            [(None, 200, 800, 2) 0                                             
__________________________________________________________________________________________________
conv2d_78 (Conv2D)              (None, 200, 800, 16) 304         input_6[0][0]                    
__________________________________________________________________________________________________
max_pooling2d_30 (MaxPooling2D) (None, 100, 400, 16) 0           conv2d_78[0][0]                  
__________________________________________________________________________________________________
conv2d_79 (Conv2D)              (None, 100, 400, 8)  1160        max_pooling2d_30[0][0]          
__________________________________________________________________________________________________
max_pooling2d_31 (MaxPooling2D) (None, 50, 200, 8)   0           conv2d_79[0][0]                  
__________________________________________________________________________________________________
conv2d_80 (Conv2D)              (None, 50, 200, 8)   584         max_pooling2d_31[0][0]          
__________________________________________________________________________________________________
max_pooling2d_32 (MaxPooling2D) (None, 25, 100, 8)   0           conv2d_80[0][0]                  
__________________________________________________________________________________________________
conv2d_81 (Conv2D)              (None, 25, 100, 8)   584         max_pooling2d_32[0][0]          
__________________________________________________________________________________________________
max_pooling2d_33 (MaxPooling2D) (None, 13, 50, 8)    0           conv2d_81[0][0]                  
__________________________________________________________________________________________________
conv2d_82 (Conv2D)              (None, 13, 50, 4)    292         max_pooling2d_33[0][0]          
__________________________________________________________________________________________________
max_pooling2d_34 (MaxPooling2D) (None, 7, 25, 4)     0           conv2d_82[0][0]                  
__________________________________________________________________________________________________
conv2d_83 (Conv2D)              (None, 7, 25, 4)     148         max_pooling2d_34[0][0]          
__________________________________________________________________________________________________
max_pooling2d_35 (MaxPooling2D) (None, 4, 13, 4)     0           conv2d_83[0][0]                  
__________________________________________________________________________________________________
reshape_13 (Reshape)            (None, 208)          0           max_pooling2d_35[0][0]          
__________________________________________________________________________________________________
dense_12 (Dense)                (None, 2)            418         reshape_13[0][0]                
__________________________________________________________________________________________________
lambda_8 (Lambda)               (None, 1)            0           dense_12[0][0]                   
__________________________________________________________________________________________________
lambda_9 (Lambda)               (None, 1)            0           dense_12[0][0]                   
__________________________________________________________________________________________________
dense_13 (Dense)                (None, 208)          416         lambda_8[0][0]                   
__________________________________________________________________________________________________
dense_14 (Dense)                (None, 208)          416         lambda_9[0][0]                   
__________________________________________________________________________________________________
reshape_14 (Reshape)            (None, 4, 13, 4)     0           dense_13[0][0]                   
__________________________________________________________________________________________________
reshape_15 (Reshape)            (None, 4, 13, 4)     0           dense_14[0][0]                   
__________________________________________________________________________________________________
up_sampling2d_48 (UpSampling2D) (None, 8, 13, 4)     0           reshape_14[0][0]                 
__________________________________________________________________________________________________
up_sampling2d_54 (UpSampling2D) (None, 8, 13, 4)     0           reshape_15[0][0]                 
__________________________________________________________________________________________________
conv2d_84 (Conv2D)              (None, 8, 13, 4)     148         up_sampling2d_48[0][0]          
__________________________________________________________________________________________________
conv2d_90 (Conv2D)              (None, 8, 13, 4)     148         up_sampling2d_54[0][0]          
__________________________________________________________________________________________________
up_sampling2d_49 (UpSampling2D) (None, 16, 26, 4)    0           conv2d_84[0][0]                  
__________________________________________________________________________________________________
up_sampling2d_55 (UpSampling2D) (None, 16, 26, 4)    0           conv2d_90[0][0]                  
__________________________________________________________________________________________________
conv2d_85 (Conv2D)              (None, 16, 26, 8)    296         up_sampling2d_49[0][0]          
__________________________________________________________________________________________________
conv2d_91 (Conv2D)              (None, 16, 26, 8)    296         up_sampling2d_55[0][0]          
__________________________________________________________________________________________________
up_sampling2d_50 (UpSampling2D) (None, 32, 52, 8)    0           conv2d_85[0][0]                  
__________________________________________________________________________________________________
up_sampling2d_56 (UpSampling2D) (None, 32, 52, 8)    0           conv2d_91[0][0]                  
__________________________________________________________________________________________________
conv2d_86 (Conv2D)              (None, 32, 52, 8)    584         up_sampling2d_50[0][0]          
__________________________________________________________________________________________________
conv2d_92 (Conv2D)              (None, 32, 52, 8)    584         up_sampling2d_56[0][0]          
__________________________________________________________________________________________________
up_sampling2d_51 (UpSampling2D) (None, 64, 104, 8)   0           conv2d_86[0][0]                  
__________________________________________________________________________________________________
up_sampling2d_57 (UpSampling2D) (None, 64, 104, 8)   0           conv2d_92[0][0]                  
__________________________________________________________________________________________________
conv2d_87 (Conv2D)              (None, 64, 104, 8)   584         up_sampling2d_51[0][0]          
__________________________________________________________________________________________________
conv2d_93 (Conv2D)              (None, 64, 104, 8)   584         up_sampling2d_57[0][0]          
__________________________________________________________________________________________________
up_sampling2d_52 (UpSampling2D) (None, 128, 208, 8)  0           conv2d_87[0][0]                  
__________________________________________________________________________________________________
up_sampling2d_58 (UpSampling2D) (None, 128, 208, 8)  0           conv2d_93[0][0]                  
__________________________________________________________________________________________________
conv2d_88 (Conv2D)              (None, 128, 208, 16) 1168        up_sampling2d_52[0][0]          
__________________________________________________________________________________________________
conv2d_94 (Conv2D)              (None, 128, 208, 16) 1168        up_sampling2d_58[0][0]          
__________________________________________________________________________________________________
up_sampling2d_53 (UpSampling2D) (None, 256, 416, 16) 0           conv2d_88[0][0]                  
__________________________________________________________________________________________________
up_sampling2d_59 (UpSampling2D) (None, 256, 416, 16) 0           conv2d_94[0][0]                  
__________________________________________________________________________________________________
conv2d_89 (Conv2D)              (None, 256, 416, 2)  290         up_sampling2d_53[0][0]          
__________________________________________________________________________________________________
conv2d_95 (Conv2D)              (None, 256, 416, 2)  290         up_sampling2d_59[0][0]          
__________________________________________________________________________________________________
add_4 (Add)                     (None, 256, 416, 2)  0           conv2d_89[0][0]                  
                                                                 conv2d_95[0][0]
解决方案

要适配(200,800,4)的输入并让输出形状匹配,需修改三个核心部分:

1. 输入层通道数调整

将输入层的通道数从2改为4,匹配新的输入维度:

input_img = Input(shape=(200, 800, 4))

2. 解码器输出通道数调整

两个解码器的最后一层Conv2D,需将输出通道数从2改为4,这样相加后的输出通道数为4,与输入匹配:

  • 解码器1的输出层:x1d = Conv2D(4,(3,3),activation='linear',padding='same')(x1)
  • 解码器2的输出层:x2d = Conv2D(4,(3,3),activation='linear',padding='same')(x2)

修改后的完整代码

input_img = Input(shape=(200, 800, 4))
## Encoder
x = Conv2D(16, (3, 3), activation='tanh', padding='same')(input_img)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(8, (3, 3), activation='tanh', padding='same')(x)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(8, (3, 3), activation='tanh', padding='same')(x)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(8, (3, 3), activation='tanh', padding='same')(x)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(4, (3, 3), activation='tanh', padding='same')(x)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(4, (3, 3), activation='tanh', padding='same')(x)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Reshape([4*13*4])(x) 
encoded = Dense(2,activation='tanh')(x)
## Two variables
val1= Lambda(lambda x: x[:,0:1])(encoded)
val2= Lambda(lambda x: x[:,1:2])(encoded)
## Decoder 1
x1 = Dense(4*13*4,activation='tanh')(val1)
x1
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 03:57:13