Advertisement
Stan_

cifar10_conv

May 12th, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.39 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2.  
  3. import numpy
  4. from keras.datasets import cifar10
  5. from keras.models import Sequential
  6. from keras.layers import Dense, Flatten, Dropout
  7. from keras.layers.convolutional import Conv2D, MaxPooling2D
  8. from keras.utils import np_utils
  9. from keras.optimizers import SGD
  10.  
  11. # Задаем seed для повторяемости результатов
  12. numpy.random.seed(42)
  13.  
  14. # Загружаем данные
  15. (X_train, y_train), (X_test, y_test) = cifar10.load_data()
  16. # Размер мини-выборки
  17. batch_size = 32
  18. # Количество классов изображений
  19. nb_classes = 10
  20. # Количество эпох для обучения
  21. nb_epoch = 1
  22.  
  23. # Нормализуем данные
  24. X_train = X_train.astype('float32')
  25. X_test = X_test.astype('float32')
  26. X_train /= 255
  27. X_test /= 255
  28.  
  29. # Преобразуем метки в категории
  30. Y_train = np_utils.to_categorical(y_train, nb_classes)
  31. Y_test = np_utils.to_categorical(y_test, nb_classes)
  32.  
  33. # Создаем последовательную модель
  34. model = Sequential()
  35. # Формирование вектора, отвечающего за размерность входных данных:
  36. # либо (кол-во каналов, ширина, высота), либо (ширина, высота, кол-во каналов)
  37. # (в зависимости от значения параметра "image_data_format" в файле keras.json)
  38. shape_vector = X_train.shape[1:]
  39. # Первый сверточный слой
  40. model.add(Conv2D(32, (3, 3), padding='same',
  41.                         input_shape=shape_vector, activation='relu'))
  42. # Второй сверточный слой
  43. model.add(Conv2D(32, (3, 3), activation='relu', padding='same'))
  44. # Первый слой подвыборки
  45. model.add(MaxPooling2D(pool_size=(2, 2)))
  46. # Слой регуляризации Dropout
  47. model.add(Dropout(0.25))
  48.  
  49. # Третий сверточный слой
  50. model.add(Conv2D(64, (3, 3), padding='same', activation='relu'))
  51. # Четвертый сверточный слой
  52. model.add(Conv2D(64, (3, 3), activation='relu'))
  53. # Второй слой подвыборки
  54. model.add(MaxPooling2D(pool_size=(2, 2)))
  55. # Слой регуляризации Dropout
  56. model.add(Dropout(0.25))
  57. # Слой преобразования данных из 2D представления в плоское
  58. model.add(Flatten())
  59. # Полносвязный слой для классификации
  60. model.add(Dense(512, activation='relu'))
  61. # Слой регуляризации Dropout
  62. model.add(Dropout(0.5))
  63. # Выходной полносвязный слой
  64. model.add(Dense(nb_classes, activation='softmax'))
  65.  
  66. # Задаем параметры оптимизации
  67. sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
  68. model.compile(loss='categorical_crossentropy',
  69.               optimizer=sgd,
  70.               metrics=['accuracy'])
  71. # Обучаем модель
  72. model.fit(X_train, Y_train,
  73.               batch_size=batch_size,
  74.               epochs=nb_epoch,
  75.               validation_split=0.1,
  76.               shuffle=True,
  77.               verbose=1)
  78.  
  79. # Оцениваем качество обучения модели на тестовых данных
  80. scores = model.evaluate(X_test, Y_test, verbose=0)
  81. print("Точность работы на тестовых данных: %.2f%%" % (scores[1]*100))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement