ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

运动鞋品牌识别

运动鞋品牌识别 我的环境语言环境Python 3.12.7编译器jupyter notebook深度学习环境TensorFlow 2.18.01.导入数据from tensorflow import keras from tensorflow.keras import layers,models import os, PIL, pathlib import matplotlib.pyplot as plt import tensorflow as tf data_dir E:/Jupyter/MR_K/5 data_dir pathlib.Path(data_dir) image_count len(list(data_dir.glob(*/*/*.jpg))) print(图片总数为,image_count) roses list(data_dir.glob(train/nike/*.jpg)) PIL.Image.open(str(roses[0]))2.检查数据batch_size 32 img_height 224 img_width 224 train_ds tf.keras.preprocessing.image_dataset_from_directory( E:/Jupyter/MR_K/5/train/, seed123, image_size(img_height, img_width), batch_sizebatch_size)3.数据预处理batch_size 32 img_height 224 img_width 224 train_ds tf.keras.preprocessing.image_dataset_from_directory( E:/Jupyter/MR_K/5/train/, seed123, image_size(img_height, img_width), batch_sizebatch_size) val_ds tf.keras.preprocessing.image_dataset_from_directory( E:/Jupyter/MR_K/5/test/, seed123, image_size(img_height, img_width), batch_sizebatch_size)4.加载数据plt.figure(figsize(20, 10)) for images, labels in train_ds.take(1): for i in range(20): ax plt.subplot(5, 10, i 1) plt.imshow(images[i].numpy().astype(uint8)) plt.title(class_names[labels[i]]) plt.axis(off)5.构建CNN网络import tensorflow as tf from tensorflow.keras import layers, models # 定义常量 AUTOTUNE tf.data.AUTOTUNE num_classes len(class_names) # 假设 class_names 已经被定义 img_height 224 # 假设 img_height 和 img_width 已经被定义 img_width 224 # 数据集优化 train_ds train_ds.cache().shuffle(1000).prefetch(buffer_sizeAUTOTUNE) val_ds val_ds.cache().prefetch(buffer_sizeAUTOTUNE) # 定义模型 model models.Sequential([ layers.Rescaling(1./255, input_shape(img_height, img_width, 3)), layers.Conv2D(16, (3, 3), activationrelu, input_shape(img_height, img_width, 3)), # 卷积层1卷积核3*3 layers.AveragePooling2D((2, 2)), # 池化层12*2采样 layers.Conv2D(32, (3, 3), activationrelu), # 卷积层2卷积核3*3 layers.AveragePooling2D((2, 2)), # 池化层22*2采样 layers.Dropout(0.3), layers.Conv2D(64, (3, 3), activationrelu), # 卷积层3卷积核3*3 layers.Dropout(0.3), layers.Flatten(), # Flatten层连接卷积层与全连接层 layers.Dense(128, activationrelu), # 全连接层特征进一步提取 layers.Dense(num_classes) # 输出层输出预期结果 ]) # 打印模型结构 model.summary()6.训练模型initial_learning_rate设置初始学习率为0.1。ExponentialDecay定义了一个指数衰减的学习率计划lr_schedule。其中decay_steps10指每10个训练步骤steps衰减一次而不是每个epoch。decay_rate0.92每次衰减后学习率会乘以0.92逐步减小。staircaseTrue表示使用阶梯式衰减每10步会将学习率降低一次而不是逐步平滑地降低。Adam优化器将lr_schedule作为学习率传入Adam优化器使得优化器在训练过程中使用指数衰减的学习率。模型编译使用Adam优化器、SparseCategoricalCrossentropy损失函数用于多类别分类并指定accuracy作为评估指标。# 设置初始学习率 initial_learning_rate 0.1 lr_schedule tf.keras.optimizers.schedules.ExponentialDecay( initial_learning_rate, decay_steps10, # 敲黑板这里是指 steps不是指epochs decay_rate0.92, # lr经过一次衰减就会变成 decay_rate*lr staircaseTrue) # 将指数衰减学习率送入优化器 optimizer tf.keras.optimizers.Adam(learning_ratelr_schedule) model.compile(optimizeroptimizer, losstf.keras.losses.SparseCategoricalCrossentropy(from_logitsTrue), metrics[accuracy])7.继续训练模型ModelCheckpointModelCheckpoint用于在训练过程中保存模型。当监测到的指标如验证集准确率改善时它会保存模型的权重或整个模型。best_model.weights.h5这是保存最佳模型权重的文件名。由于您已经正确地使用了.weights.h5作为文件后缀这符合save_weights_onlyTrue的要求。monitorval_accuracy指定监控的指标为验证集准确率。verbose1设置详细模式会在控制台输出模型保存的信息。save_best_onlyTrue仅在监测指标改善时保存模型。save_weights_onlyTrue仅保存模型的权重而不是整个模型。EarlyStoppingEarlyStopping用于在训练过程中提前停止训练以避免过拟合。当验证集上的指标在一定数量的epoch内没有改善时训练会停止。monitorval_accuracy指定监控的指标为验证集准确率。min_delta0.001设置最小变化量意味着当验证集准确率的改善小于0.001时才会被认为是改善。patience20设置容忍的epoch数如果在20个epoch内验证集准确率没有改善则停止训练。verbose1设置详细模式会在控制台输出早停的信息。from tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping epochs 50 # 保存最佳模型参数 checkpointer ModelCheckpoint(best_model.weights.h5, # 修改文件名 monitorval_accuracy, verbose1, save_best_onlyTrue, save_weights_onlyTrue) # 设置早停 earlystopper EarlyStopping(monitorval_accuracy, min_delta0.001, patience20, verbose1)8.拟合history model.fit(train_ds, validation_dataval_ds, epochsepochs, callbacks[checkpointer, earlystopper])9.验证准确性from tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping epochs 50 # 保存最佳模型参数 checkpointer ModelCheckpoint(best_model.weights.h5, # 修改文件名 monitorval_accuracy, verbose1, save_best_onlyTrue, save_weights_onlyTrue) # 设置早停 earlystopper EarlyStopping(monitorval_accuracy, min_delta0.001, patience20, verbose1)10.验证准确性from PIL import Image import numpy as np # img Image.open(./45-data/Monkeypox/M06_01_04.jpg) #这里选择你需要预测的图片 img Image.open(E:/Jupyter/MR_K/5/3.jpeg) #这里选择你需要预测的图片 image tf.image.resize(img, [img_height, img_width]) img_array tf.expand_dims(image, 0) #/255.0 # 记得做归一化处理与训练集处理方式保持一致 predictions model.predict(img_array) # 这里选用你已经训练好的模型 print(预测结果为,class_names[np.argmax(predictions)])model.load_weights(best_model.weights.h5) from PIL import Image import numpy as np # img Image.open(./45-data/Monkeypox/M06_01_04.jpg) #这里选择你需要预测的图片 img Image.open(E:/Jupyter/MR_K/5/3.jpeg) #这里选择你需要预测的图片 image tf.image.resize(img, [img_height, img_width]) img_array tf.expand_dims(image, 0) #/255.0 # 记得做归一化处理与训练集处理方式保持一致 predictions model.predict(img_array) # 这里选用你已经训练好的模型 print(预测结果为,class_names[np.argmax(predictions)])总结提示这里对文章进行总结例如以上就是今天要讲的内容本文仅仅简单介绍了pandas的使用而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进