我正在尝试使用 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].
我期待您帮助修复模型架构。
我尝试使用模型架构,不幸的是没有任何效果。
根据您的模型架构,我们可以找到每个变量的形状:
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