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

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 FeedForwardSpace(KSearchSpace): """Simple search space for a feed-forward neural network. No skip-connection. Looking over the number of units per layer and the number of layers. Args: input_shape (tuple, optional): True shape of inputs (no batch size dimension). Defaults to (2,). output_shape (tuple, optional): True shape of outputs (no batch size dimension).. Defaults to (1,). num_layers (int, optional): Maximum number of layers to have. Defaults to 10. num_units (tuple, optional): Range of number of units such as range(start, end, step_size). Defaults to (1, 11). regression (bool, optional): A boolean defining if the model is a regressor or a classifier. Defaults to True. """ def __init__( self, input_shape, output_shape, batch_size=None, seed=None, regression=True, num_units=(1, 11), num_layers=10, ): super().__init__(input_shape, output_shape, batch_size=batch_size, seed=seed) self.regression = regression self.num_units = num_units self.num_layers = num_layers
[docs] def build(self): prev_node = self.input_nodes[0] for _ in range(self.num_layers): vnode = VariableNode() vnode.add_op(Identity()) for i in range(*self.num_units): vnode.add_op(Dense(i, tf.nn.relu)) self.connect(prev_node, vnode) prev_node = vnode output_node = ConstantNode( Dense( self.output_shape[0], activation=None if self.regression else "softmax" ) ) self.connect(prev_node, output_node) return self
if __name__ == "__main__": from tensorflow.keras.utils import plot_model shapes = dict(input_shape=(10,), output_shape=(1,)) space = FeedForwardSpace(**shapes).build() model = space.sample() plot_model(model)