Как я могу написать R-код для керас, чтобы опробовать различные узлы, скорости обучения, отсева и т. Д., Чтобы найти оптимальную модель - PullRequest
0 голосов
/ 25 марта 2019

Я работаю с керасом и тензорным потоком в r.

Я хочу, чтобы моя модель научилась классифицировать от 0 до 1, используя множество измерений, которые я ввожу в первый слой.

Iзаставил его работать с «меньшим» количеством входов (около 500 000 входных измерений), но не может заставить его работать с большим количеством измерений (>> 1 000 000 измерений).

Я предполагаю, что ямне нужно оптимизировать мою модель.

Мой вопрос заключается в том, могу ли я написать некоторый код, чтобы keras использовал разные значения для скорости обучения, затухания, числа входных узлов, частоты выпадения один за другим и впоследствии представляет меняс какой-то матрицей считывания (например, кривые val_acc или точность моего тестового образца), чтобы я мог начать выяснять, какие параметры могут работать?

Я пытался использовать параметры, которые работаютдля моей маленькой модели и работать вверх / вниз оттуда, но безрезультатно.Кроме того, модель меньшего размера довольно чувствительна к изменениям во всех заданных параметрах, поэтому я чувствую, что нахождение хороших параметров для большой модели вручную займет целую вечность.

Моя меньшая модель выглядит следующим образом и дает мне 75%Точность в моем тесте, которая уже не так уж плоха, но я надеялся, что больше измерений может помочь мне получить более высокую точность:

model <- keras_model_sequential() 
model %>% 
  layer_dense(units = 42, input_shape = c(measurements)) %>% 
  layer_dropout(0.9) %>%
  layer_dense(units = 2, activation = 'softmax')
sgd <- optimizer_sgd(lr = 0.1, decay=0.001)
model %>% compile(
  loss = 'binary_crossentropy',
  optimizer = sgd,
  metrics = 'accuracy')
history <- model %>% fit(
  data.training, data.trainLabels, 
  epochs = 100, batch_size = 64, 
  view_metrics = FALSE,
  callbacks = callback_tensorboard("logs/run_a"),
  validation_split = 0.2)
score <- model %>% evaluate(data.test, data.testLabels, batch_size = 20)
print(score)

1 Ответ

0 голосов
/ 27 марта 2019

Я нашел ответ после проб и ошибок.

Во-первых, вы должны создать данные, в которых ваши значения хранятся в столбцах (в моем случае это столбцы "model_units", "model_dropout", "model_lr" и "model_decay").

Тогда получите все возможные комбинации:

require(utils)
parameters <- grid.expand(data$model_units, data$model_dropout, data$model_lr, data$model_decay)
parameters <- na.omit(parameters)

Затем вы можете использовать их в цикле с вашей моделью, где вы выполняете итерацию по строке.

Для этого я использовал doparallel и foreach, и модель использовала значения из одного ряда в качестве параметров. Модель была обозначена как функция ранее.

В конце цикла я сохранил выходную оценку $ acc (точность набора тестов) во входном файле в новом столбце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...