CIFAR-10 veri seti, 10 sınıftan ve 3 kanalda 32 x 32 pikselden oluşan 60.000 renkli görüntü içerir. Her sınıf 6,000 resim içermektedir. Eğitim seti 50.000 görüntü içerirken, test setleri 10.000 görüntü içerir. Bu görüntüler https://www.cs.toronto.edu/~kriz/cifar.html adresinden çekilmektedir. Rastgele çekilen 10 sınıf aşağıda gösterilmiştir:
Amaç daha önce görülmemiş görüntüleri tanımak ve bunları 10 sınıftan birine atamaktır. İlk olarak veri seti, kütüphaneler ve model için gerekli parametreler ve sabitler tanımlanır:
from keras.datasets import cifar10 from keras.utils import np_utils from keras.models import Sequential from keras.layers.core import Dense, Dropout, Activation, Flatten from keras.layers.convolutional import Conv2D, MaxPooling2D from keras.optimizers import SGD, Adam, RMSprop import matplotlib.pyplot as plt num_channels = 3 img_rows = 32 img_cols = 32 batch_size = 128 num_epochs = 20 num_classes = 10 validation_split = 0.2 optim = RMSprop() # VERİ SETİ YÜKLENİR: (X_train, y_train), (X_test, y_test) = cifar10.load_data() print('X_train shape:', X_train.shape) print(X_train.shape[0], 'train samples') print(X_test.shape[0], 'test samples') # LABEL'LARI KATEGORİZE ETMEK İÇİN ONE-HOT ENCODING YAPILIR VE GÖRÜNTÜLER NORMALİZE EDİLİR: Y_train = np_utils.to_categorical(y_train, num_classes) Y_test = np_utils.to_categorical(y_test, num_classes) X_train = X_train.astype('float32') X_test = X_test.astype('float32') X_train /= 255 X_test /= 255 # 10 SINIFLI CIFAR10 VERİ SETİNDEKİ GÖRÜNTÜLERİ TANIYAN BİR CNN MODEL OLUŞTURULUR. # OLUŞTURULAN AĞ HER BİRİ 3x3 BOYUTUNDA OLAN 32 KONVOLÜSYONEL FİLTREYİ ÖĞRENİR: model = Sequential() model.add(Conv2D(32, (3, 3), padding='same', input_shape=(img_rows, img_cols, num_channels))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(512)) model.add(Activation('relu')) model.add(Dropout(0.5)) model.add(Dense(num_classes)) model.add(Activation('softmax')) model.summary() # AĞ TANIMI YAPILDIKTAN SONRA MODEL EĞİTİLİR.BURADA VERİ;TEST,TRAIN VE VALIDATION OLARAK AYRILIR: model.compile(loss='categorical_crossentropy', optimizer=optim, metrics=['accuracy']) history = model.fit(X_train, Y_train, batch_size=batch_size, epochs=num_epochs, validation_split=validation_split, verbose=1) score = model.evaluate(X_test, Y_test, batch_size=batch_size, verbose=VERBOSE) print("\nTest score:", score[0]) print('Test accuracy:', score[1]) # MODEL KAYDEDİLİR;LOSS VE ACCURASY DEĞERLERİ ÇİZDİRİLİR: model_json = model.to_json() open('cifar10_model.json', 'w').write(model_json) model.save_weights('cifar10_weights.h5', overwrite=True) print(history.history.keys()) plt.plot(history.history['val_acc']) plt.title('model accuracy') plt.ylabel('accuracy') plt.xlabel('epoch') plt.legend(['train', 'test'], loc='upper left') plt.show() plt.plot(history.history['loss']) plt.plot(history.history['val_loss']) plt.title('model loss') plt.ylabel('loss') plt.xlabel('epoch') plt.legend(['train', 'test'], loc='upper left') plt.show()