写一个基于深度卷积神经网络和迁移学习的纹理图像识别的代码
时间: 2024-01-24 07:02:52 浏览: 23
好的,以下是一个基于深度卷积神经网络和迁移学习的纹理图像识别的代码示例,使用了Keras深度学习框架和VGG16预训练模型:
```python
# 导入必要的库
import os
import numpy as np
import matplotlib.pyplot as plt
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential, Model
from keras.layers import Dense, Dropout, Flatten
from keras.applications.vgg16 import VGG16
from keras.optimizers import Adam
# 设置数据集路径和图像大小
train_dir = 'path/to/train/dataset'
test_dir = 'path/to/test/dataset'
img_size = (224, 224)
# 定义数据增强器
train_datagen = ImageDataGenerator(
rescale=1./255,
rotation_range=20,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True
)
test_datagen = ImageDataGenerator(rescale=1./255)
# 加载数据集
train_generator = train_datagen.flow_from_directory(
train_dir,
target_size=img_size,
batch_size=32,
class_mode='categorical'
)
test_generator = test_datagen.flow_from_directory(
test_dir,
target_size=img_size,
batch_size=32,
class_mode='categorical'
)
# 加载预训练模型
base_model = VGG16(weights='imagenet', include_top=False, input_shape=(img_size[0], img_size[1], 3))
# 冻结预训练模型
for layer in base_model.layers:
layer.trainable = False
# 添加新的分类层
x = base_model.output
x = Flatten()(x)
x = Dense(256, activation='relu')(x)
x = Dropout(0.5)(x)
predictions = Dense(train_generator.num_classes, activation='softmax')(x)
# 构建新的模型
model = Model(inputs=base_model.input, outputs=predictions)
# 编译模型
model.compile(optimizer=Adam(lr=0.001), loss='categorical_crossentropy', metrics=['accuracy'])
# 训练模型
history = model.fit_generator(
train_generator,
steps_per_epoch=train_generator.samples // train_generator.batch_size,
epochs=20,
validation_data=test_generator,
validation_steps=test_generator.samples // test_generator.batch_size
)
# 评估模型
test_loss, test_acc = model.evaluate_generator(test_generator, steps=test_generator.samples // test_generator.batch_size)
print('Test accuracy:', test_acc)
```
通过以上代码,我们可以使用VGG16预训练模型和Keras的ImageDataGenerator数据增强器,实现一个基于深度卷积神经网络和迁移学习的纹理图像识别模型。