我尝试按照this视频中的说明实施AlexNet。如果执行错误,请原谅我,这是我在keras中执行该代码。
编辑:cifar-10 ImageDataGenerator
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数据集上训练了这个网络。但是,我只能获得大约0.20的精度。我不知道自己在做什么错。
答案 0 :(得分:1)
对于初学者来说,您还需要将relu
激活扩展到两个中间密集层;就像现在一样:
model.add(Dense(units=4096))
model.add(Dense(units=4096))
即使用线性激活(默认),可以证明它们每个都等效于一个简单的线性单位(Andrew Ng在他关于DL专业化的第一门课程中专门介绍a whole lecture对此进行了解释)。将它们更改为:
model.add(Dense(units=4096, activation='relu'))
model.add(Dense(units=4096, activation='relu'))
检查SO线程Why must a nonlinear activation function be used in a backpropagation neural network?以及AlexNet实现here和here来确认这一点。