K同学[365天深度学习训练营]第二周记录T5运动鞋品牌识别

>- **🍨 本文为[🔗365天深度学习训练营](https://mp.weixin.qq.com/s/rbOOmire8OocQ90QM78DRA) 中的学习记录博客**
>- **🍖 原作者:[K同学啊 | 接辅导、项目定制](https://mtyjkh.blog.csdn.net/)** 

我的环境:

- 系统环境:WSL2+Ubuntu22.04

- 语言环境:Python3.8.18

- 编译器:vscode+jupyter notebook

- 深度学习环境:TensorFlow2.10.0

🍺要求:

  1. 了解如何设置动态学习率(重点)(完成)
  2. 调整代码使测试集accuracy到达84%。(完成,最终达到88.16%)

🍻拔高(可选):

  1. 保存训练过程中的最佳模型权重(完成)
  2. 调整代码使测试集accuracy到达86%。(完成,最终达到88.16%)

本次任务介绍了学习率动态下降的一个函数,有个要修改的就是初始学习率应该降到0.001或更低:

# 设置初始学习率
initial_learning_rate = 0.001

lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
        initial_learning_rate, 
        decay_steps=10,      # 敲黑板!!!这里是指 steps,不是指epochs
        decay_rate=0.92,     # lr经过一次衰减就会变成 decay_rate*lr
        staircase=True)

# 将指数衰减学习率送入优化器
optimizer = tf.keras.optimizers.Adam(learning_rate=lr_schedule)

model.compile(optimizer=optimizer,
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

测试准确率优化:

首先还是观察训练结果:

又是过拟合,不过这次我看了下模型结构,感觉卷积核个数太少的,我把卷积核个数全部乘二:

model = models.Sequential([
    layers.experimental.preprocessing.Rescaling(1./255, input_shape=(img_height, img_width, 3)),
    
    layers.Conv2D(32, (3, 3), activation='relu', input_shape=(img_height, img_width, 3)), # 卷积层1,卷积核3*3  
    layers.AveragePooling2D((2, 2)),               # 池化层1,2*2采样
    layers.Conv2D(64, (3, 3), activation='relu'),  # 卷积层2,卷积核3*3
    layers.AveragePooling2D((2, 2)),               # 池化层2,2*2采样
    layers.Dropout(0.3),  
    layers.Conv2D(128, (3, 3), activation='relu'),  # 卷积层3,卷积核3*3
    layers.Dropout(0.3),  
    
    layers.Flatten(),                       # Flatten层,连接卷积层与全连接层
    layers.Dense(128, activation='relu'),   # 全连接层,特征进一步提取
    layers.Dense(len(class_names))               # 输出层,输出预期结果
])

model.summary()  # 打印网络结构

结果:

16/16 [==============================] - 1s 45ms/step - loss: 0.0504 - accuracy: 0.9801 - val_loss: 0.5101 - val_accuracy: 0.8816
Epoch 47: early stopping

居然一步到位了,很怪,我一直以为过拟合应该减少卷积核个数的 

张量错误

最后调用模型测试的时候的时候有个和上节一样的报错,原因是未将PIL图像转成numpy数组:


from PIL import Image
import numpy as np
import tensorflow as tf

# 加载模型和类别名称等相关代码

img = Image.open("/home/wjh/CNN/练习/T5运动鞋品牌识别/test/nike/1.jpg")  # 这里选择你需要预测的图片
img = img.resize((img_height, img_width))  # 调整图像大小
img_array = np.array(img) / 255.0  # 转换为 NumPy 数组并进行归一化处理
img_array = tf.expand_dims(img_array, 0)  # 添加批次维度

predictions = model.predict(img_array)  # 这里选用你已经训练好的模型
predicted_class = class_names[np.argmax(predictions)]
print("预测结果为:", predicted_class)

输出为:

1/1 [==============================] - 0s 250ms/step
预测结果为: nike
2023-12-14 14:53:22.854816: I tensorflow/core/grappler/optimizers/custom_graph_optimizer_registry.cc:114] Plugin optimizer for device_type GPU is enabled

完成

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

54afive

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值