我想创建一个Keras模型类的autoencoder子类,我不知道是否需要分别创建编码器和解码器并将它们合并到一个新的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
您提供的代码中有两个小错误。类似于
INPUT_SHAPE
中未提供的__init__
。另外,使用call
方法代替__call__
一旦这些问题得到解决。您可以使用以下命令定义AE
是采取行动的时候了。让我们实例化这个类并检查对象
您还可以检查编码器和解码器
这将给出
<__main__.Encoder at 0x7f5bb4ed2710>
和<__main__.Decoder at 0x7f5bb4ec99e8>
相关问题 更多 >
编程相关推荐