У меня есть код ниже, который использует набор данных iris
для обучения ряда моделей машинного обучения:
Я хочу сделать прогнозы для модели keras
. Приведенный ниже код работает, и я могу получить прогнозы для всех моделей (кроме модели keras
):
Когда я раскомментирую часть кода else if
- keras
, я получаю «ошибки» или модель производит.
[1] "skipping\n"
[1] "skipping\n"
[1] "skipping\n"
[1] "skipping\n"
[1] "skipping\n"
[1] "skipping\n"
[1] "skipping\n"
[1] "skipping\n"
[1] "skipping\n"
[1] "skipping\n"
[1] "skipping\n"
[1] "skipping\n"
Мой вопрос: где я ошибаюсь в части предсказания keras
? Я хочу изменить эту часть кода так, чтобы она давала мне предсказанные классы:
# else if(attr(x, "class")[1] == "keras_training_history"){
# # Keras Single Layer Neural Network
# tibble(
# modelname = attr(x, "class")[1],
# prediction = predict_classes(object = x, x = as.matrix(dat))
# )
# }
РЕДАКТИРОВАТЬ 1:
Моя попытка отладки:
dat <- iris %>%
filter(Species != "setosa") %>%
mutate(Species = +(Species == "virginica"))
mod <- keras_model_sequential() %>%
layer_dense(units = 2, activation = 'relu', input_shape = 2) %>%
layer_dense(units = 2, activation = 'softmax')
mod
mod %>% compile(
loss = 'binary_crossentropy',
optimizer_sgd(lr = 0.01, momentum = 0.9),
metrics = c('accuracy')
)
mod
fit(mod,
x = as.matrix(dat[, 2:3]),
y = to_categorical(dat$Species, 2),
epochs = 5,
batch_size = 5,
validation_split = 0
)
predict_classes(mod, as.matrix(dat[, 2:3]))
Дает мне:
[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[44] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[87] 0 0 0 0 0 0 0 0 0 0 0 0 0 0
РЕДАКТИРОВАТЬ:
Когда я запускаю код в РЕДАКТИРОВАТЬ 1., а затем передать:
attr(mod, "class")
Я получаю следующий вывод:
[1] "keras.engine.sequential.Sequential"
[2] "keras.engine.training.Model"
[3] "keras.engine.network.Network"
[4] "keras.engine.base_layer.Layer"
[5] "tensorflow.python.module.module.Module"
[6] "tensorflow.python.training.tracking.tracking.AutoTrackable"
[7] "tensorflow.python.training.tracking.base.Trackable"
[8] "python.builtin.object"
Однако, когда я запускаю код models_list
, а затем запускаю следующее:
attr(models_list[[1]]$models$Model_Keras, "class")
я получаю:
[1] "keras_training_history"
Так что я передаю другой функция к predict
. Поэтому я начинаю думать, что код при построении модели хранит данные неправильно.