使用迁移学习完成水果图像识别
时间: 2023-07-05 20:27:29 浏览: 110
以下是一个使用迁移学习完成水果图像识别的示例,使用的是 TensorFlow 和预训练模型 InceptionV3:
```python
import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# 数据路径
train_dir = "path/to/training/dataset"
test_dir = "path/to/testing/dataset"
# 图像大小
img_size = (224, 224)
# 定义数据增强器
train_datagen = ImageDataGenerator(rescale=1./255,
rotation_range=40,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
fill_mode='nearest')
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 = tf.keras.applications.InceptionV3(weights='imagenet',
include_top=False,
input_shape=(224, 224, 3))
# 冻结预训练模型的权重
base_model.trainable = False
# 定义模型
model = tf.keras.Sequential([
base_model,
tf.keras.layers.GlobalAveragePooling2D(),
tf.keras.layers.Dense(256, activation='relu'),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(10, activation='softmax')
])
# 编译模型
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
# 训练模型
history = model.fit(train_generator,
epochs=10,
validation_data=test_generator)
# 评估模型
test_loss, test_acc = model.evaluate(test_generator)
print('Test accuracy:', test_acc)
# 保存模型
model.save('fruit_classifier.h5')
```
这个例子使用的是一个水果分类数据集,其中包含了 10 种不同的水果图像。我们定义了一个数据增强器,对训练图像进行随机扰动增强。然后,我们使用 ImageDataGenerator 函数加载数据集,并将其分为训练集和测试集。接着,我们加载了 InceptionV3 预训练模型,并添加了两个全连接层进行分类。我们使用了 GlobalAveragePooling2D 层对特征图进行平均池化,然后使用一个具有 256 个神经元的全连接层,最后添加了一个 Dropout 层来防止过拟合。最后,我们使用 evaluate() 函数评估模型在测试集上的表现,并保存了训练好的模型。
阅读全文