Я пытаюсь найти правильный метод применения модели keras к каждому из моих списков. Я использовал набор данных iris
и создал 4 списка, и цель состоит в том, чтобы правильно предсказать versicolor
или virginica
(я опускаю setosa
, потому что хочу модель двоичной классификации).
data(iris)
iris <- iris %>%
mutate(
splt = sample(4, size = nrow(.), replace = TRUE),
binary = case_when(
Species == "versicolor" ~ 0,
Species == "virginica" ~ 1
)
) %>%
filter(Species != "setosa") %>%
split(., .$splt)
iris_x_train <- iris %>%
map(., ~select(., Sepal.Length, Sepal.Width, Petal.Length, Petal.Width) %>%
as.matrix())
iris_y_train <- iris %>%
map(., ~select(., binary) %>%
to_categorical(2))
NN_model <- keras_model_sequential() %>%
layer_dense(units = 4, activation = 'relu', input_shape = 4) %>%
layer_dense(units = 2, activation = 'softmax')
NN_model %>%
summary
NN_model %>%
compile(
loss = 'binary_crossentropy',
optimizer_sgd(lr = 0.01, momentum = 0.9),
metrics = c('accuracy')
)
Моя проблема возникает здесь. Когда я применяю следующий код:
NN_model %>%
future_map(., ~future_map2(
.x = iris_x_train,
.y = iris_y_train,
~fit(
x = .x,
y = .y,
epochs = 5,
batch_size = 20,
validation_split = 0
)
)
)
я получаю эту ошибку:
Ошибка в py_get_item_impl (x, ключ, FALSE): TypeError: объект 'Sequential' не поддерживает индексация
Когда я применяю этот код:
NN_model %>%
future_map2(
.x = iris_x_train,
.y = iris_y_train,
~fit(
x = .x,
y = .y,
epochs = 5,
batch_size = 20,
validation_split = 0
)
)
Я получаю эту ошибку:
~ fit (x = .x, y =. y, epochs = 5, batch_size = 20, validation_split = 0) Ошибка в py_call_impl (вызываемый, точки $ args, точки $ ключевые слова): Ошибка оценки: невозможно преобразовать объект R в тип Python.
Как мне сопоставить модель keras с каждым из 4 наборов данных?
library(keras)
library(tensorflow)
library(furrr)
library(purrr)
Для первого списка работает следующее:
NN_model %>%
fit(
x = iris_x_train[[1]],
y = iris_y_train[[1]],
epochs = 50,
batch_size = 20,
validation_split = 0
)
РЕДАКТИРОВАТЬ: Кажется, я решил это.
Помещение NN_model
в функцию fit()
, похоже, работает.
future_map2(
.x = iris_x_train,
.y = iris_y_train,
~fit(NN_model,
.x,
.y,
epochs = 5,
batch_size = 20,
validation_split = 0
)
)