Ejemplo n.º 1
0
def model(input_shape):
    """
    Function creating the model's graph in Keras.
    
    Argument:
    input_shape -- shape of the model's input data (using Keras conventions)

    Returns:
    model -- Keras model instance
    """
    X_input = Input(shape=input_shape)

    conv_1 = Conv3D(filters=32,
                    kernel_size=(1, 1, 1),
                    padding="same",
                    strides=(1, 1, 1),
                    activation="elu")(X_input)
    conv_2 = Conv3D(filters=64,
                    kernel_size=(1, 1, 1),
                    padding="same",
                    strides=(1, 1, 1),
                    activation="elu")(conv_1)
    conv_3 = Conv3D(filters=128,
                    kernel_size=(1, 1, 1),
                    padding="same",
                    strides=(1, 1, 1),
                    activation="elu")(conv_2)
    shape = conv_3.get_shape().as_list()

    pool_2_flat = Reshape([shape[1], shape[2] * shape[3] * shape[4]])(conv_3)
    fc = Dense(1024, activation="elu")(pool_2_flat)
    fc_drop = Dropout(dropout_prob)(fc)

    lstm_in = Reshape([10, 1024])(fc_drop)
    # lstm_1 = LSTM(units=1024, return_sequences=True, unit_forget_bias=True, dropout=dropout_prob)(lstm_in)
    # rnn_output = LSTM(units=1024, return_sequences=False, unit_forget_bias=True)(lstm_1)
    lstm_1 = GRU(units=1024, return_sequences=True,
                 dropout=dropout_prob)(lstm_in)
    rnn_output = GRU(units=1024, return_sequences=False)(lstm_1)

    shape_rnn_out = rnn_output.get_shape().as_list()
    fc_out = Dense(shape_rnn_out[1], activation="elu")(rnn_output)
    fc_drop = Dropout(dropout_prob)(fc_out)
    y_ = Dense(n_labels)(fc_drop)
    y_posi = Softmax()(y_)

    model = Model(inputs=X_input, outputs=y_posi)
    return model