経緯
以前のエントリで述べたとおり、Pickleで1.9GB以上のデータを保存しようとすると、エラーが出て保存できない問題があった。
この問題を、joblibを使うことでコードをほとんどいじらずに解決できることがわかったので、まとめておく。
joblibを使ったデータの圧縮保存方法
導入
いつもどおりpip
sudo pip install joblib
import
これまたいつも通りimport
import joblib
保存
dump部分は以下の通り書き換える。
pickleをjoblibに変更して、最後の引数をcompress=3に変更するだけでOK
compressは圧縮率を示し、0〜9まで指定できるようだが、とりあえずは3で充分。
pickleではエラーが出て保存できなかったデータが580MBまで圧縮されて保存できたことから、画像であれば1/4以下に圧縮できることがわかる。
(WAS) pickle.dump((self.X_train,self.X_test,self.y_train,self.y_test,self.index2name), open(self.dump_name, 'wb'), -1) (IS) joblib.dump((self.X_train,self.X_test,self.y_train,self.y_test,self.index2name), open(self.dump_name, 'wb'), compress=3)
読み込み
読み込みもpickleをjoblibに書き換えるだけでOK。
(WAS) self.X_train,self.X_test,self.y_train, self.y_test, self.index2name = pickle.load(open(self.dump_name, 'rb')) (IS) self.X_train,self.X_test,self.y_train, self.y_test, self.index2name = joblib.load(open(self.dump_name, 'rb'))