在 Keras 中实现 AlexNet 模型,可以按照以下步骤进行:
- 导入必要的库和模块:
from keras.models import Sequential from keras.layers import Dense, Dropout, Flatten from keras.layers.convolutional import Conv2D, MaxPooling2D from keras.utils import np_utils
- 定义 AlexNet 模型:
def AlexNet(input_shape, num_classes): model = Sequential() # 第一层卷积层 model.add(Conv2D(96, kernel_size=(11, 11), strides=(4, 4), activation='relu', input_shape=input_shape, padding='valid')) model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2), padding='valid')) # 第二层卷积层 model.add(Conv2D(256, kernel_size=(5, 5), strides=(1, 1), activation='relu', padding='same')) model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2), padding='valid')) # 第三层卷积层 model.add(Conv2D(384, kernel_size=(3, 3), strides=(1, 1), activation='relu', padding='same')) # 第四层卷积层 model.add(Conv2D(384, kernel_size=(3, 3), strides=(1, 1), activation='relu', padding='same')) # 第五层卷积层 model.add(Conv2D(256, kernel_size=(3, 3), strides=(1, 1), activation='relu', padding='same')) model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2), padding='valid')) # 将特征图转换为向量 model.add(Flatten()) # 第一层全连接层 model.add(Dense(4096, activation='relu')) model.add(Dropout(0.5)) # 第二层全连接层 model.add(Dense(4096, activation='relu')) model.add(Dropout(0.5)) # 第三层全连接层 model.add(Dense(num_classes, activation='softmax')) return model
- 编译模型:
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
- 训练模型:
model.fit(train_images, train_labels, validation_data=(test_images, test_labels), epochs=10, batch_size=128)
其中,train_images 和 train_labels 是训练数据集,test_images 和 test_labels 是测试数据集,num_classes 是分类数目。
评论