изменить форму x для моделей CNN keras Набор данных EMNIST - PullRequest
0 голосов
/ 15 июня 2019

Я пытался построить модель, используя керасы в обучении модели предиктора слова из r: 6 букв на наборе данных emnist-byclass (62 category = (az); (AZ); (0-9)).

Я пытался использовать CNN, используя conv_d2 & max_poolimg, но мои данные не подходят.Форма ввода = 784, и она не работает.

Как я могу изменить свой поезд x, чтобы он подходил?Прочитайте о функции изменения формы, но не удалось.

Попытка использовать другую модель только с использованием плотных слоев и выпадений, но точность была низкой.

data <- list()
data <- EMNIST_read() # read emnist-myclass data

train_x <- data$x_train
train_y <- data$y_train
test_x <- data$x_test
test_y <- data$y_test

# dim(train_x)
[1] 697932    784
# > dim(train_y)
[1] 697932     62

#converting the target variable to once hot encoded vectors using keras inbuilt function
train_y <- to_categorical(train_y,62)
test_y <- to_categorical(test_y,62)

#defining a keras sequential model
model <- keras_model_sequential()


model %>%
  layer_conv_2d(filters = 32, kernel_size = c(3,3), activation = 'relu') %>%
  layer_max_pooling_2d(pool_size = c(2,2)) %>%
  layer_conv_2d(filters = 64, kernel_size = c(3,3), activation = 'relu') %>%
  layer_max_pooling_2d(pool_size = c(2,2)) %>%
  layer_conv_2d(filters = 64, kernel_size = c(3,3), activation = 'relu') %>%
  layer_max_pooling_2d(pool_size = c(2,2)) %>%
  layer_conv_2d(filters = 64, kernel_size = c(3,3), activation = 'relu') %>%
  layer_max_pooling_2d(pool_size = c(2,2)) %>%
  layer_conv_2d(filters = 64, kernel_size = c(3,3), activation = 'relu') %>%
  layer_flatten() %>%
  layer_dropout(rate = 0.4) %>%
  layer_dense(units = 128, activation = 'relu') %>%
  layer_dense(units = 62, activation = 'softmax')

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

#fitting the model on the training dataset
model %>% fit(train_x, train_y, epochs = 10, batch_size = 256, validation_split = 0.1, 
              callbacks = callback_early_stopping(monitor = "val_acc", patience = 6, mode = "min"))

получила эту ошибку:

 Error in py_call_impl(callable, dots$args, dots$keywords) : 
  ValueError: Input 0 of layer conv2d is incompatible with the layer: expected ndim=4, found ndim=2. Full shape received: [None, 784]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...