#
        with open('%s/fold_%s_model.json' % (modeldir, k_count),
                  'r') as json_file:
            loaded_model_json = json_file.read()
        loaded_model = models.model_from_json(
            loaded_model_json)  # keras.models.model_from_yaml(yaml_string)
        loaded_model.load_weights(filepath=filepth)
        # loaded_model.compile(optimizer='rmsprop',  # SGD,adam,rmsprop
        #                      loss='mse',
        #                      metrics=['mae',pearson_r])  # mae平均绝对误差(mean absolute error) accuracy)

        #
        # Test model
        #
        # pearson_coeff, std, mae = test_report_reg(model, x_test, ddg_test)
        pearson_coeff, std, mae = test_report_reg(loaded_model, x_test,
                                                  ddg_test)
        print('\n----------Predict:'
              '\npearson_coeff: %s, std: %s, mae: %s' %
              (pearson_coeff, std, mae))
        score_dict['pearson_coeff'].append(pearson_coeff)
        score_dict['std'].append(std)
        score_dict['mae'].append(mae)

        train_score_dict['pearson_coeff'].append(history_dict['pearson_r'][-1])
        train_score_dict['std'].append(history_dict['rmse'][-1])
        train_score_dict['mae'].append(history_dict['mean_absolute_error'][-1])

        es_train_score_dict['pearson_coeff'].append(
            history_dict['pearson_r'][-11])
        es_train_score_dict['std'].append(history_dict['rmse'][-11])
        es_train_score_dict['mae'].append(
Esempio n. 2
0
    #     validation_mae = np.amax(result.history['val_mean_absolute_error'])
    #     print('Best validation mae of epoch:', validation_mae)
    #     return {'loss': validation_mae, 'status': STATUS_OK}


if __name__ == '__main__':
    import sys
    neighbor_obj, CUDA_rate = sys.argv[1:]
    ## config TF
    #os.environ['CUDA_VISIBLE_DEVICES'] = '0'
    from mCNN.queueGPU import queueGPU
    queueGPU()
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

    if CUDA_rate != 'full':
        config = tf.ConfigProto()
        if float(CUDA_rate) < 0.1:
            config.gpu_options.allow_growth = True
        else:
            config.gpu_options.per_process_gpu_memory_fraction = float(
                CUDA_rate)
        set_session(tf.Session(config=config))

    x_train, y_train, ddg_train, x_test, y_test, ddg_test, class_weights_dict, obj, kneighbor = data(
        neighbor_obj)
    model = Conv2DRegressorIn1(x_train, y_train, ddg_train, x_test, y_test,
                               ddg_test, class_weights_dict, obj, kneighbor)
    pearson_coeff, std = test_report_reg(model, x_test, ddg_test)
    print('\n--reg_pearson_coeff_%s: %s'
          '\n--reg_std_%s: %s' % (kneighbor, pearson_coeff, kneighbor, std))
Esempio n. 3
0
def Conv2DRegressorIn1(x_train, y_train, ddg_train, x_test, y_test, ddg_test,
                       class_weights_dict, obj):
    K.clear_session()
    summary = True
    verbose = 0
    # setHyperParams------------------------------------------------------------------------------------------------
    batch_size = 64
    epochs = {{choice([50, 100, 150, 200, 250])}}

    lr = {{loguniform(np.log(1e-4), np.log(1e-2))}}

    optimizer = {{choice(['adam', 'sgd', 'rmsprop'])}}

    activator = {{choice(['elu', 'relu', 'tanh'])}}

    basic_conv2D_layers = {{choice([1, 2])}}
    basic_conv2D_filter_num = {{choice([16, 32])}}

    loop_dilation2D_layers = {{choice([2, 4, 6])}}
    loop_dilation2D_filter_num = {{choice([16, 32, 64])}}  #used in the loop
    loop_dilation2D_dropout_rate = {{uniform(0.001, 0.35)}}
    dilation_lower = 2
    dilation_upper = 16

    reduce_layers = 5  # conv 3 times: 120 => 60 => 30 => 15
    reduce_conv2D_filter_num = {{choice([8, 16,
                                         32])}}  #used for reduce dimention
    reduce_conv2D_dropout_rate = {{uniform(0.001, 0.25)}}
    residual_stride = 2

    dense1_num = {{choice([64, 128, 256])}}
    dense2_num = {{choice([32, 64])}}

    drop_num = {{uniform(0.0001, 0.3)}}

    kernel_size = (3, 3)
    pool_size = (2, 2)
    initializer = 'random_uniform'
    padding_style = 'same'
    loss_type = 'mse'
    metrics = ('mae', )

    my_callbacks = [
        callbacks.ReduceLROnPlateau(
            monitor='val_loss',
            factor=0.8,
            patience=10,
        )
    ]

    if lr > 0:
        if optimizer == 'adam':
            chosed_optimizer = optimizers.Adam(lr=lr)
        elif optimizer == 'sgd':
            chosed_optimizer = optimizers.SGD(lr=lr)
        elif optimizer == 'rmsprop':
            chosed_optimizer = optimizers.RMSprop(lr=lr)

    # build --------------------------------------------------------------------------------------------------------
    ## basic Conv2D
    input_layer = Input(shape=x_train.shape[1:])
    y = layers.Conv2D(basic_conv2D_filter_num,
                      kernel_size,
                      padding=padding_style,
                      kernel_initializer=initializer,
                      activation=activator)(input_layer)
    y = layers.BatchNormalization(axis=-1)(y)
    if basic_conv2D_layers == 2:
        y = layers.Conv2D(basic_conv2D_filter_num,
                          kernel_size,
                          padding=padding_style,
                          kernel_initializer=initializer,
                          activation=activator)(y)
        y = layers.BatchNormalization(axis=-1)(y)

    ## loop with Conv2D with dilation (padding='same')
    for _ in range(loop_dilation2D_layers):
        y = layers.Conv2D(loop_dilation2D_filter_num,
                          kernel_size,
                          padding=padding_style,
                          dilation_rate=dilation_lower,
                          kernel_initializer=initializer,
                          activation=activator)(y)
        y = layers.BatchNormalization(axis=-1)(y)
        y = layers.Dropout(loop_dilation2D_dropout_rate)(y)
        dilation_lower *= 2
        if dilation_lower > dilation_upper:
            dilation_lower = 2

    ## Conv2D with dilation (padding='valaid') and residual block to reduce dimention.
    for _ in range(reduce_layers):
        y = layers.Conv2D(reduce_conv2D_filter_num,
                          kernel_size,
                          padding=padding_style,
                          kernel_initializer=initializer,
                          activation=activator)(y)
        y = layers.BatchNormalization(axis=-1)(y)
        y = layers.Dropout(reduce_conv2D_dropout_rate)(y)
        y = layers.MaxPooling2D(pool_size, padding=padding_style)(y)
        residual = layers.Conv2D(reduce_conv2D_filter_num,
                                 1,
                                 strides=residual_stride,
                                 padding='same')(input_layer)
        y = layers.add([y, residual])
        residual_stride *= 2

    ## flat & dense
    y = layers.Flatten()(y)
    y = layers.Dense(dense1_num, activation=activator)(y)
    y = layers.BatchNormalization(axis=-1)(y)
    y = layers.Dropout(drop_num)(y)
    y = layers.Dense(dense2_num, activation=activator)(y)
    y = layers.BatchNormalization(axis=-1)(y)
    y = layers.Dropout(drop_num)(y)

    output_layer = layers.Dense(1)(y)

    model = models.Model(inputs=input_layer, outputs=output_layer)

    if summary:
        model.summary()

    model.compile(
        optimizer=chosed_optimizer,
        loss=loss_type,
        metrics=list(metrics)  # accuracy
    )

    K.set_session(tf.Session(graph=model.output.graph))
    init = K.tf.global_variables_initializer()
    K.get_session().run(init)

    result = model.fit(
        x=x_train,
        y=ddg_train,
        batch_size=batch_size,
        epochs=epochs,
        verbose=verbose,
        callbacks=my_callbacks,
        validation_data=(x_test, ddg_test),
        shuffle=True,
    )
    # print('\n----------History:\n%s'%result.history)

    if obj == 'test_report_reg':
        pearson_coeff, std = test_report_reg(model, x_test, ddg_test)
        print('\n----------Predict:\npearson_coeff: %s, std: %s' %
              (pearson_coeff, std))
        objective = pearson_coeff * 2 + std
        return {'loss': -objective, 'status': STATUS_OK}

    elif obj == 'val_mae':
        validation_mae = np.amax(result.history['val_mean_absolute_error'])
        print('Best validation mae of epoch:', validation_mae)
        return {'loss': validation_mae, 'status': STATUS_OK}