예제 #1
0
def create_cell_1(input_nodes):
    """Create a cell with convolution.

    Args:
        input_nodes (list(Node)): a list of input_nodes for this cell.

    Returns:
        Cell: the corresponding cell.
    """
    cell = Cell(input_nodes)

    def create_block(input_node):

        # first node of block
        n1 = ConstantNode(op=Dense(1000, tf.nn.relu), name='N1')
        cell.graph.add_edge(input_node, n1)  # fixed input of current block

        # second node of block
        n2 = ConstantNode(op=Dense(1000, tf.nn.relu), name='N2')

        # third node of the block
        n3 = ConstantNode(op=Dense(1000, tf.nn.relu), name='N3')

        block = Block()
        block.add_node(n1)
        block.add_node(n2)
        block.add_node(n3)

        block.add_edge(n1, n2)
        block.add_edge(n2, n3)
        return block, (n1, n2, n3)

    block1, _ = create_block(input_nodes[0])
    block2, (vn1, vn2, vn3) = create_block(input_nodes[1])

    # first node of block
    m_vn1 = MirrorNode(node=vn1)
    cell.graph.add_edge(input_nodes[2], m_vn1)  # fixed input of current block

    # second node of block
    m_vn2 = MirrorNode(node=vn2)

    # third node of the block
    m_vn3 = MirrorNode(node=vn3)

    block3 = Block()
    block3.add_node(m_vn1)
    block3.add_node(m_vn2)
    block3.add_node(m_vn3)

    block3.add_edge(m_vn1, m_vn2)
    block3.add_edge(m_vn2, m_vn3)

    cell.add_block(block1)
    cell.add_block(block2)
    cell.add_block(block3)

    # set_cell_output_add(cell)
    cell.set_outputs()
    return cell
예제 #2
0
def create_mlp_block(cell, input_node):
    block = Block()

    # first node of block
    n1 = ConstantNode(op=Dense(1000, tf.nn.relu), name='N1')
    cell.graph.add_edge(input_node, n1)  # fixed input of current block
    block.add_node(n1)

    # second node of block
    n2 = ConstantNode(op=Dense(1000, tf.nn.relu), name='N2')
    block.add_node(n2)

    addNode1 = ConstantNode(name='Merging')
    addNode1.set_op(AddByPadding())  # edge created here
    block.add_node(addNode1)

    block.add_edge(n1, n2)
    block.add_edge(n2, addNode1)
    block.add_edge(n1, addNode1)  # residual connection

    n3 = ConstantNode(op=Dense(1000, tf.nn.relu), name='N3')
    block.add_node(n3)

    block.add_edge(addNode1, n3)

    addNode2 = ConstantNode(name='Merging')
    addNode2.set_op(AddByPadding())  # edge created here
    block.add_node(addNode2)

    block.add_edge(n3, addNode2)
    block.add_edge(addNode1, addNode2)

    cell.add_block(block)
    return n1
예제 #3
0
    def create_block():
        # first node of block
        n1 = VariableNode('N1')
        for inpt in input_nodes:
            n1.add_op(Connect(cell.graph, inpt, n1))

        # second node of block
        mlp_op_list = list()
        mlp_op_list.append(Identity())
        mlp_op_list.append(Dense(5, tf.nn.relu))
        mlp_op_list.append(Dense(5, tf.nn.tanh))
        mlp_op_list.append(Dense(10, tf.nn.relu))
        mlp_op_list.append(Dense(10, tf.nn.tanh))
        mlp_op_list.append(Dense(20, tf.nn.relu))
        mlp_op_list.append(Dense(20, tf.nn.tanh))
        n2 = VariableNode('N2')
        for op in mlp_op_list:
            n2.add_op(op)

        # third node of block
        n3 = VariableNode('N3')
        for op in dropout_ops:
            n3.add_op(op)

        block = Block()
        block.add_node(n1)
        block.add_node(n2)
        block.add_node(n3)

        block.add_edge(n1, n2)
        block.add_edge(n2, n3)
        return block
예제 #4
0
    def create_conv_block(input_nodes):
        # first node of block
        n1 = VariableNode('N1')
        for inpt in input_nodes:
            n1.add_op(Connect(cell.graph, inpt, n1))

        def create_conv_node(name):
            n = VariableNode(name)
            n.add_op(Identity())
            n.add_op(Conv1D(filter_size=5, num_filters=2))
            n.add_op(Conv1D(filter_size=5, num_filters=3))
            n.add_op(MaxPooling1D(pool_size=3, padding='same'))
            n.add_op(MaxPooling1D(pool_size=5, padding='same'))
            return n
        # second node of block
        n2 = create_conv_node('N2')

        n3 = create_conv_node('N3')

        block = Block()
        block.add_node(n1)
        block.add_node(n2)
        block.add_node(n3)

        block.add_edge(n1, n2)
        block.add_edge(n2, n3)
        return block
예제 #5
0
def create_structure(input_shape=[(2, ), (2, ), (2, )],
                     output_shape=(1, ),
                     num_cell=8,
                     *args,
                     **kwargs):

    network = KerasStructure(input_shape,
                             output_shape)  #, output_op=AddByPadding)
    input_nodes = network.input_nodes

    # CELL 1
    cell1 = create_cell_1(input_nodes)
    network.add_cell(cell1)

    # CELL Middle
    inputs_skipco = [
        input_nodes, input_nodes[0], input_nodes[1], input_nodes[2],
        cell1.output
    ]
    pred_cell = cell1
    n = num_cell
    for i in range(n):
        cell_i = Cell(input_nodes + [cell1.output])

        block1 = create_mlp_block(cell_i, pred_cell.output)
        cell_i.add_block(block1)

        cnode = VariableNode(name='SkipCo')
        nullNode = ConstantNode(op=Tensor([]), name='None')
        cnode.add_op(Connect(cell_i.graph, nullNode, cnode))  # SAME

        for inpt in inputs_skipco:
            cnode.add_op(Connect(cell_i.graph, inpt, cnode))

        block2 = Block()
        block2.add_node(cnode)
        cell_i.add_block(block2)
        # set_cell_output_add(cell2)
        cell_i.set_outputs()

        network.add_cell(cell_i)

        # prep. for next iter
        inputs_skipco.append(cell_i.output)
        pred_cell = cell_i

    # CELL LAST
    cell_last = Cell([pred_cell.output])
    block1 = create_mlp_block(cell_last, pred_cell.output)
    cell_last.add_block(block1)
    # set_cell_output_add(cell3)
    cell_last.set_outputs()
    network.add_cell(cell_last)

    return network
예제 #6
0
def create_cell_mlp(input_nodes):
    """Create a cell with convolution.

    Args:
        input_nodes (list(Node)): a list of input_nodes for this cell.

    Returns:
        Cell: the corresponding cell.
    """
    cell = Cell(input_nodes)

    n1 = ConstantNode(name='N1')
    cell.graph.add_edge(input_nodes[0], n1)  # fixed input connection
    n1.set_op(op=Flatten())

    n2 = VariableNode('N2')
    n2.add_op(Identity())
    n2.add_op(Dense(units=10))
    n2.add_op(Dense(units=50))
    n2.add_op(Dense(units=100))
    n2.add_op(Dense(units=200))
    n2.add_op(Dense(units=250))
    n2.add_op(Dense(units=500))
    n2.add_op(Dense(units=750))
    n2.add_op(Dense(units=1000))

    n3 = VariableNode('N3')
    n3.add_op(Identity())
    n3.add_op(Activation(activation='relu'))
    n3.add_op(Activation(activation='tanh'))
    n3.add_op(Activation(activation='sigmoid'))

    n4 = VariableNode('N4')
    n4.add_op(Identity())
    n4.add_op(Dropout(rate=0.5))
    n4.add_op(Dropout(rate=0.4))
    n4.add_op(Dropout(rate=0.3))
    n4.add_op(Dropout(rate=0.2))
    n4.add_op(Dropout(rate=0.1))
    n4.add_op(Dropout(rate=0.05))

    block = Block()
    block.add_node(n1)
    block.add_node(n2)
    block.add_node(n3)
    block.add_node(n4)
    block.add_edge(n1, n2)
    block.add_edge(n2, n3)
    block.add_edge(n3, n4)

    cell.add_block(block)

    cell.set_outputs()
    return cell
예제 #7
0
def create_mlp_block(cell, input_node, skipco_inputs):

        # first block with one node
        block1 = Block()
        n1 = VariableNode('N1')
        create_mlp_node(n1)
        cell.graph.add_edge(input_node, n1) # fixed input of current block
        block1.add_node(n1)

        # second block for skipconnection
        block2 = Block()
        nullNode = ConstantNode(op=Tensor([]), name='None')
        cnode = VariableNode(name='SkipCo')
        cnode.add_op(Connect(cell.graph, nullNode, cnode)) # SAME
        for n in skipco_inputs:
            cnode.add_op(Connect(cell.graph, n, cnode))
        block2.add_node(cnode)

        cell.add_block(block1)
        cell.add_block(block2)
        return n1 # return dense to append it in the skipco_inputs list
예제 #8
0
def create_cell_conv(input_nodes):
    """Create a cell with convolution.

    Args:
        input_nodes (list(Node)): a list of input_nodes for this cell.

    Returns:
        Cell: the corresponding cell.
    """
    cell = Cell(input_nodes)

    n1 = VariableNode('N1')
    cell.graph.add_edge(input_nodes[0], n1)  # fixed input connection
    n1.add_op(Identity())
    # n1.add_op(Conv1D(filter_size=2, num_filters=8))
    n1.add_op(Conv1D(filter_size=3, num_filters=8))
    n1.add_op(Conv1D(filter_size=4, num_filters=8))
    n1.add_op(Conv1D(filter_size=5, num_filters=8))
    n1.add_op(Conv1D(filter_size=6, num_filters=8))
    # n1.add_op(Conv1D(filter_size=7, num_filters=8))
    # n1.add_op(Conv1D(filter_size=8, num_filters=8))
    # n1.add_op(Conv1D(filter_size=9, num_filters=8))
    # n1.add_op(Conv1D(filter_size=10, num_filters=8))

    n2 = VariableNode('N2')
    n2.add_op(Identity())
    n2.add_op(Activation(activation='relu'))
    n2.add_op(Activation(activation='tanh'))
    n2.add_op(Activation(activation='sigmoid'))

    n3 = VariableNode('N3')
    n3.add_op(Identity())
    # n3.add_op(MaxPooling1D(pool_size=2, padding='same'))
    n3.add_op(MaxPooling1D(pool_size=3, padding='same'))
    n3.add_op(MaxPooling1D(pool_size=4, padding='same'))
    n3.add_op(MaxPooling1D(pool_size=5, padding='same'))
    n3.add_op(MaxPooling1D(pool_size=6, padding='same'))
    # n3.add_op(MaxPooling1D(pool_size=7, padding='same'))
    # n3.add_op(MaxPooling1D(pool_size=8, padding='same'))
    # n3.add_op(MaxPooling1D(pool_size=9, padding='same'))
    # n3.add_op(MaxPooling1D(pool_size=10, padding='same'))

    block = Block()
    block.add_node(n1)
    block.add_node(n2)
    block.add_node(n3)
    block.add_edge(n1, n2)
    block.add_edge(n2, n3)

    cell.add_block(block)

    cell.set_outputs()
    return cell
예제 #9
0
def create_dense_cell_type2(input_nodes):
    """MLP type 2

    Args:
        input_nodes (list(Node)): possible inputs of the current cell.

    Returns:
        Cell: a Cell instance.
    """
    cell = Cell(input_nodes)

    # first node of block
    n1 = VariableNode('N_0')
    for inpt in input_nodes:
        n1.add_op(Connect(cell.graph, inpt, n1))

    # second node of block
    mlp_op_list = list()
    mlp_op_list.append(Identity())
    mlp_op_list.append(Dense(5, tf.nn.relu))
    mlp_op_list.append(Dense(10, tf.nn.relu))
    mlp_op_list.append(Dense(20, tf.nn.relu))
    mlp_op_list.append(Dense(40, tf.nn.relu))
    mlp_op_list.append(Dense(80, tf.nn.relu))
    mlp_op_list.append(Dense(160, tf.nn.relu))
    mlp_op_list.append(Dense(320, tf.nn.relu))
    n2 = VariableNode('N_1')
    for op in mlp_op_list:
        n2.add_op(op)

    # third
    n3 = VariableNode('N_2')
    drop_ops = []
    drop_ops.extend(dropout_ops)
    for op in drop_ops:
        n3.add_op(op)

    # 1 Blocks
    block1 = Block()
    block1.add_node(n1)
    block1.add_node(n2)
    block1.add_node(n3)

    block1.add_edge(n1, n2)
    block1.add_edge(n2, n3)

    cell.add_block(block1)

    cell.set_outputs()
    return cell
예제 #10
0
def create_structure(input_shape=[(2, ), (2, ), (2, )],
                     output_shape=(1, ),
                     *args,
                     **kwargs):

    network = KerasStructure(input_shape,
                             output_shape)  #, output_op=AddByPadding)
    input_nodes = network.input_nodes

    # CELL 1
    cell1 = create_cell_1(input_nodes)
    network.add_cell(cell1)

    # CELL 2
    cell2 = Cell(input_nodes + [cell1.output])

    block1 = create_mlp_block(cell2, cell1.output)
    cell2.add_block(block1)

    cnode = VariableNode(name='SkipCo')
    nullNode = ConstantNode(op=Tensor([]), name='None')
    cnode.add_op(Connect(cell2.graph, nullNode, cnode))  # SAME
    cnode.add_op(Connect(cell2.graph, input_nodes[0], cnode))
    cnode.add_op(Connect(cell2.graph, input_nodes[1], cnode))
    cnode.add_op(Connect(cell2.graph, input_nodes[2], cnode))
    cnode.add_op(Connect(cell2.graph, cell1.output, cnode))
    cnode.add_op(Connect(cell2.graph, input_nodes, cnode))
    cnode.add_op(Connect(cell2.graph, [input_nodes[0], input_nodes[1]], cnode))
    cnode.add_op(Connect(cell2.graph, [input_nodes[1], input_nodes[2]], cnode))
    cnode.add_op(Connect(cell2.graph, [input_nodes[0], input_nodes[2]], cnode))
    block2 = Block()
    block2.add_node(cnode)
    cell2.add_block(block2)
    # set_cell_output_add(cell2)
    cell2.set_outputs()
    network.add_cell(cell2)

    # CELL 3
    cell3 = Cell([cell2.output])
    block1 = create_mlp_block(cell3, cell2.output)
    cell3.add_block(block1)
    # set_cell_output_add(cell3)
    cell3.set_outputs()
    network.add_cell(cell3)

    return network
예제 #11
0
def create_mlp_block(cell, input_node):

    # first node of block
    n1 = ConstantNode(op=Dense(1000, tf.nn.relu), name='N1')
    cell.graph.add_edge(input_node, n1)  # fixed input of current block

    # second node of block
    n2 = ConstantNode(op=Dense(1000, tf.nn.relu), name='N2')

    n3 = ConstantNode(op=Dense(1000, tf.nn.relu), name='N3')

    block = Block()
    block.add_node(n1)
    block.add_node(n2)
    block.add_node(n3)

    block.add_edge(n1, n2)
    block.add_edge(n2, n3)
    return block
예제 #12
0
def create_mlp_block(cell, input_node):

    # first node of block
    n1 = VariableNode('N1')
    create_mlp_node(n1)
    cell.graph.add_edge(input_node, n1)  # fixed input of current block

    # second node of block
    n2 = VariableNode('N2')
    create_mlp_node(n2)

    n3 = VariableNode('N3')
    create_mlp_node(n3)

    block = Block()
    block.add_node(n1)
    block.add_node(n2)
    block.add_node(n3)

    block.add_edge(n1, n2)
    block.add_edge(n2, n3)
    return block
예제 #13
0
def create_cell_1(input_nodes):
    """Create a cell with convolution.

    Args:
        input_nodes (list(Node)): a list of input_nodes for this cell.

    Returns:
        Cell: the corresponding cell.
    """
    cell = Cell(input_nodes)

    input_dose1 = input_nodes[0]
    input_rnaseq = input_nodes[1]
    input_drug1descriptor = input_nodes[2]
    input_drug1fingerprints = input_nodes[3]

    def create_block_3_nodes(input_node):

        # first node of block
        n1 = VariableNode('N1')
        create_mlp_node(n1)
        cell.graph.add_edge(input_node, n1) # fixed input of current block

        # second node of block
        n2 = VariableNode('N2')
        create_mlp_node(n2)

        # third node of the block
        n3 = VariableNode('N3')
        create_mlp_node(n3)

        block = Block()
        block.add_node(n1)
        block.add_node(n2)
        block.add_node(n3)

        block.add_edge(n1, n2)
        block.add_edge(n2, n3)
        return block, (n1, n2, n3)

    # BLOCK FOR: dose1
    n = ConstantNode(op=Identity(), name='N1', )
    cell.graph.add_edge(input_dose1, n)
    block0 = Block()
    block0.add_node(n)
    cell.add_block(block0)


    # BLOCK FOR: rnaseq
    block3, _ = create_block_3_nodes(input_rnaseq)
    cell.add_block(block3)

    # BLOCK FOR: drug1.descriptor
    block4, _ = create_block_3_nodes(input_drug1descriptor)
    cell.add_block(block4)

    # BLOCK FOR: drug1.fingerprints
    block5, _ = create_block_3_nodes(input_drug1fingerprints)
    cell.add_block(block5)

    # set_cell_output_add(cell)
    cell.set_outputs()
    return cell
def create_cell_conv(input_nodes):
    """Create a cell with convolution.

    Args:
        input_nodes (list(Node)): a list of input_nodes for this cell.

    Returns:
        Cell: the corresponding cell.
    """
    cell = Cell(input_nodes)

    n1 = ConstantNode(op=Conv1D(filter_size=20, num_filters=128), name='N1')
    cell.graph.add_edge(input_nodes[0], n1) # fixed input connection

    n2 = ConstantNode(op=Activation(activation='relu'), name='N2')

    n3 = ConstantNode(op=MaxPooling1D(pool_size=1, padding='same'), name='N3')

    n4 = ConstantNode(op=Conv1D(filter_size=10, num_filters=128),name='N4')

    n5 = ConstantNode(op=Activation(activation='relu'), name='N5')

    n6 = ConstantNode(op=MaxPooling1D(pool_size=10, padding='same'), name='N6')

    n7 = ConstantNode(op=Flatten(), name='N7')

    n8 = ConstantNode(op=Dense(units=200), name='N8')

    n9 = ConstantNode(op=Activation(activation='relu'), name='N9')

    n10 = ConstantNode(op=Dropout(rate=0.1), name='N10')

    n11 = ConstantNode(op=Dense(units=20), name='N11')

    n12 = ConstantNode(op=Activation(activation='relu'), name='N12')

    n13 = ConstantNode(op=Dropout(rate=0.1), name='N13')

    block = Block()
    block.add_node(n1)
    block.add_node(n2)
    block.add_node(n3)
    block.add_node(n4)
    block.add_node(n5)
    block.add_node(n6)
    block.add_node(n7)
    block.add_node(n8)
    block.add_node(n9)
    block.add_node(n10)
    block.add_node(n11)
    block.add_node(n12)
    block.add_node(n13)
    block.add_edge(n1, n2)
    block.add_edge(n2, n3)
    block.add_edge(n3, n4)
    block.add_edge(n4, n5)
    block.add_edge(n5, n6)
    block.add_edge(n6, n7)
    block.add_edge(n7, n8)
    block.add_edge(n8, n9)
    block.add_edge(n9, n10)
    block.add_edge(n10, n11)
    block.add_edge(n11, n12)
    block.add_edge(n12, n13)

    cell.add_block(block)

    cell.set_outputs()
    return cell