勉強のために画像認識の実装をgoogle colaboratoryで行っています。
画像50枚とかだと学習を行ってくれるのですが、
画像が3000枚だとメモリ不足でクラッシュしてしまい学習できません。
(できれば、解像度やサイズを変更したくありません。)
そこで、ミニバッチ学習ならメモリ消費を少なくできるんじゃないかと思い実装しようとしています。
質問:
バッチサイズNのサブセットに分割して、modelクラスのfitで一つずつモデルを作成したらどうやって一つにまとめてモデルを保存するのでしょうか?
なにかライブラリがあるのでしょうか?
(ミニバッチ学習はバッチごとの損失、勾配を求めてその平均で重みを更新するという認識ででいます。)
お手数をおかけしますが、よろしくお願い致します。
以下コードになります。
Python
1import keras 2from keras.utils import np_utils 3from keras.models import Sequential 4from keras.layers.convolutional import Conv2D, MaxPooling2D 5from keras.layers.core import Dense, Dropout, Activation, Flatten 6import numpy as np 7from sklearn.model_selection import train_test_split 8from PIL import Image 9import glob 10import matplotlib.pyplot as plt 11 12#画像が入った入力データ 13X = X.astype('float32') 14X = X / 255.0 15 16#正解ラベルの形式を変換 17Y = np_utils.to_categorical(Y, 4) 18 19#学習用データとテストデータ 20X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2,train_size=0.8)
モデルの構築
Python
1model = Sequential() 2 3model.add(Conv2D(32, (3, 3), padding='same',input_shape=X_train.shape[1:])) 4model.add(Activation('relu')) 5model.add(Conv2D(32, (3, 3))) 6model.add(Activation('relu')) 7model.add(MaxPooling2D(pool_size=(2, 2))) 8model.add(Dropout(0.25)) 9 10model.add(Conv2D(64, (3, 3), padding='same')) 11model.add(Activation('relu')) 12model.add(Conv2D(64, (3, 3))) 13model.add(Activation('relu')) 14model.add(MaxPooling2D(pool_size=(2, 2))) 15model.add(Dropout(0.25)) 16 17model.add(Flatten()) 18model.add(Dense(512)) 19model.add(Activation('relu')) 20model.add(Dropout(0.5)) 21model.add(Dense(4)) 22model.add(Activation('softmax')) 23 24# コンパイル 25model.compile(loss='categorical_crossentropy',optimizer='SGD',metrics=['accuracy']) 26 27#訓練 28history = model.fit(X_train, Y_train, epochs=100)
これだとメモリ不足に陥るため、ミニバッチ学習で小分けに学習していきたいです。
(ちなみに画像サイズは700×500です。)
回答2件
あなたの回答
tips
プレビュー