AlexNet (Hinton et al., 2012)的代码
时间: 2024-11-15 19:21:08 浏览: 34
AlexNet是由Geoffrey Hinton、Ilya Sutskever和Alex Krizhevsky等人于2012年在ImageNet比赛中首次提出的深度卷积神经网络(Convolutional Neural Network, CNN)模型。这个模型对计算机视觉领域产生了重大影响,因为它证明了深度学习在大规模图像分类上的潜力。
以下是一个简化的AlexNet模型的Python代码片段,使用的是Keras库,因为其简洁易用。请注意,这只是一个基本的版本,实际应用可能需要更复杂的架构、数据预处理和训练策略:
```python
from keras.models import Sequential
from keras.layers.convolutional import Conv2D, MaxPooling2D
from keras.layers.core import Dense, Flatten
from keras.utils import to_categorical
# 假设图像大小为227x227像素,通道数为3(RGB)
image_size = (227, 227, 3)
num_classes = 1000 # ImageNet有1000个类别
model = Sequential()
model.add(Conv2D(96, (11, 11), strides=(4, 4), activation='relu', input_shape=image_size))
model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2)))
model.add(Conv2D(256, (5, 5), activation='relu'))
model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2)))
model.add(Conv2D(384, (3, 3), activation='relu'))
model.add(Conv2D(384, (3, 3), activation='relu'))
model.add(Conv2D(256, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2)))
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')) # 输出层,softmax用于多分类
# 编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# 使用ImageDataGenerator等进行数据增强以提高模型性能
```
这个模型包含了几个卷积层(Conv2D)、池化层(MaxPooling2D)以及全连接层(Dense),并且在某些层之间使用Dropout防止过拟合。每个卷积层后面通常跟随ReLU激活函数,最后一层是全连接层,输出节点对应于ImageNet的类别数量,使用softmax激活计算概率分布。
阅读全文