Пример #1
0
def create_conv_lstm_search_space(
        input_shape=(7, 808, 782, 1),
        output_shape=(7, 808, 782, 1),
        num_layers=10,
        *args,
        **kwargs,
):
    arch = KSearchSpace(input_shape, output_shape)
    source = prev_input = arch.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(num_layers):
        vnode = VariableNode()
        add_convlstm_to_(vnode)
        arch.connect(prev_input, vnode)
        # * Cell output
        cell_output = vnode
        cmerge = ConstantNode()
        cmerge.set_op(
            AddByProjecting(arch, [cell_output], activation="relu", axis=-2))
        for anchor in anchor_points:
            skipco = VariableNode()
            skipco.add_op(Tensor([]))
            skipco.add_op(Connect(arch, anchor))
            arch.connect(skipco, cmerge)
        # ! for next iter
        prev_input = cmerge
        anchor_points.append(prev_input)

    # Add layer to enforce consistency
    cnode = ConstantNode()
    units = output_shape[-1]
    add_convlstm_oplayer_(cnode, units)
    arch.connect(prev_input, cnode)
    return arch
Пример #2
0
    def build_sub_graph(self, input_, num_layers=3):
        source = prev_input = input_

        # look over skip connections within a range of the 3 previous nodes
        anchor_points = collections.deque([source], maxlen=3)

        for _ in range(num_layers):
            vnode = VariableNode()
            self.add_dense_to_(vnode)

            self.ss.connect(prev_input, vnode)

            # * Cell output
            cell_output = vnode

            cmerge = ConstantNode()
            cmerge.set_op(
                AddByProjecting(self.ss, [cell_output], activation="relu"))

            for anchor in anchor_points:
                skipco = VariableNode()
                skipco.add_op(Zero())
                skipco.add_op(Connect(self.ss, anchor))
                self.ss.connect(skipco, cmerge)

            prev_input = cmerge

            # ! for next iter
            anchor_points.append(prev_input)

        return prev_input
Пример #3
0
def create_search_space(
    input_shape=(10,), output_shape=(7,), num_layers=10, *args, **kwargs
):

    arch = AutoKSearchSpace(input_shape, output_shape, regression=True)
    source = prev_input = arch.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(num_layers):
        vnode = VariableNode()
        add_dense_to_(vnode)

        arch.connect(prev_input, vnode)

        # * Cell output
        cell_output = vnode

        cmerge = ConstantNode()
        cmerge.set_op(AddByProjecting(arch, [cell_output], activation="relu"))

        for anchor in anchor_points:
            skipco = VariableNode()
            skipco.add_op(Tensor([]))
            skipco.add_op(Connect(arch, anchor))
            arch.connect(skipco, cmerge)

        # ! for next iter
        prev_input = cmerge
        anchor_points.append(prev_input)

    return arch
Пример #4
0
    def build_sub_graph(self, input_, num_layers=3):
        source = prev_input = input_

        mirror = False
        is_input = False
        if type(source) is ConstantNode:
            if type(source._op) is Tensor:
                if "input_" in source._op.tensor.name:
                    is_input = True
                    input_name = source._op.tensor.name
                    input_shape = tuple(source._op.tensor.shape[1:])
                    if self.shapes_to_vnodes.get(input_shape) is None:
                        self.shapes_to_vnodes[input_shape] = []
                    else:
                        mirror = True
                        memory = self.shapes_to_vnodes[input_shape][::-1]


        # look over skip connections within a range of the 3 previous nodes
        anchor_points = collections.deque([source], maxlen=3)
        for layer_i in range(num_layers):
            if not(mirror):
                vnode = VariableNode()
                self.add_dense_to_(vnode)
                if is_input:
                    self.shapes_to_vnodes[input_shape].append(vnode)
            else:
                vnode = MirrorNode(memory.pop())

            self.ss.connect(prev_input, vnode)

            # * Cell output
            prev_node = vnode
            if layer_i == num_layers-1:
                return prev_node

            cmerge = ConstantNode()
            cmerge.set_op(Concatenate(self.ss, [prev_node]))

            for anchor in anchor_points:

                if not(mirror):
                    skipco = VariableNode()
                    if is_input:
                        self.shapes_to_vnodes[input_shape].append(skipco)
                else:
                    skipco = MimeNode(memory.pop())

                skipco.add_op(Zero())
                skipco.add_op(Connect(self.ss, anchor))

                self.ss.connect(skipco, cmerge)

            prev_input = cmerge

            # ! for next iter
            anchor_points.append(prev_input)

        return prev_input
Пример #5
0
def create_search_space(
        input_shape=(20, ), output_shape=(20, ), num_layers=5, *args,
        **kwargs):
    vocab_size = 10000
    ss = KSearchSpace(input_shape, (*output_shape, vocab_size))
    source = ss.input_nodes[0]

    emb = VariableNode()
    add_embedding_(emb, vocab_size)
    ss.connect(source, emb)

    timestep_dropout = prev_input = ConstantNode(op=TimestepDropout(rate=0.1))
    ss.connect(emb, timestep_dropout)

    # look over skip connections within a range of the 2 previous nodes
    anchor_points = collections.deque([timestep_dropout], maxlen=3)

    for _ in range(num_layers):
        vnode = VariableNode()
        add_lstm_seq_(vnode)

        ss.connect(prev_input, vnode)

        # * Cell output
        cell_output = vnode

        cmerge = ConstantNode()
        cmerge.set_op(AddByProjecting(ss, [cell_output], activation="relu"))

        for anchor in anchor_points:
            skipco = VariableNode()
            skipco.add_op(Zero())
            skipco.add_op(Connect(ss, anchor))
            ss.connect(skipco, cmerge)

        # ! for next iter
        prev_input = cmerge
        anchor_points.append(prev_input)

    # out = ConstantNode(
    #     op=tf.keras.layers.TimeDistributed(
    #         tf.keras.layers.Dense(units=vocab_size, activation="softmax")
    #     )
    # )
    out = ConstantNode(
        op=tf.keras.layers.Dense(units=vocab_size, activation="softmax"))
    ss.connect(prev_input, out)

    return ss
Пример #6
0
    def build(
        self,
        input_shape,
        output_shape,
        regression=True,
        num_layers=10,
        dropout=0.0,
        **kwargs,
    ):
        ss = AutoKSearchSpace(input_shape, output_shape, regression=regression)
        source = prev_input = ss.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(num_layers):
            vnode = VariableNode()
            self.add_dense_to_(vnode)

            ss.connect(prev_input, vnode)

            # * Cell output
            cell_output = vnode

            cmerge = ConstantNode()
            cmerge.set_op(AddByProjecting(ss, [cell_output],
                                          activation="relu"))

            for anchor in anchor_points:
                skipco = VariableNode()
                skipco.add_op(Zero())
                skipco.add_op(Connect(ss, anchor))
                ss.connect(skipco, cmerge)

            prev_input = cmerge

            # ! for next iter
            anchor_points.append(prev_input)

        if dropout >= 0.0:
            dropout_node = ConstantNode(op=Dropout(rate=dropout))
            ss.connect(prev_input, dropout_node)

        return ss
Пример #7
0
def create_structure(input_shape=[(1, ), (942, ), (5270, ), (2048, )],
                     output_shape=(1, ),
                     num_cells=2,
                     *args,
                     **kwargs):
    struct = AutoKSearchSpace(input_shape, output_shape, regression=True)
    input_nodes = struct.input_nodes

    output_submodels = [input_nodes[0]]

    for i in range(1, 4):
        cnode1 = ConstantNode(name='N', op=Dense(1000, tf.nn.relu))
        struct.connect(input_nodes[i], cnode1)

        cnode2 = ConstantNode(name='N', op=Dense(1000, tf.nn.relu))
        struct.connect(cnode1, cnode2)

        vnode1 = VariableNode(name='N3')
        add_mlp_op_(vnode1)
        struct.connect(cnode2, vnode1)

        output_submodels.append(vnode1)

    merge1 = ConstantNode(name='Merge')
    # merge1.set_op(Concatenate(struct, merge1, output_submodels))
    merge1.set_op(Concatenate(struct, output_submodels))

    cnode4 = ConstantNode(name='N', op=Dense(1000, tf.nn.relu))
    struct.connect(merge1, cnode4)

    prev = cnode4

    for i in range(num_cells):
        cnode = ConstantNode(name='N', op=Dense(1000, tf.nn.relu))
        struct.connect(prev, cnode)

        merge = ConstantNode(name='Merge')
        # merge.set_op(AddByPadding(struct, merge, [cnode, prev]))
        merge.set_op(AddByPadding(struct, [cnode, prev]))

        prev = merge

    return struct
Пример #8
0
    def test_create_multiple_inputs_with_one_vnode(self):
        from deephyper.nas.space import KSearchSpace
        from deephyper.nas.space.node import VariableNode, ConstantNode
        from deephyper.nas.space.op.op1d import Dense
        from deephyper.nas.space.op.merge import Concatenate

        struct = KSearchSpace([(5, ), (5, )], (1, ))

        merge = ConstantNode()
        merge.set_op(Concatenate(struct, struct.input_nodes))

        vnode1 = VariableNode()
        struct.connect(merge, vnode1)

        vnode1.add_op(Dense(1))

        struct.set_ops([0])

        struct.create_model()
Пример #9
0
    def build(self, input_shape, output_shape, regression=True, **kwargs):
        ss = AutoKSearchSpace(input_shape, output_shape, regression=regression)

        if type(input_shape) is list:
            vnodes = []
            for i in range(len(input_shape)):
                vn = self.gen_vnode()
                vnodes.append(vn)
                ss.connect(ss.input_nodes[i], vn)

            cn = ConstantNode()
            cn.set_op(Concatenate(ss, vnodes))

            vn = self.gen_vnode()
            ss.connect(cn, vn)

        else:
            vnode1 = self.gen_vnode()
            ss.connect(ss.input_nodes[0], vnode1)

        return ss
Пример #10
0
    def build(
        self,
        input_shape,
        output_shape,
        regression=True,
        num_layers=10,
        **kwargs,
    ):
        self.ss = AutoKSearchSpace(input_shape, output_shape, regression=regression)
        self.shapes_to_vnodes = {}

        sub_graphs_outputs = []

        for input_ in self.ss.input_nodes:
            output_sub_graph = self.build_sub_graph(input_)
            sub_graphs_outputs.append(output_sub_graph)

        cmerge = ConstantNode()
        cmerge.set_op(Concatenate(self.ss, sub_graphs_outputs))

        output_sub_graph = self.build_sub_graph(cmerge)

        return self.ss