R CNN Keras отображает матрицу неточности и модель точности - PullRequest
0 голосов
/ 07 мая 2020

Я работаю над сверточной нейронной сетью, и я хотел бы отобразить матрицу путаницы и точность модели, но безуспешно. Вот как я это делаю, может быть, вы мне поможете. У меня ошибка вывода: test_array имеет разную длину. Что-то у меня не получается. Любая помощь будет оценена. Спасибо

#Extract pictures
trainData <- extract_feature("train/", width, height)
testData <- extract_feature("test1/", width, height, labelsExist = F)
# Fix structure for 2d CNN
train_array <- t(trainData$X)
dim(train_array) <- c(50, 50, nrow(trainData$X), 1)
# Reorder dimensions
train_array <- aperm(train_array, c(3,1,2,4))

test_array <- t(testData)
dim(test_array) <- c(50, 50, nrow(testData), 1)
# Reorder dimensions
test_array <- aperm(test_array, c(3,1,2,4))
model <- keras_model_sequential() 
model %>% 
      layer_conv_2d(kernel_size = c(3, 3), filter = 32,
                    activation = "relu", padding = "same",
                    input_shape = c(50, 50, 1),
                    data_format = "channels_last") %>%
      layer_conv_2d(kernel_size = c(3, 3), filter = 32,
                    activation = "relu", padding = "valid") %>%
      layer_max_pooling_2d(pool_size = 2) %>%
      layer_dropout(rate = 0.25) %>%

      layer_conv_2d(kernel_size = c(3, 3), filter = 64, strides = 2,
                    activation = "relu", padding = "same") %>%
      layer_conv_2d(kernel_size = c(3, 3), filter = 64,
                    activation = "relu", padding = "valid") %>%
      layer_max_pooling_2d(pool_size = 2) %>%
      layer_dropout(rate = 0.25) %>%

      layer_flatten() %>%
      layer_dense(units = 50, activation = "relu") %>% 
      layer_dropout(rate = 0.25) %>%
      layer_dense(units = 1, activation = "sigmoid")

summary(model)

model %>% compile(
      loss = 'binary_crossentropy',
      optimizer = "adam",
      metrics = c('accuracy')
)

history <- model %>% fit(
      x = train_array, y = as.numeric(trainData$y), 
      epochs = 30, batch_size = 100, 
      validation_split = 0.2
)

plot(history)

# Compute probabilities and predictions on test set
predictions <-  predict_classes(model, test_array)
probabilities <- predict_proba(model, test_array)

#Display Confusion Matrix
predict_probs <- predictions <-  predict(model, test_array)
predicted_labels <- max.col(t(predict_probs)) - 1
table(test_array[, 1], predicted_labels)

#Display accuracy
sum(diag(table(test_array[, 1], predicted_labels)))/2500   
...