采用ResNet50、EfficientNet等预训练模型作为特征提取器,替换其顶层全连接层以适配鱼类分类任务:
python
from tensorflow.keras.applications import ResNet50
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Dense, GlobalAveragePooling2D
base_model = ResNet50)
x = base_model.output
x = GlobalAveragePooling2D
x = Dense
predictions = Dense # num_classes为鱼类类别数
model = Model
2. 自定义CNN架构设计
dui与小规模数据集,可设计轻量级CNN模型:
python
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
model = Sequential()
3. 模型优化策略
损失函数:分类任务采用交叉熵损失
优化器:Adam优化器
正则化:添加L2权重衰减和Dropout层
四、模型训练与评估
1. 训练流程实现
使用fit方法启动训练,配置回调函数实现早停和模型保存:
python
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint
callbacks =
history = model.fit(
train_generator,
steps_per_epoch=len,
epochs=50,
validation_data=val_generator,
validation_steps=len,
callbacks=callbacks
)
2. 性Neng评估指标
准确率:测试集分类正确率
混淆矩阵:分析各类别识别效果
平衡精确率与召回率
使用Scikit-learn计算评估指标:
python
from sklearn.metrics import classification_report, confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt
y_pred = model.predict
y_pred_classes = np.argmax
y_true = np.argmax
print)
sns.heatmap, annot=True, fmt='d')
plt.show
五、模型部署与应用
1. 模型导出与优化
将训练好的模型导出为TensorFlow Lite格式,适配移动端或边缘设备:
python
converter = tf.lite.TFLiteConverter.from_keras_model
tflite_model = converter.convert
with open as f:
f.write
2. 实时识别系统实现
结合OpenCV实现摄像头实时识别:
python
import cv2
import numpy as np
import tensorflow as tf
# 加载模型
model = tf.keras.models.load_model
cap = cv2.VideoCapture
while True:
ret, frame = cap.read
if not ret:
break
# 预处理
input_img = cv2.resize)
input_img = input_img.astype / 255.0
input_img = tf.convert_to_tensor
input_img = tf.expand_dims
# 预测
predictions = model.predict
class_id = np.argmax
# 显示后来啊
cv2.putText, cv2.FONT_HERSHEY_SIMPLEX, 1, , 2)
cv2.imshow
if cv2.waitKey & 0xFF == ord:
break
cap.release
cv2.destroyAllWindows