Я пытаюсь обучить сверточную нейронную сеть для классификации пород собак. Я использую тренировочный набор из более чем 20000 изображений собак. В тренировочном наборе 120 различных пород.
Если я использую небольшое количество пород, например, 15, я могу без проблем дрессировать его. Однако, когда я использую весь набор (120 пород), мой компьютер зависает (я предполагаю, что у него заканчивается память). Вот мой код:
import numpy as np
from keras.models import Sequential
from keras.models import model_from_json
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Convolution2D, MaxPooling2D
from keras.utils import np_utils
from keras.utils import to_categorical
from matplotlib import pyplot as plt
from PIL import Image
import os
np.random.seed(123)
numberOfBreeds = len(os.listdir('Dogs/Images'))
imageList= []
breedList = []
counter = 0
for breed in os.listdir('Dogs/Images'):
counter += 1
for imageFile in os.listdir('Dogs/Images/' + breed):
newImage = Image.open('Dogs/Images/' + breed + '/' + imageFile)
imageList.append(np.array(newImage.resize((200, 200))))
breedList.append(counter - 1)
imagesForTraining = np.stack(imageList, 0)
imagesForTraining = imagesForTraining.astype('float32')
imagesForTraining /= 255
breedsForTraining = to_categorical(breedList, numberOfBreeds)
model = Sequential()
model.add(Convolution2D(32, 3, 3, activation = 'relu', input_shape=(200, 200, 3)))
model.add(Convolution2D(32, 3, 3, activation = 'relu'))
model.add(MaxPooling2D(pool_size = (2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(numberOfBreeds, activation='softmax'))
model.compile(loss = 'categorical_crossentropy', optimizer = 'adam', metrics = ['accuracy'])
model.fit(imagesForTraining, breedsForTraining, batch_size = 32, epochs = 10, verbose = 1)
model_json = model.to_json()
with open('model.json', 'w') as json_file:
json_file.write(model_json)
model.save_weights('model.h5')
У меня 2 вопроса:
1- Как уменьшить использование памяти, сохранив количество пород равным 120?
2- Есть ли способ посчитать, сколько памяти будет использовать программа?