У меня есть проект по науке о данных с использованием h2o, где я настраиваю цикл визуализации тепловых карт для объяснимости и измерения переобучения. Я хочу иметь возможность вызывать тепловую карту через функцию многократного использования, чтобы я мог вернуть тепловую карту для отображения отдельно или экспортировать серию из них в PDF. Когда я возвращаю фигуру из функции, она зависает. Я отладил, проверив время до возврата и первый оператор после возврата, и это занимает около 200 секунд.
Я потратил кучу времени, пытаясь отладить время, но несмотря ни на что Я сделал... он не возвращался в течение 200 секунд. Я неизбежно обнаружил, что при возврате функции с фреймом данных h2o происходит какая-то сборка мусора. Мне удалось добавить в функцию строку h2o.remove(shocked_hf), чтобы подтвердить это. Этот оператор теперь занял 200 секунд, и функция вернулась нормально. Вот фрагмент кода, показывающий, как был создан H2OFrame:
Код: Выделить всё
# create dataframe with simulated data to test model
shocked_df = pd.DataFrame(shocked_rows)
# this h2o frame is only 625 rows by 107 columns
shocked_hf = h2o.H2OFrame(shocked_df)
# this next statement takes around 200 seconds
h2o.remove(shocked_hf)
Что здесь происходит? Я хотел бы вызвать эту функцию несколько раз, поэтому нет смысла очищать эту переменную. Даже если вы его очистите, должен быть более быстрый способ. Я видел некоторые мысли об использовании ручной сборки мусора, однако думаю, что это только создаст другие проблемы. Я думаю, что мне, возможно, придется включить цикл внутри функции в качестве временного решения, но это просто неправильно.
Подробнее здесь:
https://stackoverflow.com/questions/793 ... h2o-remove