这段代码使用 TensorFlow 构建了一个卷积神经网络模型,用于对猫狗图像进行分类。

首先,它导入必要的库,包括 os、numpy、matplotlib.pyplot 和 tensorflow。

接着,定义训练集和测试集的路径、类别标签,以及图像的尺寸和批次大小。

然后,使用 keras.preprocessing.image_dataset_from_directory 函数从目录中读取训练集和测试集,并指定图像的尺寸和批次大小。

之后,定义数据增强器,包括随机翻转、随机旋转、随机缩放、随机裁剪、像素值缩放、随机对比度和随机饱和度调整。

接着,定义模型的输入形状,并构建模型。模型包括卷积层、池化层、Dropout 层、全连接层和输出层。

接下来,编译模型,指定优化器、损失函数和评估指标。

之后,定义训练参数,如训练的轮数。

接着,定义模型 checkpoint,用于保存模型的权重。

然后,定义学习率衰减策略,当验证集上的损失停止改善时减少学习率。

接下来,开始训练模型,使用训练集和验证集,并指定回调函数。

最后,加载最佳模型权重,对模型进行评估、预测,并使用混淆矩阵和分类报告评估模型性能。

此外,代码还绘制了模型准确度和损失随时间变化的曲线,以及选择一张测试图片并进行预测,并显示图片和预测结果。

以下是代码逐句解析:

  1. import os:导入 os 库,用于处理文件和目录。
  2. import numpy as np:导入 numpy 库,用于进行数值计算。
  3. import matplotlib.pyplot as plt:导入 matplotlib.pyplot 库,用于绘制图形。
  4. import tensorflow as tf:导入 tensorflow 库,用于构建和训练深度学习模型。
  5. from tensorflow import keras:从 tensorflow 库中导入 keras 模块,用于构建神经网络模型。
  6. from tensorflow.keras import layers:从 keras 模块中导入 layers 模块,用于创建神经网络层。
  7. train_dir = 'C:/Users/28938/Desktop/image/image/train':定义训练集的路径。
  8. test_dir = 'C:/Users/28938/Desktop/image/image/test':定义测试集的路径。
  9. class_names = ['cats', 'dogs']:定义类别标签。
  10. img_height = 224:定义图像高度。
  11. img_width = 224:定义图像宽度。
  12. batch_size = 32:定义批次大小。
  13. train_ds = keras.preprocessing.image_dataset_from_directory(...):从训练集目录读取数据,并指定图像尺寸和批次大小。
  14. val_ds = keras.preprocessing.image_dataset_from_directory(...):从验证集目录读取数据,并指定图像尺寸和批次大小。
  15. test_ds = keras.preprocessing.image_dataset_from_directory(...):从测试集目录读取数据,并指定图像尺寸和批次大小。
  16. data_augmentation = keras.Sequential(...):定义数据增强器,包括随机翻转、随机旋转、随机缩放、随机裁剪、像素值缩放、随机对比度和随机饱和度调整。
  17. input_shape = (img_height, img_width, 3):定义模型的输入形状。
  18. model = keras.Sequential(...):构建模型,包括卷积层、池化层、Dropout 层、全连接层和输出层。
  19. model.compile(...):编译模型,指定优化器、损失函数和评估指标。
  20. epochs = 30:定义训练的轮数。
  21. checkpoint_path = 'model_checkpoint/cp.ckpt':定义模型 checkpoint 路径。
  22. checkpoint_dir = os.path.dirname(checkpoint_path):获取模型 checkpoint 目录。
  23. checkpoint = tf.keras.callbacks.ModelCheckpoint(...):定义模型 checkpoint 回调函数,用于保存模型的权重。
  24. lr_decay = tf.keras.callbacks.ReduceLROnPlateau(...):定义学习率衰减策略回调函数,用于在验证集上的损失停止改善时减少学习率。
  25. history = model.fit(...):开始训练模型,使用训练集和验证集,并指定回调函数。
  26. model.load_weights(checkpoint_path):加载最佳模型权重。
  27. test_loss, test_acc = model.evaluate(test_ds):对模型进行评估,计算测试集上的损失和准确率。
  28. predictions = model.predict(test_ds):对模型进行预测,获取预测结果。
  29. from sklearn.metrics import confusion_matrix, classification_report:导入 sklearn.metrics 库,用于计算混淆矩阵和分类报告。
  30. test_labels = [] ... test_labels = np.concatenate(test_labels):获取测试集真实标签。
  31. predicted_labels = np.argmax(predictions, axis=1):获取预测标签。
  32. cm = confusion_matrix(test_labels, predicted_labels):计算混淆矩阵。
  33. report = classification_report(test_labels, predicted_labels, target_names=class_names):计算分类报告。
  34. print('Confusion Matrix:') ... print(report):打印混淆矩阵和分类报告。
  35. acc = history.history['accuracy'] ... epochs_range = range(epochs):获取模型训练过程中准确度和损失的历史数据。
  36. plt.figure(figsize=(8, 8)) ... plt.show():绘制模型准确度和损失随时间变化的曲线。
  37. test_image_path = 'C:/Users/28938/Desktop/image/image/test/cats/cat.4004.jpg':选择一张测试图片。
  38. img = keras.preprocessing.image.load_img(...) ... img_array = tf.expand_dims(img_array, 0):读取并预处理图片。
  39. predictions = model.predict(img_array):使用模型预测图片的类别。
  40. score = tf.nn.softmax(predictions[0]):计算预测结果的置信度。
  41. plt.imshow(img) ... plt.show():显示图片。
  42. print('预测结果: {},置信度: {:.2f}%'.format(class_names[np.argmax(score)], 100 * np.max(score))):打印预测结果和置信度。

这段代码实现了猫狗图像分类的完整流程,从数据准备、模型构建、训练、评估到结果可视化,展现了 TensorFlow 在深度学习领域的应用。

猫狗图像分类:基于TensorFlow的深度学习模型

原文地址: https://www.cveoy.top/t/topic/phIE 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录