AlexNet

2012’de ImageNet ILSVRC (Büyük Ölçekli Görsel Tanıma Yarışması)’de sunuldu. Alex Krizhevsky, Ilya Sutskever ve Geoffrey Hinton tarafından geliştirilmiştir. 5 convolutional ve 3 tane fully-connected katmandan oluşur. Aktivasyon olarak ReLU kullanır. İki paralel ağ şeklinde çalışır. AlexNet’in önceki CNN türlerinden farkı;

  • ReLU, önceki modellerde kullanılan tanh fonksiyonundan daha hızlı olduğundan eğitim süresini azaltmak için kullanılmıştır. Ayrıca ReLU etkinliğini sınırlamak için Local Response Normalization kullanılmıştır.
  • Ezberlemeyi önlemek için seyreltme teknikleri uygulanmıştır.
  • Eğitim setine “augmentation” işlemi uygulanmıştır. RGB kanallarının yoğunluklarını değiştirmek için PCA uygulamışlardır.

Mimarisi

TensorFlow ile AlexNet

model = Sequential([
	# (227-11) / 4 + 1 = 55 -> 55x55x96
	Conv2D(96, kernel_size=(11, 11), strides=4, padding="valid", activation="relu", input_shape=input_shape),
	# (55-3) / 2 + 1 = 27
	MaxPooling2D(pool_size=(3, 3), strides=(2, 2), padding="valid", data_format=None)

	# (27 + 2 * 2 - 5) / 1 + 1 = 27
	Conv2D(256, kernel_size=(5, 5), strides=1, padding="same", activation="relu", kernel_initializer="he_normal")
	# (27 - 3) / 2 + 1 = 13
	MaxPooling2D(pool_size=(3, 3), strides=(2, 2), padding="valid", data_format=None)

	# (13 + 2 * 1 - 3) / 1 + 1 = 13
	Conv2D(384, kernel_size=(3, 3), strides=1, padding="same", activation="relu", kernel_initializer="he_normal")
	# (13 + 2 * 1 - 3) / 1 + 1 = 13
	Conv2D(384, kernel_size=(3, 3), strides=1, padding="same", activation="relu", kernel_initializer="he_normal")
	# (13 + 2 * 1 - 3) / 1 + 1 = 13
	Conv2D(256, kernel_size=(3, 3), strides=1, padding="same", activation="relu", kernel_initializer="he_normal")

	# (13 - 3) / 2 + 1 = 6
	MaxPooling2D(pool_size=(3, 3), strides=(2, 2), padding="valid", data_format=None)

	# 4096
	Flatten(),

	Dense(4096, activation="relu")
	Dense(4096, activation="relu")
	Dense(1000, activation="relu")
	Dense(num_classes, activation="softmax")
])