Я использую сверточную нейронную сеть (CNN) для обнаружения изображения 30 различных видов фруктов.Набор данных, который у меня есть в настоящее время, состоит из папок "train" и "test", каждая из которых имеет 30 подкаталогов для 30 различных классов.
Папка "train" содержит в общей сложности 671 jpg файлов, а папка "test"содержит в общей сложности 300 файлов jpg.
Код Python, который я написал для обнаружения изображений, выглядит следующим образом:
from keras.preprocessing.image import ImageDataGenerator
import numpy as np
import matplotlib.pyplot as plt
from keras.utils import to_categorical
from keras.models import Sequential
from keras.layers import Dense, Conv2D, Flatten, Dropout
from keras.layers.convolutional import MaxPooling2D
from keras import backend as K
from sklearn.metrics import accuracy_score, precision_score, recall_score
# Read in images from 'train' folder-
train_datagen = ImageDataGenerator(
rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True
)
train_generator = train_datagen.flow_from_directory(
directory=r"./train/", target_size=(420, 420), color_mode="rgb",
batch_size=30, class_mode="categorical", shuffle=True
)
# O/P-
# Found 671 images belonging to 30 classes.
# Read in images from 'test' folder-
test_datagen = ImageDataGenerator(
rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True
)
valid_generator = test_datagen.flow_from_directory(
directory=r"./test/", target_size=(420, 420), color_mode="rgb", batch_size=30,
class_mode="categorical", shuffle=True
)
# O/P-
# Found 300 images belonging to 30 classes.
# Dimensions of our image(s)-
img_width, img_height = 420, 420
if K.image_data_format() == 'channels_first':
input_shape = (3, img_width, img_height)
else:
input_shape = (img_width, img_height, 3)
print("\ninput_shape = {0}\n\n".format(input_shape))
# input_shape = (420, 420, 3)
# Build the CNN-
model = Sequential()
# model.add(Conv2D(32, (5, 5), input_shape = (32, 32, 3), activation = 'relu'))
model.add(Conv2D(32, (3, 3), input_shape = input_shape, activation = 'relu'))
# model.add(Conv2D(32, (3, 3), activation = 'relu'))
# model.add(Dense(40, activation = 'relu'))
model.add(MaxPooling2D(pool_size = (2, 2)))
model.add(Dropout(0.2))
# model.add(Conv2D(64, (3, 3), activation = 'relu'))
model.add(Conv2D(64, (3, 3), activation = 'relu'))
model.add(MaxPooling2D(pool_size = (2, 2)))
model.add(Dropout(0.2))
model.add(Flatten())
# model.add(Dense(512, activation = 'relu'))
model.add(Dense(128, activation = 'relu'))
model.add(Dense(30, activation = 'softmax'))
# Compiling the model-
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics = ['accuracy'])
STEP_SIZE_TRAIN=train_generator.n//train_generator.batch_size
STEP_SIZE_VALID=valid_generator.n//valid_generator.batch_size
model.fit_generator(generator=train_generator, steps_per_epoch=STEP_SIZE_TRAIN, epochs=5)
Когда я пытаюсь выполнить этот код, я получаю следующее сообщение-
Использование бэкэнда TensorFlow.Найдено 671 изображение, относящееся к 30 классам.Найдено 300 изображений, относящихся к 30 классам.
input_shape = (420, 420, 3)
Epoch 1/5 2019-02-12 14: 48: 18.088495: I tenorflow /core / platform / cpu_feature_guard.cc: 141] Ваш ЦП поддерживает инструкции, которые этот двоичный файл TensorFlow не был скомпилирован для использования: AVX2 FMA 2019-02-12 14: 48: 23.270184: W tenorflow / core / framework / allocator.cc: 122]Выделение 670940160 превышает 10% системной памяти.2019-02-12 14: 48: 31.747262: W tenorflow / core / framework / allocator.cc: 122] Выделение 670940160 превышает 10% системной памяти.
После этого моя система зависает иЯ должен перезагрузить систему.Это случилось уже 4 раза.В моей системе установлен Intel Core i5 @ 2,2 ГГц с 8 ГБ оперативной памяти.
Что не так?