質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

Pythonで4GB以上のオブジェクトをserializeする時のエラー

0afnjosa
0afnjosa

総合スコア7

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

3回答

0評価

0クリップ

773閲覧

投稿2021/12/15 01:06

#わからないところ
現在、150枚の画像に反転や回転を加えてデータセットを作っています。
100枚の場合は成功したのですが、枚数を増やすと以下に記載するエラーが出てしまいました。
#参考にした記事
以下のリンクの記事を拝見したところ、pickle.dumpの引数であるprotocolをprotocol=4にすればよいという事はわかりました。
しかし、saveやwrite_arrayなどの関数やformat.pyなどのモジュールはこちらで定義しておらず内部のもの?なので引数の変え方がわかりませんでした。
https://qiita.com/NomuraS/items/da3fd3a1ecd76175e5f8

#実行したコード

python

from PIL import Image import os, glob import numpy as np from keras.utils import np_utils from sklearn import model_selection from sklearn.model_selection import train_test_split import pickle classes = ["leftt","rightt"] num_classes = len(classes) image_size = 320 #datesetのディレクトリ datadir='/content/drive/MyDrive/Colab Notebooks/spiral/CNN(No,6)/' #画像の読み込み X = [] Y = [] for index, classlabel in enumerate(classes): photos_dir = datadir+ classlabel files = glob.glob(photos_dir + "/*.jpg") for i, file in enumerate(files): image = Image.open(file) image = image.convert("RGB") image = image.resize((image_size, image_size)) #image.save("./test/{}{}.jpg".format(classlabel,i)) data = np.asarray(image) for angle in range(-20, 20, 5):##5 # 回転 img_r = image.rotate(angle) data = np.asarray(img_r) X.append(data) Y.append(index) # 反転 img_trans = image.transpose(Image.FLIP_LEFT_RIGHT) data = np.asarray(img_trans) X.append(data) Y.append(index) X = np.array(X) Y = np.array(Y) #2割検証データへ (X_train, X_test, y_train, y_test) = train_test_split(X, Y, test_size=0.2) #正規化 X_train = X_train.astype("float") / 255 X_test = X_test.astype("float") / 255 #教師データの型を変換 y_train = np_utils.to_categorical(y_train,num_classes) y_test = np_utils.to_categorical(y_test, num_classes) #X_train, X_test, y_train, y_test = model_selection.train_test_split(X, Y) xy = (X_train, X_test, y_train, y_test) np.save("/content/drive/MyDrive/Colab Notebooks/spiral/CNN(No,6)/dataset.npy", xy) print('X_train.shape:', X_train.shape) print('X_test.shape:', X_test.shape) print('y_train.shape:', y_train.shape) print('y_test.shape:', y_test.shape)

#出力されたエラー

python

/usr/local/lib/python3.7/dist-packages/numpy/lib/npyio.py in save(file, arr, allow_pickle, fix_imports) 527 arr = np.asanyarray(arr) 528 format.write_array(fid, arr, allow_pickle=allow_pickle, --> 529 pickle_kwargs=dict(fix_imports=fix_imports)) 530 531 /usr/local/lib/python3.7/dist-packages/numpy/lib/format.py in write_array(fp, array, version, allow_pickle, pickle_kwargs) 662 if pickle_kwargs is None: 663 pickle_kwargs = {} --> 664 pickle.dump(array, fp, protocol=3, **pickle_kwargs) 665 elif array.flags.f_contiguous and not array.flags.c_contiguous: 666 if isfileobj(fp): OverflowError: cannot serialize a bytes object larger than 4 GiB

#教えていただきたい点
・内部で定義されている(はず?の)関数の引数の値の変え方
・それ以外の解決策
以上2点のどちらかを教えていただきたいです。
よろしくお願い致します。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

0afnjosa

2021/12/15 02:10

1T2R3M4様、ご返信ありがとうございます。 ただいま、解決方法が分かりましたのでそれも含めて記載したいと思います。 次回はもう少し詳細に書くよう努力いたします。 ありがとうございました。
coco_bauer

2021/12/15 03:13

質問者が参照されているQiitaの記事に書かれている class MacOSFile(object): のプログラムを使い、「pickle.dump pickle.loadの代わりにpickle_dump pickle_loadを使う(質問に書かれているプログラムの"pickle.dump"を"pickle_dump"に変更する)」という方法は試してみましたか?
0afnjosa

2021/12/15 03:23

coco_bauer様、ご返信ありがとうございます。 当方、Windowsだったので、そちらは試していません。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。