在cifar-10上Keras中实现AlexNet的准确性较差



我尝试实现AlexNet,如本视频中所述。如果我实现错了,请原谅,这是我在keras中实现它的代码。

编辑:cifar-10图像数据生成器

cifar_generator = ImageDataGenerator()
cifar_data = cifar_generator.flow_from_directory('datasets/cifar-10/train', 
batch_size=32, 
target_size=input_size, 
class_mode='categorical')

Keras:中描述的模型

model = Sequential()
model.add(Convolution2D(filters=96, kernel_size=(11, 11), input_shape=(227, 227, 3), strides=4, activation='relu'))
model.add(MaxPool2D(pool_size=(3 ,3), strides=2))
model.add(Convolution2D(filters=256, kernel_size=(5, 5), strides=1, padding='same', activation='relu'))
model.add(MaxPool2D(pool_size=(3 ,3), strides=2))
model.add(Convolution2D(filters=384, kernel_size=(3, 3), strides=1, padding='same', activation='relu'))
model.add(Convolution2D(filters=384, kernel_size=(3, 3), strides=1, padding='same', activation='relu'))
model.add(Convolution2D(filters=256, kernel_size=(3, 3), strides=1, padding='same', activation='relu'))
model.add(MaxPool2D(pool_size=(3 ,3), strides=2))
model.add(Flatten())
model.add(Dense(units=4096))
model.add(Dense(units=4096))
model.add(Dense(units=10, activation='softmax'))
model.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics = ['accuracy'])

我使用ImageDataGenerator在cifar-10数据集上训练这个网络。然而,我只能得到大约.20的准确度。我想不出我做错了什么。

对于初学者,您还需要将relu激活扩展到您的两个中间密集层;就像现在一样:

model.add(Dense(units=4096))
model.add(Dense(units=4096))

即在线性激活(默认(的情况下,可以表明它们每个都相当于一个简单的线性单元(吴恩达在他的第一门关于DL专业化的课程中用了一整节课来解释这一点(。将其更改为:

model.add(Dense(units=4096, activation='relu'))
model.add(Dense(units=4096, activation='relu'))

检查SO线程为什么在反向传播神经网络中必须使用非线性激活函数?,以及AlexNet在这里和这里的实现来证实这一点。

最新更新