При использовании Jupyter (ядро R) и библиотеки keras. Когда ячейка запускается, нет вывода. Без вывода невозможно узнать, как работает код.

Вопрос или проблема

Код обнаружения объектов цифр с использованием keras действительно работает в Jupyter с ядром R.

Но потребовалось три попытки, чтобы понять, что проблема не в Jupyter, не в ядре R и не в коде. Проблема заключалась в том, что ошибочно предполагалось, что есть “проблема”, потому что Jupyter не выводил результаты эпох.

Я закрыл блокнот дважды и вернулся к нулям, потому что казалось слишком вероятным, что я допустил какую-то ошибку.

Затем я обнаружил, что отсутствующий вывод эпох отображается в терминале PowerShell – том самом терминале, который я использовал для запуска Jupyter Notebooks. Оказалось, что с IDL на самом деле ничего не было не так. И вывод предсказаний действительно отображается в Jupyter после некоторого ожидания.

Поэтому вопрос такой: Как отобразить вывод в ячейках Jupyter, используя keras в Jupyter?

library("keras")

mnist = dataset_mnist()
mnist$train$x <- mnist$train$x/255
mnist$test$x <- mnist$test$x/255

model <- keras_model_sequential() %>% 
  layer_flatten(input_shape = c(28, 28)) %>% 
  layer_dense(units = 128, activation = "relu") %>% 
  layer_dropout(0.2) %>% 
  layer_dense(10, activation = "softmax")

model %>% 
  compile(
    loss = "sparse_categorical_crossentropy",
    optimizer = "adam",
    metrics = "accuracy"
  )

model %>% 
  fit(
    x = mnist$train$x, y = mnist$train$y,
    epochs = 5,
    validation_split = 0.3,
    verbose = 2
  )

predictions <- predict(model, mnist$test$x)
head(predictions, 2)

model %>% 
  evaluate(mnist$test$x, mnist$test$y, verbose = 0)

И вывод из терминала PowerShell;

c:\program files\python39\lib\site-packages\notebook\services\kernels\kernelmanager.py:176> cb=[IOLoop.add_future.<locals>.<lambda>() at c:\program files\python39\lib\site-packages\tornado\ioloop.py:695]> выполняется.
[I 17:46:07.080 NotebookApp] Ядро запущено: 758be753-4e56-41e9-b628-e3e66136f7ee, имя: ir36
[W 17:46:10.900 NotebookApp] Превышено время ожидания ответа kernel_info от 60ec78bf-773a-40df-b19a-b44dae383872
[E 17:46:10.901 NotebookApp] Ошибка открытия потока: HTTP 404: Не найдено (Ядро не существует: 60ec78bf-773a-40df-b19a-b44dae383872)
[I 17:46:14.815 NotebookApp] Адаптация от версии протокола 5.0 (ядро 758be753-4e56-41e9-b628-e3e66136f7ee) до 5.3 (клиент).
[I 17:48:06.974 NotebookApp] Сохранение файла по адресу /R_TensorFlow/Untitled.ipynb
[W 17:48:07.484 NotebookApp] Доверяю блокноту /R_TensorFlow/Untitled.ipynb
[I 17:48:07.846 NotebookApp] Сохранение файла по адресу /R_TensorFlow/Untitled.ipynb
[I 17:48:08.771 NotebookApp] Начало буферизации для 758be753-4e56-41e9-b628-e3e66136f7ee:b4e1466d1f7448c08db2851842d80ba9
[I 17:48:09.598 NotebookApp] Адаптация от версии протокола 5.0 (ядро 758be753-4e56-41e9-b628-e3e66136f7ee) до 5.3 (клиент).
2021-11-08 17:49:45.432220: I tensorflow/core/platform/cpu_feature_guard.cc:151] Этот бинарный файл TensorFlow оптимизирован с помощью oneAPI Deep Neural Network Library (oneDNN) для использования следующих инструкций процессора в критически важных операциях: AVX AVX2
Чтобы включить их в других операциях, пересоберите TensorFlow с соответствующими флагами компилятора.
2021-11-08 17:49:52.419047: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1525] Создано устройство /job:localhost/replica:0/task:0/device:GPU:0 с 2818 MB памяти: -> устройство: 0, имя: NVIDIA GeForce GTX 750 Ti, pci bus id: 0000:01:00.0, вычислительная способность: 5.0
Эпоха 1/5
[I 17:50:09.435 NotebookApp] Сохранение файла по адресу /R_TensorFlow/Untitled.ipynb
1313/1313 - 15s - потери: 0.3407 - точность: 0.9005 - val_loss: 0.1809 - val_accuracy: 0.9464 - 15s/эпоха - 11ms/шаг
Эпоха 2/5
1313/1313 - 8s - потери: 0.1649 - точность: 0.9518 - val_loss: 0.1364 - val_accuracy: 0.9602 - 8s/эпоха - 6ms/шаг
Эпоха 3/5
1313/1313 - 8s - потери: 0.1218 - точность: 0.9635 - val_loss: 0.1091 - val_accuracy: 0.9676 - 8s/эпоха - 6ms/шаг
Эпоха 4/5
1313/1313 - 8s - потери: 0.1001 - точность: 0.9691 - val_loss: 0.1036 - val_accuracy: 0.9691 - 8s/эпоха - 6ms/шаг
Эпоха 5/5
1313/1313 - 8s - потери: 0.0814 - точность: 0.9750 - val_loss: 0.0986 - val_accuracy: 0.9723 - 8s/эпоха - 6ms/шаг
[I 17:52:09.440 NotebookApp] Сохранение файла по адресу /R_TensorFlow/Untitled.ipynb
[I 17:54:09.416 NotebookApp] Сохранение файла по адресу /R_TensorFlow/Untitled.ipynb
Эпоха 1/5
1313/1313 - 8s - потери: 0.0717 - точность: 0.9778 - val_loss: 0.0941 - val_accuracy: 0.9728 - 8s/эпоха - 6ms/шаг
Эпоха 2/5
1313/1313 - 8s - потери: 0.0638 - точность: 0.9791 - val_loss: 0.0911 - val_accuracy: 0.9738 - 8s/эпоха - 6ms/шаг
Эпоха 3/5
1313/1313 - 8s - потери: 0.0551 - точность: 0.9818 - val_loss: 0.0917 - val_accuracy: 0.9737 - 8s/эпоха - 6ms/шаг
Эпоха 4/5
1313/1313 - 8s - потери: 0.0496 - точность: 0.9836 - val_loss: 0.0926 - val_accuracy: 0.9744 - 8s/эпоха - 6ms/шаг
Эпоха 5/5
1313/1313 - 8s - потери: 0.0463 - точность: 0.9849 - val_loss: 0.0896 - val_accuracy: 0.9754 - 8s/эпоха - 6ms/шаг
[I 17:56:09.425 NotebookApp] Сохранение файла по адресу /R_TensorFlow/Untitled.ipynb
[E 18:40:48.511 NotebookApp] Запрос информации о ядре завершился неудачно, предполагая текущие {}

Похоже, что это в настоящее время нерешенная проблема: https://github.com/IRkernel/IRkernel/issues/416. В keras результат fit() – это история обучения, поэтому вы можете присвоить его переменной (history <- model %>% fit (..)) и исследовать или построить график (plot(history)) после обучения, как в примере здесь. Если вам нужен интерактивный вывод, вы можете запустить свой код в терминале с помощью Rscript или R.

Ответ или решение

Вопрос, касающийся отсутствия вывода в Jupyter при использовании библиотеки Keras с R-ядром, поднимает важные аспекты взаимодействия между большой экосистемой пакетов и инструментов, предназначенных для машинного обучения и обработки данных. Это может вызывать путаницу у разработчиков, сталкивающихся с ситуацией, когда результаты обучения не отображаются в ячейках Jupyter, но при этом вывод может появляться в терминале, из которого запущен Jupyter.

Объяснение проблемы

Когда вы запускаете обучение модели с использованием функции fit() в Keras, она по умолчанию не возвращает никаких выводов в ячейку Jupyter, если установлен параметр verbose = 0. Стандартным значением является verbose = 1, что означает, что на каждой итерации будет отображаться прогресс. Однако, в вашем случае, есть вероятность, что вывод направляется не в Jupyter, а в терминал, что стало источником недоразумения.

Как отобразить выходные данные в ячейках Jupyter

Чтобы удостовериться, что выходные данные тренировок будут отображаться в ячейках Jupyter, выполните следующие шаги:

  1. Параметр Verbose: Убедитесь, что в вашей функции fit() параметр verbose установлен на 1 или 2. Например:

    model %>% fit(
       x = mnist$train$x, 
       y = mnist$train$y,
       epochs = 5,
       validation_split = 0.3,
       verbose = 2
    )
    • verbose = 0 — без вывода.
    • verbose = 1 — вывод на каждой итерации, по одной строке.
    • verbose = 2 — вывод для каждого эпо́ха в отдельной строке.
  2. Сохранение Истории Обучения: Рекомендуется сохранять историю обучения в переменной, чтобы вы могли обращаться к ней впоследствии:

    history <- model %>% fit(...)

    Это позволит вам анализировать и визуализировать результаты, используя функцию plot(history):

    plot(history)
  3. Работа с выводом в терминале: Если вам требуется интерактивный вывод во время выполнения, попробуйте запускать код через Rscript или в терминальной сессии R. Это решение может обеспечить более богатый вывод, чем может предоставить Jupyter.

Заключение

Таким образом, возможность отображения результатов обучения модели Keras в Jupyter зависит как от настроек параметра вывода, так и от среды, в которой выполняется код. Если вы столкнетесь с ситуацией, когда вывод не виден в ячейках, первое, что следует проверить, – это параметры функции fit(), а затем рассмотреть альтернативные способы получения вывода. Надеюсь, эти советы помогут вам избежать путаницы и эффективно продвигаться в ваших проектах, связанных с глубоким обучением.

Оцените материал
Добавить комментарий

Капча загружается...