#わからないところ
現在、150枚の画像に反転や回転を加えてデータセットを作っています。
100枚の場合は成功したのですが、枚数を増やすと以下に記載するエラーが出てしまいました。
#参考にした記事
以下のリンクの記事を拝見したところ、pickle.dumpの引数であるprotocolをprotocol=4にすればよいという事はわかりました。
しかし、saveやwrite_arrayなどの関数やformat.pyなどのモジュールはこちらで定義しておらず内部のもの?なので引数の変え方がわかりませんでした。
https://qiita.com/NomuraS/items/da3fd3a1ecd76175e5f8
#実行したコード
python
1from PIL import Image 2import os, glob 3import numpy as np 4from keras.utils import np_utils 5from sklearn import model_selection 6from sklearn.model_selection import train_test_split 7import pickle 8 9 10classes = ["leftt","rightt"] 11num_classes = len(classes) 12image_size = 320 13 14 15#datesetのディレクトリ 16datadir='/content/drive/MyDrive/Colab Notebooks/spiral/CNN(No,6)/' 17 18#画像の読み込み 19X = [] 20Y = [] 21 22 23for index, classlabel in enumerate(classes): 24 photos_dir = datadir+ classlabel 25 files = glob.glob(photos_dir + "/*.jpg") 26 for i, file in enumerate(files): 27 28 image = Image.open(file) 29 image = image.convert("RGB") 30 image = image.resize((image_size, image_size)) 31 #image.save("./test/{}{}.jpg".format(classlabel,i)) 32 data = np.asarray(image) 33 34 for angle in range(-20, 20, 5):##5 35 # 回転 36 img_r = image.rotate(angle) 37 data = np.asarray(img_r) 38 X.append(data) 39 Y.append(index) 40 41 # 反転 42 img_trans = image.transpose(Image.FLIP_LEFT_RIGHT) 43 data = np.asarray(img_trans) 44 X.append(data) 45 Y.append(index) 46 47 48 49X = np.array(X) 50Y = np.array(Y) 51 52 53 54#2割検証データへ 55(X_train, X_test, y_train, y_test) = train_test_split(X, Y, test_size=0.2) 56 57#正規化 58X_train = X_train.astype("float") / 255 59X_test = X_test.astype("float") / 255 60 61#教師データの型を変換 62y_train = np_utils.to_categorical(y_train,num_classes) 63y_test = np_utils.to_categorical(y_test, num_classes) 64 65#X_train, X_test, y_train, y_test = model_selection.train_test_split(X, Y) 66xy = (X_train, X_test, y_train, y_test) 67np.save("/content/drive/MyDrive/Colab Notebooks/spiral/CNN(No,6)/dataset.npy", xy) 68 69print('X_train.shape:', X_train.shape) 70print('X_test.shape:', X_test.shape) 71print('y_train.shape:', y_train.shape) 72print('y_test.shape:', y_test.shape)
#出力されたエラー
python
1/usr/local/lib/python3.7/dist-packages/numpy/lib/npyio.py in save(file, arr, allow_pickle, fix_imports) 2 527 arr = np.asanyarray(arr) 3 528 format.write_array(fid, arr, allow_pickle=allow_pickle, 4--> 529 pickle_kwargs=dict(fix_imports=fix_imports)) 5 530 6 531 7 8/usr/local/lib/python3.7/dist-packages/numpy/lib/format.py in write_array(fp, array, version, allow_pickle, pickle_kwargs) 9 662 if pickle_kwargs is None: 10 663 pickle_kwargs = {} 11--> 664 pickle.dump(array, fp, protocol=3, **pickle_kwargs) 12 665 elif array.flags.f_contiguous and not array.flags.c_contiguous: 13 666 if isfileobj(fp): 14 15OverflowError: cannot serialize a bytes object larger than 4 GiB
#教えていただきたい点
・内部で定義されている(はず?の)関数の引数の値の変え方
・それ以外の解決策
以上2点のどちらかを教えていただきたいです。
よろしくお願い致します。
回答3件
あなたの回答
tips
プレビュー