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

import collections

import tensorflow as tf

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

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


[docs]class DenseSkipCoSpace(KSearchSpace): def __init__( self, input_shape, output_shape, batch_size=None, seed=None, regression=True, num_layers=10, dropout=0.0, ): super().__init__(input_shape, output_shape, batch_size=batch_size, seed=seed) self.regression = regression self.num_layers = num_layers self.dropout = dropout
[docs] def build(self): source = prev_input = self.input_nodes[0] # look over skip connections within a range of the 3 previous nodes anchor_points = collections.deque([source], maxlen=3) for _ in range(self.num_layers): vnode = VariableNode() self.add_dense_to_(vnode) self.connect(prev_input, vnode) # * Cell output cell_output = vnode cmerge = ConstantNode() cmerge.set_op(AddByProjecting(self, [cell_output], activation="relu")) for anchor in anchor_points: skipco = VariableNode() skipco.add_op(Zero()) skipco.add_op(Connect(self, anchor)) self.connect(skipco, cmerge) prev_input = cmerge # ! for next iter anchor_points.append(prev_input) if self.dropout >= 0.0: dropout_node = ConstantNode(op=Dropout(rate=self.dropout)) self.connect(prev_input, dropout_node) prev_input = dropout_node output_node = ConstantNode( Dense( self.output_shape[0], activation=None if self.regression else "softmax" ) ) self.connect(prev_input, output_node) return self
def add_dense_to_(self, node): node.add_op(Identity()) # we do not want to create a layer in this case activations = [None, tf.nn.swish, tf.nn.relu, tf.nn.tanh, tf.nn.sigmoid] for units in range(16, 97, 16): for activation in activations: node.add_op(Dense(units=units, activation=activation))
if __name__ == "__main__": from tensorflow.keras.utils import plot_model shapes = dict(input_shape=(10,), output_shape=(1,)) space = DenseSkipCoSpace(**shapes).build() model = space.sample() plot_model(model)