При создании общей сети keras принимает imput_shape из c (28, 28, 1), но когда я запускаю его для обучения, он сообщает мне, что он получил (6000, 28, 28). Я понимаю, что keras вводит размер данных сам, но почему он сбрасывает один, а затем тормозит?
Строка проблемы (я думаю):
model %>%
layer_conv_2d(filters = 32, kernel_size = c(3, 3), padding = 'same', input_shape = c(28, 28, 1)) %>%
Ошибка:
Error in py_call_impl(callable, dots$args, dots$keywords) :
ValueError: Error when checking input: expected conv2d_5_input to have 4 dimensions, but got array with shape (60000, 28, 28)
Код:
library(keras)
install_keras(tensorflow = "gpu")
mnist <- dataset_mnist()
x_train <- mnist$train$x
y_train <- mnist$train$y
x_test <- mnist$test$x
y_test <- mnist$test$y
# # reshape
#x_train <- array_reshape(x_train, c(nrow(x_train), 784))
#x_test <- array_reshape(x_test, c(nrow(x_test), 784))
# # rescale
# x_train <- x_train / 255
# x_test <- x_test / 255
y_train <- to_categorical(y_train, 10)
y_test <- to_categorical(y_test, 10)
model <- keras_model_sequential()
model %>%
layer_conv_2d(filters = 32, kernel_size = c(3, 3), padding = 'same', input_shape = c(28, 28, 1)) %>%
layer_activation('relu') %>%
# layer_max_pooling_2d(pool_size=c(2, 2), strides=c(2, 2)) %>%
layer_conv_2d(filters = 16, kernel_size = c(2, 2), dilation_rate = 1, activation = 'softplus', padding = 'same') %>%
layer_max_pooling_2d(pool_size=c(2, 2)) %>%
layer_flatten() %>%
layer_dense(1000, activation = 'relu') %>%
layer_dropout(0.5) %>%
layer_dense(10, activation = 'softmax')
# Stock test model functions
# layer_dense(units = 256, activation = 'relu', input_shape = c(784)) %>%
# layer_dropout(rate = 0.4) %>%
# layer_dense(units = 128, activation = 'relu') %>%
# layer_dropout(rate = 0.3) %>%
# layer_dense(units = 10, activation = 'softmax') %>%
summary(model)
model %>% compile(
loss = 'categorical_crossentropy',
optimizer = optimizer_rmsprop(lr = 0.0001, decay = 1e-6),
metrics = c('accuracy')
)
history <- model %>% fit(
x_train, y_train,
epochs = 10
)
plot(history)
model %>% evaluate(x_test, y_test)
model %>% predict_classes(x_test)