在 cifar-10 上在 Keras 中实现 AlexNet 的准确性很差
Posted
技术标签:
【中文标题】在 cifar-10 上在 Keras 中实现 AlexNet 的准确性很差【英文标题】:Implementation of AlexNet in Keras on cifar-10 gives poor accuracy 【发布时间】:2018-12-26 11:22:19 【问题描述】:我尝试按照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 的准确度。我无法弄清楚我做错了什么。
【问题讨论】:
能否将ImageDataGenerator
也添加到您的帖子中?
将rescale=1/255.
参数传递给ImageDataGenerator
,然后报告在进行@desertnaut 建议的更改后获得的准确性。
Cifar 图像为 32x32,您使用的初始内核为 11x11。你正在丢失很多信息。将 32x32 调整为 227x227 不是一个好主意。
@dgumo 即使实施了这两项更改,情况也没有改变,我想将图像调整到如此大的值是罪魁祸首。
@NevinBaiju 我指出了你方法中的问题——那些不是解决方案:-)
【参考方案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 以确认这一点。
【讨论】:
我应用了它,但准确性没有提高。我认为将 32*32 图像调整为 227*227 可能是该模型表现不佳的原因。 @NevinBaiju 现在应该清楚了,建议的修改是绝对必要的(尝试在修改其他内容时将其省略),但当然还不够,因为可能您的实施有其他问题。因此,可以说它至少值得一票(即“有帮助,但不能完全自行解决问题”)......以上是关于在 cifar-10 上在 Keras 中实现 AlexNet 的准确性很差的主要内容,如果未能解决你的问题,请参考以下文章
在 jsf<h:datatable 上在丰富的 fcaes 4 中实现 jquery
Keras CIFAR-10图像分类 GoogleNet 篇