Создание модели с несколькими входами и несколькими выходами: предоставление AttributeError: объект dict не имеет атрибута shape - PullRequest
0 голосов
/ 14 февраля 2020

Я новичок ie для глубокого изучения и пытаюсь построить модель с несколькими входами и несколькими выходами, используя функциональный API-интерфейс keras в R, и получаю эту ошибку.

Мой код

build_model <- function() {
    ### motif module

    # motif module input
    motif_module_input <- layer_input(shape = ncol(x_train_motif_module), name = 'motif_module_input')

    motif_module <- motif_module_input %>%
        layer_dense(units = 16, activation = 'relu') %>%
        layer_dropout(rate = 0.5) %>%
        layer_dense(units = 16, activation = 'relu') %>%
        layer_dropout(rate = 0.5) %>%
        layer_dense(units = 16, activation = 'relu') %>%
        layer_dropout(rate = 0.5) %>%
        layer_dense(units = 4, activation = 'relu')

    motif_module_output <- motif_module %>% 
        layer_dense(units = 2, activation = 'softmax', name = 'motif_module_output')

    #SVM_input <- layer_input(shape = c(2), name = 'SVM_input')

    ### DNA module
    # DNA module input
    DNA_module_input <- layer_input(shape = c(user_img_rows, user_img_cols), name = 'DNA_module_input')

    DNA_module <- DNA_module_input %>%
        layer_conv_1d(filters = 128, kernel_size = 7, activation = 'relu', input_shape = c(user_img_rows, user_img_cols)) %>%
        layer_max_pooling_1d(pool_size = 4, strides = 2) %>%
        layer_dropout(rate = 0.3) %>%

        layer_conv_1d(filters = 128, kernel_size = 5, activation = 'relu', input_shape = c(user_img_rows, user_img_cols)) %>%
        layer_max_pooling_1d(pool_size = 8, strides = 4) %>%
        layer_dropout(rate = 0.3) %>%

        layer_flatten() %>%
        layer_dense(units  = 128, activation  = 'relu') 

    DNA_module_output <- DNA_module %>% 
        layer_dense(units = 2, activation = 'softmax', name = 'DNA_module_output')


    main_output <- layer_concatenate(c(motif_module, DNA_module)) %>%  
        layer_dense(units = 16, activation = 'relu') %>%
        layer_dense(units = 4, activation = 'relu') %>% 
        layer_dense(units = 2, activation = 'softmax', name = 'main_output')


    model <- keras_model(
        inputs = c(motif_module_input, DNA_module_input), 
        outputs = c(motif_module_output, DNA_module_output, main_output)
    )

    model %>% compile(
        loss = list(motif_module_output = 'binary_crossentropy', DNA_module_output = 'binary_crossentropy', main_output = 'binary_crossentropy'),
        loss_weights = list(motif_module_output = 0.5, DNA_module_output = 0.5, main_output = 1),
        optimizer = optimizer_adam(lr = 0.001, beta_1 = 0.9, beta_2 = 0.999, epsilon = 1e-08, decay = 1e-06),
        metrics   = c('accuracy')
    )

    model

}

model <- build_model()
# training the model
# Display training progress by printing a single dot for each completed epoch.
print_dot_callback <- callback_lambda(
    on_epoch_end = function(epoch, logs) {
        if (epoch %% 80 == 0) cat("\n")
        cat(".")
    }
) 

# The patience parameter is the amount of epochs to check for improvement.
early_stop <- callback_early_stopping(monitor = "val_loss", patience = 5, restore_best_weights = FALSE)

# model <- build_model()
history <- model %>% fit(
    x = list(motif_module_input = x_train_motif_module, DNA_module_input = x_train_DNA_module),
    y = list(motif_module_output = y_train_DNA_module, DNA_module_output = y_train_DNA_module, main_output = y_train_DNA_module),
    epochs = user_epochs,
    validation_split = user_validation_split,
    batch_size = user_batch_size, 
    use_multiprocessing = TRUE,
    verbose = 2,
    callbacks = list(early_stop, print_dot_callback)
)

Это приводит к ошибке py_call_impl (callable, dots $ args, dots $ Keywords): AttributeError: у объекта 'dict' нет атрибута 'shape'

Может ли помогите мне понять ошибку. Спасибо.

1 Ответ

0 голосов
/ 16 февраля 2020

Эта ошибка возникает из-за формата входных данных. Одна из моих входных данных - это фрейм данных, и при преобразовании в тип матрицы он работал нормально.

Надеюсь, это поможет другим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...