Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy
- from keras.datasets import cifar10
- from keras.models import Sequential
- from keras.layers import Dense, Flatten, Activation
- from keras.layers import Dropout
- from keras.layers.convolutional import Conv2D, MaxPooling2D
- from keras.utils import np_utils
- from keras.optimizers import SGD
- # Задаем seed для повторяемости результатов
- numpy.random.seed(42)
- # Загружаем данные
- (X_train, y_train), (X_test, y_test) = cifar10.load_data()
- X_train = X_train[0:1000]
- y_train = y_train[0:1000]
- # Размер мини-выборки
- batch_size = 32
- # Количество классов изображений
- nb_classes = 10
- # Количество эпох для обучения
- nb_epoch = 5
- # Размер изображений
- img_rows, img_cols = 32, 32
- # Нормализуем данные
- X_train = X_train.astype('float32')
- X_test = X_test.astype('float32')
- X_train /= 255
- X_test /= 255
- # Преобразуем метки в категории
- Y_train = np_utils.to_categorical(y_train, nb_classes)
- Y_test = np_utils.to_categorical(y_test, nb_classes)
- # Создаем последовательную модель
- model = Sequential()
- # Первый сверточный слой
- model.add(Conv2D(32, (3, 3), padding='same',
- input_shape=(32, 32, 3), activation='relu'))
- # Второй сверточный слой
- model.add(Conv2D(32, (3, 3), activation='relu', padding='same'))
- # Первый слой подвыборки
- model.add(MaxPooling2D(pool_size=(2, 2)))
- # Слой регуляризации Dropout
- # model.add(Dropout(0.25))
- # Третий сверточный слой
- model.add(Conv2D(64, (3, 3), padding='same', activation='relu'))
- # Четвертый сверточный слой
- model.add(Conv2D(64, (3, 3), activation='relu'))
- # Второй слой подвыборки
- model.add(MaxPooling2D(pool_size=(2, 2)))
- # Слой регуляризации Dropout
- # model.add(Dropout(0.25))
- # Слой преобразования данных из 2D представления в плоское
- model.add(Flatten())
- # Полносвязный слой для классификации
- model.add(Dense(512, activation='relu'))
- # Слой регуляризации Dropout
- # model.add(Dropout(0.5))
- # Выходной полносвязный слой
- model.add(Dense(nb_classes, activation='softmax'))
- # Задаем параметры оптимизации
- sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
- model.compile(loss='categorical_crossentropy',
- optimizer=sgd,
- metrics=['accuracy'])
- # Обучаем модель
- model.fit(X_train, Y_train,
- batch_size=batch_size,
- epochs=nb_epoch,
- validation_split=0.1,
- shuffle=True,
- verbose=2)
- # Оцениваем качество обучения модели на тестовых данных
- scores = model.evaluate(X_test, Y_test, verbose=0)
- print("Точность работы на тестовых данных: %.2f%%" % (scores[1]*100))
- 1 - 0.0
- 2 - 0.0
- 3 - 0.0
- 4 - 0.0
- 5 - 100.0
- 6 - 0.0
- 7 - 0.0
- 8 - 0.0
- 9 - 0.0
- 10 - 0.0
- ['5 - deer']
- 1 - 4.0
- 2 - 33.0
- 3 - 2.0
- 4 - 32.0
- 5 - 87.0
- 6 - 44.0
- 7 - 33.0
- 8 - 33.0
- 9 - 22.0
- 10- 22.0
- ['5 - deer']
Add Comment
Please, Sign In to add comment