基于Python和Keras的AlexNet模型的实现
时间: 2023-06-17 14:04:51 浏览: 50
AlexNet是深度学习领域中非常经典的卷积神经网络,它是在2012年由Alex Krizhevsky等人提出的,并在ImageNet数据集上取得了非常好的成绩。下面是基于Python和Keras的AlexNet模型的实现。
首先,我们需要导入需要的库:
```python
import keras
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from keras.preprocessing.image import ImageDataGenerator
```
然后,我们可以定义AlexNet模型:
```python
model = Sequential()
# 第一层卷积层
model.add(Conv2D(filters=96, kernel_size=(11,11), strides=(4,4), padding='valid', activation='relu', input_shape=(227,227,3)))
# 最大池化层
model.add(MaxPooling2D(pool_size=(3,3), strides=(2,2), padding='valid'))
# 第二层卷积层
model.add(Conv2D(filters=256, kernel_size=(5,5), strides=(1,1), padding='same', activation='relu'))
# 最大池化层
model.add(MaxPooling2D(pool_size=(3,3), strides=(2,2), padding='valid'))
# 第三层卷积层
model.add(Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), padding='same', activation='relu'))
# 第四层卷积层
model.add(Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), padding='same', activation='relu'))
# 第五层卷积层
model.add(Conv2D(filters=256, kernel_size=(3,3), strides=(1,1), padding='same', activation='relu'))
# 最大池化层
model.add(MaxPooling2D(pool_size=(3,3), strides=(2,2), padding='valid'))
# 全连接层
model.add(Flatten())
model.add(Dense(units=4096, activation='relu'))
model.add(Dropout(0.5))
# 全连接层
model.add(Dense(units=4096, activation='relu'))
model.add(Dropout(0.5))
# 输出层
model.add(Dense(units=1000, activation='softmax'))
```
接下来,我们可以编译模型,并进行训练:
```python
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
train_datagen = ImageDataGenerator(rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True)
test_datagen = ImageDataGenerator(rescale=1./255)
train_set = train_datagen.flow_from_directory('train', target_size=(227,227), batch_size=32, class_mode='categorical')
test_set = test_datagen.flow_from_directory('test', target_size=(227,227), batch_size=32, class_mode='categorical')
model.fit(train_set, epochs=10, validation_data=test_set)
```
最后,我们可以保存模型:
```python
model.save('alexnet.h5')
```
以上就是基于Python和Keras的AlexNet模型的实现。