kurtararak değildir. Bellek kullanımını zamanla izledim ve birkaç gigabayt (~ 6 Gb) ile başladığını ve maks. Donanımın alabileceği 128 Gb. Çok sayıda metin belgesinin sınıflandırılması için rastgele ormanlar deniyordum. Basitlik için - neler olduğunu anlamaya - naif Bayes'e geri döndüm. Ben kullanıyorumscikit en GridSearch ve genel olarak Python benim GridSearches birkaç saat sonra başarısız tutmak bazı garip gözlemler yapmış ve ben başlangıçta neden çözemedim hafızayı
versiyonları Bu konuda GitHub'dan scikit-konu listesinde bazı ilgili tartışma bulundu 0.15.2
- vardır Konu: https://github.com/scikit-learn/scikit-learn/issues/565 ve https://github.com/scikit-learn/scikit-learn/pull/770
Ve zaten başarılı bir şekilde adreslenmiş gibi geliyor!
Yani, kullanıyorum alakalı kod Sadece meraktangrid_search = GridSearchCV(pipeline, parameters, n_jobs=1, # cv=5, scoring='roc_auc', verbose=2, pre_dispatch='2*n_jobs', refit=False) # tried both True and False grid_search.fit(X_train, y_train) print('Best score: {0}'.format(grid_search.best_score_)) print('Best parameters set:')
, daha sonra ızgara döngü
for p1 in parameterset1: for p2 in parameterset2: ... pipeline = Pipeline([ ('vec', CountVectorizer( binary=True, tokenizer=params_dict[i][0][0], max_df=params_dict[i][0][1], max_features=params_dict[i][0][2], stop_words=params_dict[i][0][3], ngram_range=params_dict[i][0][4],)), ('tfidf', TfidfTransformer( norm=params_dict[i][0][5], use_idf=params_dict[i][0][6], sublinear_tf=params_dict[i][0][7],)), ('clf', MultinomialNB())]) scores = cross_validation.cross_val_score( estimator=pipeline, X=X_train, y=y_train, cv=5, scoring='roc_auc', n_jobs=1) params_dict[i][1] = '%s,%0.4f,%0.4f' % (params_dict[i][1], scores.mean(), scores.std()) sys.stdout.write(params_dict[i][1] + '\n')
için iç içe aracılığıyla hızlı & kirli bir şekilde arama yapmaya karar verdi olduğunu Çok uzak çok iyi. Izgara arama, sonuçları çalışır ve stdout'a yazar. Ancak, bir süre sonra tekrar 128 Gb bellek kapağını aşıyor. Scikit'teki GridSearch ile aynı sorun. bazı denemeler sonra, sonunda döngü içinde
gc.collect() len(gc.get_objects()) # particularly this part!
sorunu çözer ve bellek kullanımı ~ 10 saat kullanım süresi boyunca 6.5 Gb de sürekli kalır öğrendim.
Sonunda, yukarıdaki düzeltmeyle çalışmaya başladım, ancak bu sorunun neden olabileceği ve ipuçlarınızla ilgili fikirlerinizi duymak beni çok heyecanlandırıyor &! 0.15.2 yılında
Bu çok garip. Lütfen rastgele oluşturulmuş verileri (veya hatta sabit verileri kullanarak, örneğin np.ones (shape = (n_samples, n_features), dtype = np.float) ') kullanarak sorunları yeniden üreten bir betik dahil, github üzerine yeni bir sayı yazabilir misiniz? – ogrisel
Elbette, sorun değil. Bu soruna neden olan bazı kodları https://github.com/rasbt/bugreport/tree/master/scikit-learn/gridsearch_memory adresine yükledim ve burada bir sorun açtı: https://github.com/scikit-learn/scikit-/3973/sorunları öğrenir. Teşekkürler! – Sebastian
Geçmişte, sklearn (genellikle rastgele bir orman ile) bazı şeylerin çok fazla bellek tükettiğini de buldum. Soruna bağlı olarak, etrafta çalışmak zorunda kaldım. Bir yorum, tfidf/document problemleri için GradientBoostingClassifier'ın RandomForest'den daha iyi sonuçlar verebilmesidir.Ayrıca, tfidf transformatörün seyrek bir matris getireceğinden eminim (todo: versiyonunuz için emin olun) ... böylece sklearn'inizi güncellemeniz gerekir çünkü 0.15.2'deki RandomForest seyrek girişleri desteklemez. – user1269942