【发布时间】:2020-11-15 07:04:09
【问题描述】:
我想创建一个自编码器继承 Keras Model 类,我不知道是否可以分别创建编码器和解码器并将它们组合成一个新的AutoEncoder 类,或者我需要创建两个编码器和解码器在同一个类中。
这是一个类中超级简单的自动编码器的示例:
INPUT_SHAPE = 254
class AutoEncoder(tf.keras.Model):
def __init__(self):
super().__init__()
# Encoder
self.dense1 = tf.keras.layers.Dense(128, input_shape=(INPUT_SHAPE,), activation='relu')
self.dense2 = tf.keras.layers.Dense(INPUT_SHAPE, activation='relu')
#Decoder
self.dense3 = tf.keras.layers.Dense(128, activation='relu')
self.dense4 = tf.keras.layers.Dense(3, activation='sigmoid')
def __call__(self, inp, training=False):
x = self.dense1(inp)
x = self.dense2(x)
x = self.dense3(x)
x = self.dense4(x)
return x
这将是encoder 和decoder 是分开的类,我的疑问是如何将两者结合起来?或者在这种情况下创建自动编码器的最佳方法是什么。
class Encoder(tf.keras.Model):
def __init__(self):
super().__init__()
self.dense1 = tf.keras.layers.Dense(128, input_shape=(INPUT_SHAPE,), activation='relu')
self.dense2 = tf.keras.layers.Dense(INPUT_SHAPE, activation='relu')
def __call__(self, inp, training=False):
x = self.dense1(x)
x = self.dense2(x)
return x
class Decoder(tf.keras.Model):
def __init__(self):
super().__init__()
self.dense3 = tf.keras.layers.Dense(128, input_shape=(INPUT_SHAPE,), activation='relu')
self.dense4 = tf.keras.layers.Dense(3, activation='sigmoid')
def __call__(self, inp, training=False):
x = self.dense3(x)
x = self.dense4(x)
return x
【问题讨论】:
-
我觉得没关系,编码器的输出应该传给解码器,你应该可以计算损失来训练它。
标签: python tensorflow keras deep-learning autoencoder