Source code for deephyper.nas.spacelib.tabular.supervised_reg_auto_encoder

import tensorflow as tf

from deephyper.nas import KSearchSpace
from deephyper.nas.node import ConstantNode, VariableNode
from deephyper.nas.operation import Identity, operation

Dense = operation(tf.keras.layers.Dense)


[docs]class SupervisedRegAutoEncoderSpace(KSearchSpace): def __init__( self, input_shape, output_shape, batch_size=None, seed=None, units=[128, 64, 32, 16, 8, 16, 32, 64, 128], num_layers=5, ): super().__init__(input_shape, output_shape, batch_size=batch_size, seed=seed) self.units = units self.num_layers = num_layers
[docs] def build(self): inp = self.input_nodes[0] # auto-encoder units = [128, 64, 32, 16, 8, 16, 32, 64, 128] prev_node = inp d = 1 for i in range(len(units)): vnode = VariableNode() vnode.add_op(Identity()) if d == 1 and units[i] < units[i + 1]: d = -1 for u in range(min(2, units[i]), max(2, units[i]) + 1, 2): vnode.add_op(Dense(u, tf.nn.relu)) latente_space = vnode else: for u in range( min(units[i], units[i + d]), max(units[i], units[i + d]) + 1, 2 ): vnode.add_op(Dense(u, tf.nn.relu)) self.connect(prev_node, vnode) prev_node = vnode out2 = ConstantNode(op=Dense(self.output_shape[0][0], name="output_0")) self.connect(prev_node, out2) # regressor prev_node = latente_space # prev_node = inp for _ in range(self.num_layers): vnode = VariableNode() for i in range(16, 129, 16): vnode.add_op(Dense(i, tf.nn.relu)) self.connect(prev_node, vnode) prev_node = vnode out1 = ConstantNode(op=Dense(self.output_shape[1][0], name="output_1")) self.connect(prev_node, out1) return self
if __name__ == "__main__": from tensorflow.keras.utils import plot_model shapes = dict(input_shape=(100,), output_shape=[(100,), (10,)]) space = SupervisedRegAutoEncoderSpace(**shapes).build() model = space.sample() plot_model(model)