基于 TensorFlow 的服装分类模型构建与训练
import os\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport tensorflow as tf\nfrom tensorflow import keras\nfrom tensorflow.keras import layers\n# 定义训练集和测试集路径\ntrain_dir = 'C:/Users/28938/Desktop/shengdu/Data/train'\ntest_dir = 'C:/Users/28938/Desktop/shengdu/Data/test'\n# 定义类别标签\nclass_names = ['MEN_Coats', 'MEN_Hood', 'MEN_Suits', 'WOMEN_Dress', 'WOMEN_Hood']\n# 定义图像尺寸和批次大小\nimg_height = 224\nimg_width = 224\nbatch_size = 32\n# 从目录中读取训练集和测试集\ntrain_ds = keras.preprocessing.image_dataset_from_directory(\n train_dir,\n validation_split=0.2,\n subset='training',\n seed=42,\n image_size=(img_height, img_width),\n batch_size=batch_size\n)\nval_ds = keras.preprocessing.image_dataset_from_directory(\n train_dir,\n validation_split=0.2,\n subset='validation',\n seed=42,\n image_size=(img_height, img_width),\n batch_size=batch_size\n)\ntest_ds = keras.preprocessing.image_dataset_from_directory(\n test_dir,\n seed=42,\n image_size=(img_height, img_width),\n batch_size=batch_size\n)\n# 定义数据增强器\ndata_augmentation = keras.Sequential(\n [\n layers.experimental.preprocessing.RandomFlip("horizontal", input_shape=(img_height, img_width, 3)),\n layers.experimental.preprocessing.RandomRotation(0.1),\n layers.experimental.preprocessing.RandomZoom(0.1),\n ]\n)\n# 定义模型输入\ninput_shape = (img_height, img_width, 3)\n# 建立模型\nmodel = keras.Sequential([\n data_augmentation,\n layers.experimental.preprocessing.Rescaling(1./255),\n layers.Conv2D(16, 3, padding='same', activation='relu', input_shape=input_shape),\n layers.MaxPooling2D(),\n layers.Conv2D(32, 3, padding='same', activation='relu'),\n layers.MaxPooling2D(),\n layers.Conv2D(64, 3, padding='same', activation='relu'),\n layers.MaxPooling2D(),\n layers.Dropout(0.2),\n layers.Flatten(),\n layers.Dense(128, activation='relu'),\n layers.Dense(len(class_names))\n])\n# 编译模型\nmodel.compile(optimizer='adam',\n loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),\n metrics=['accuracy'])\n# 打印模型结构\nmodel.summary()\n# 设定训练参数\nepochs = 10\n# 开始训练模型\nhistory = model.fit(train_ds, validation_data=val_ds, epochs=epochs)\n# 对模型进行评估\ntest_loss, test_acc = model.evaluate(test_ds)\nprint('Test accuracy:', test_acc)\n# 对模型进行预测\npredictions = model.predict(test_ds)\n# 绘制模型准确度和损失随时间变化的曲线\nacc = history.history['accuracy']\nval_acc = history.history['val_accuracy']\nloss = history.history['loss']\nval_loss = history.history['val_loss']\nepochs_range = range(epochs)\nplt.figure(figsize=(8, 8))\nplt.subplot(2, 1, 1)\nplt.plot(epochs_range, acc, label='Training Accuracy')\nplt.plot(epochs_range, val_acc, label='Validation Accuracy')\nplt.legend(loc='lower right')\nplt.title('Training and Validation Accuracy')\nplt.subplot(2, 1, 2)\nplt.plot(epochs_range, loss, label='Training Loss')\nplt.plot(epochs_range, val_loss, label='Validation Loss')\nplt.legend(loc='upper right')\nplt.title('Training and Validation Loss')\nplt.show()\n逐句解析代码目的及作用内容:1. 导入所需的库:os、numpy、matplotlib.pyplot、tensorflow、keras等。\n2. 定义训练集和测试集的路径。\n3. 定义类别标签。\n4. 定义图像的尺寸和批次大小。\n5. 从目录中读取训练集和测试集,并进行预处理。\n6. 定义数据增强器,包括随机翻转、随机旋转和随机缩放等操作。\n7. 定义模型的输入形状。\n8. 建立模型,包括数据增强、归一化、卷积层、池化层、dropout层、全连接层等。\n9. 编译模型,定义优化器、损失函数和评估指标。\n10. 打印模型结构。\n11. 设定训练参数,如训练轮数。\n12. 开始训练模型,并记录训练过程中的准确度和损失值。\n13. 对模型进行评估,计算测试集上的准确度和损失值。\n14. 对模型进行预测,得到预测结果。\n15. 绘制模型准确度和损失随时间变化的曲线。
原文地址: https://www.cveoy.top/t/topic/pcZN 著作权归作者所有。请勿转载和采集!