2015-07-06 3 views
9

Окружающая среда:Как кэшировать в IPython Notebook?

  • Python 3
  • IPython 3,2

Каждый раз, когда я выключаю ноутбук IPython и повторно открыть его, я должен повторно запустить все клетки. Но некоторые ячейки связаны с интенсивным вычислением.

В отличие от этого, knitr в R сохраняет результаты в каталоге кэша по умолчанию, поэтому только новый код и новые параметры будут вызывать вычисления.

Я посмотрел на ipycache, но, похоже, кэширует ячейку вместо ноутбука. Есть ли копия кэша knitr в IPython?

+1

Я не знаю, есть ли такая возможность в IPython, но вы могли бы просто кэшировать дорогие вычисления на диск с, например, [joblib.Memory] (https://pythonhosted.org/joblib/memory.html). – rth

ответ

0

Можете ли вы привести пример того, что вы пытаетесь сделать? Когда я запускаю что-то в ноутбуке IPython, что дорого, я почти всегда пишу его на диск после слова. Например, если мои данные список объектов JSON, я пишу его на диск в виде строки разделены JSON отформатированные строки:

with open('path_to_file.json', 'a') as file: 
    for item in data: 
     line = json.dumps(item) 
     file.write(line + '\n') 

Вы можете прочитать обратно в данных таким же образом:

data = [] 
with open('path_to_file.json', 'a') as file: 
    for line in file: 
     data_item = json.loads(line) 
     data.append(data_item) 

Я думаю, что это хорошая практика вообще, потому что она предоставляет вам резервную копию. Вы можете также использовать маринованные овощи для того же самого. Если ваши данные действительно большие, вы можете фактически записать gzip.open в zip-файл.

EDIT

Для сохранения scikit узнать модель для использования joblib.pickle диска.

from sklearn.cluster import KMeans 

km = KMeans(n_clusters=num_clusters) 
km.fit(some_data) 


from sklearn.externals import joblib 
# dump to pickle 
joblib.dump(km, 'model.pkl') 

# and reload from pickle 
km = joblib.load('model.pkl') 
+0

Я попытался применить модели машинного обучения к наборам данных. Например, я импортирую некоторые данные (несколько сотен МБ) с помощью панд, а затем тренирую и тестирую две модели с помощью scikit-learn. Я хочу «кэшировать» все промежуточные преобразованные DataFrame, а также обучаемые модели. Поэтому я могу «проводить» эксперименты на промежуточном DataFrame без чтения с земли. – Zelong

+0

@zelong ok, вы должны использовать 'joblib' для рассортирования ваших моделей' sklearn'. См. Мое редактирование выше. И для написания ваших данных на диске просто используйте 'dataframe.to_csv ('yourfile.csv)' – brandomr

+0

Большое спасибо. Травление модели scikit-learn выглядит неплохо. Я пробовал довольно много споров с DataFrames и, похоже, требовал сохранить кучу промежуточного DataFrame в csv-файлах. Но похоже, что IPython не предоставляет аналог кеша «RData», который помещает все в один куб. – Zelong

1

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

В вашем Jupyter ноутбук:

a = 1 
%store a 

Теперь, скажем, вы закрываете ноутбук и ядро ​​перезапускается. У вас больше нет доступа к локальным переменным. Тем не менее, вы можете загрузить с помощью опции -r.

%store -r a 
print a # Should print 1 
0

Фактически, функциональность, которую вы просите, уже существует, нет необходимости повторно выполнять ее вручную, выполняя свои свалки.

Вы можете использовать использовать спецификатор% магазин или, возможно, лучше волшебный кэш %% (расширение) для хранения результатов этих прерывисто клеток, поэтому они не должны быть пересчитаны (см https://github.com/rossant/ipycache)

It является следующим:

%load_ext ipycache 

Затем в ячейке, например,:

%%cache mycache.pkl var1 var2 
var1 = 1 
var2 = 2 

При выполнении этой клеточной первый раз, код выполняется, и переменные var1 и var2 сохраняются в mycache.pkl в текущем каталоге вместе с выходами. Богатые выходы дисплея сохраняются только , если вы используете версию IPython для разработки. Когда вы снова выполняете эту ячейку , код пропускается, переменные загружаются из файла и вводятся в пространство имен, а выходы восстанавливаются в ноутбуке.

Смежные вопросы