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

axkjgtzd  于 7个月前  发布在  其他
关注(0)|答案(1)|浏览(63)

我正在尝试使用TensorFlow构建一个Autoencoder模型。输入数据形状:(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].
我期待着你的帮助修复模型架构。
我试着玩模型Architure,不幸的是没有工作。

fcipmucu

fcipmucu1#

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

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),这显然不同。
你可以参考一些github上关于自动编码器去噪的例子:https://github.com/tensorflow/docs/blob/master/site/en/tutorials/generative/autoencoder.ipynb

相关问题