去噪自动编码器模型中的尺寸错误尺寸必须相等,但输入形状为 9252 和 129:[?,9252,32]、[?,129,32]

问题描述 投票:0回答:1

我正在尝试使用 TensorFlow 构建自动编码器模型。输入数据形状:

(339, 129, 32)
模型架构如下:

input_data = tf.keras.layers.Input(shape=train_sample.shape[1:])

masking = keras.layers.Masking(mask_value=-100.0)(input_data)

conv = tf.keras.Sequential([
    tf.keras.layers.Conv1D(128, 3, padding='same'),
    tf.keras.layers.AveragePooling1D(3),
    tf.keras.layers.ReLU(),
    tf.keras.layers.Conv1D(64, 3, padding='same'),
    tf.keras.layers.AveragePooling1D(2),
    tf.keras.layers.ReLU(),
    tf.keras.layers.Conv1D(32, 3, padding='same'),
    tf.keras.layers.ReLU(),
    tf.keras.layers.Conv1D(16, 3, padding='same'),
    tf.keras.layers.ReLU()
])
fc = tf.keras.Sequential([
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(256),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.ReLU(),
    tf.keras.layers.Dense(32),
])
conv_out = conv(masking)
fc_out = fc(conv_out)

defc = tf.keras.Sequential([
    tf.keras.layers.Dense(256),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.ReLU(),
    tf.keras.layers.Dense(576),
    tf.keras.layers.ReLU(),
    tf.keras.layers.Dense(1024),
    tf.keras.layers.ReLU()
])

dconv = tf.keras.Sequential([
    tf.keras.layers.Reshape((1024, 1)),
    tf.keras.layers.Conv1DTranspose(576, kernel_size=3, dilation_rate=2),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.ReLU(),
    tf.keras.layers.Conv1DTranspose(384, kernel_size=4, strides=3, padding='same'),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.ReLU(),
    tf.keras.layers.Conv1DTranspose(32, kernel_size=3, strides=3),
    tf.keras.layers.Activation("sigmoid")
])


defc_out = defc(fc_out)
dconv_out = dconv(defc_out)

但出现以下错误:

    ValueError: Dimensions must be equal, but are 9252 and 129 for '{{node mean_squared_error/SquaredDifference}} = SquaredDifference[T=DT_FLOAT](model_6/sequential_21/activation_3/Sigmoid, IteratorGetNext:1)' with input shapes: [?,9252,32], [?,129,32].

我期待您帮助修复模型架构。

我尝试使用模型架构,不幸的是没有任何效果。

tensorflow keras deep-learning autoencoder
1个回答
0
投票

根据您的模型架构,我们可以找到每个变量的形状:

conv_out: (None, 21, 16)
fc_out: (None, 32)
defc_out: (None, 1024)
dconv_out: (None, 9252, 32)

错误消息表明您正在使用

mean_squared_error
,这意味着输入形状应与输出形状匹配。

但是,您将输入形状指定为

(None, 129, 32)
,而输出形状为
(None, 9252, 32)
,这明显不同。

此外,您的输入数据形状是二维的。为此,使用

Conv2D
AveragePooling2D
Conv2DTranspose
等模块会更合适。

您可以参考一些关于去噪自动编码器的github示例:https://github.com/tensorflow/docs/blob/master/site/en/tutorials/generative/autoencoder.ipynb

© www.soinside.com 2019 - 2024. All rights reserved.