K同学[365天深度学习训练营]第二周记录T4猴痘病识别

>- **🍨 本文为[🔗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

- GPU: 5700xt

T4:猴痘病识别

🍺要求:

  1. 训练过程中保存效果最好的模型参数。(完成)
  2. 加载最佳模型参数识别本地的一张图片。(完成)
  3. 调整网络结构使测试集accuracy到达88%(重点)。(最终达到90.65%,完成)

🍻拔高(可选):

  1. 调整模型参数并观察测试集的准确率变化。(完成)
  2. 尝试设置动态学习率。(完成)
  3. 测试集accuracy到达90%。(最终达到90.65%,完成)

首先调周期至100,观察输出:
 

Epoch 100: val_accuracy did not improve from 0.89486
54/54 [==============================] - 1s 27ms/step - loss: 0.0126 - accuracy: 0.9971 - val_loss: 0.6966 - val_accuracy: 0.8879

测试集准确率0.8879,直接满足基础要求了。。。

然后解决过拟合的问题:

观察样本总数:2142,一开始想用数据增强的手法,结果打开文件夹看了下一张图变了十三次,已经增强过了。。。

那就减少模型复杂度,为模型增加第三个dropout层:

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


运行得:

Epoch 100: val_accuracy did not improve from 0.90888
54/54 [==============================] - 2s 28ms/step - loss: 0.0028 - accuracy: 1.0000 - val_loss: 0.5561 - val_accuracy: 0.9065
Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings...

验证集准确率0.9065,直接就满足了。

这期有点简单

读取模型识别图片:

直接运行会报错:
 

{
	"name": "ValueError",
	"message": "Attempt to convert a value (<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=224x224 at 0x7FC344568160>) with an unsupported type (<class 'PIL.JpegImagePlugin.JpegImageFile'>) to a Tensor.",
	"stack": "---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/home/wjh/CNN/练习/T4猴痘病识别/T4猴痘病识别.ipynb 单元格 17 line 6
      <a href='vscode-notebook-cell://wsl%2Bnewubuntu-22.04/home/wjh/CNN/%E7%BB%83%E4%B9%A0/T4%E7%8C%B4%E7%97%98%E7%97%85%E8%AF%86%E5%88%AB/T4%E7%8C%B4%E7%97%98%E7%97%85%E8%AF%86%E5%88%AB.ipynb#X22sdnNjb2RlLXJlbW90ZQ%3D%3D?line=3'>4</a> # img = Image.open(\"./45-data/Monkeypox/M06_01_04.jpg\")  #这里选择你需要预测的图片
      <a href='vscode-notebook-cell://wsl%2Bnewubuntu-22.04/home/wjh/CNN/%E7%BB%83%E4%B9%A0/T4%E7%8C%B4%E7%97%98%E7%97%85%E8%AF%86%E5%88%AB/T4%E7%8C%B4%E7%97%98%E7%97%85%E8%AF%86%E5%88%AB.ipynb#X22sdnNjb2RlLXJlbW90ZQ%3D%3D?line=4'>5</a> img = Image.open(\"/home/wjh/CNN/练习/T4猴痘病识别/data/Others/NM15_02_11.jpg\")  #这里选择你需要预测的图片
----> <a href='vscode-notebook-cell://wsl%2Bnewubuntu-22.04/home/wjh/CNN/%E7%BB%83%E4%B9%A0/T4%E7%8C%B4%E7%97%98%E7%97%85%E8%AF%86%E5%88%AB/T4%E7%8C%B4%E7%97%98%E7%97%85%E8%AF%86%E5%88%AB.ipynb#X22sdnNjb2RlLXJlbW90ZQ%3D%3D?line=5'>6</a> image = tf.image.resize(img, [img_height, img_width])
      <a href='vscode-notebook-cell://wsl%2Bnewubuntu-22.04/home/wjh/CNN/%E7%BB%83%E4%B9%A0/T4%E7%8C%B4%E7%97%98%E7%97%85%E8%AF%86%E5%88%AB/T4%E7%8C%B4%E7%97%98%E7%97%85%E8%AF%86%E5%88%AB.ipynb#X22sdnNjb2RlLXJlbW90ZQ%3D%3D?line=7'>8</a> img_array = tf.expand_dims(image, 0) 
     <a href='vscode-notebook-cell://wsl%2Bnewubuntu-22.04/home/wjh/CNN/%E7%BB%83%E4%B9%A0/T4%E7%8C%B4%E7%97%98%E7%97%85%E8%AF%86%E5%88%AB/T4%E7%8C%B4%E7%97%98%E7%97%85%E8%AF%86%E5%88%AB.ipynb#X22sdnNjb2RlLXJlbW90ZQ%3D%3D?line=9'>10</a> predictions = model.predict(img_array) # 这里选用你已经训练好的模型

File ~/anaconda3/envs/tensorflow/lib/python3.8/site-packages/tensorflow/python/util/traceback_utils.py:153, in filter_traceback.<locals>.error_handler(*args, **kwargs)
    151 except Exception as e:
    152   filtered_tb = _process_traceback_frames(e.__traceback__)
--> 153   raise e.with_traceback(filtered_tb) from None
    154 finally:
    155   del filtered_tb

File ~/anaconda3/envs/tensorflow/lib/python3.8/site-packages/tensorflow/python/framework/constant_op.py:102, in convert_to_eager_tensor(value, ctx, dtype)
    100     dtype = dtypes.as_dtype(dtype).as_datatype_enum
    101 ctx.ensure_initialized()
--> 102 return ops.EagerTensor(value, ctx.device_name, dtype)

ValueError: Attempt to convert a value (<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=224x224 at 0x7FC344568160>) with an unsupported type (<class 'PIL.JpegImagePlugin.JpegImageFile'>) to a Tensor."
}

这个报错原因是,tensorflow框架只能输入numpy数组,直接读取jpg图像得到的是PIL图像。

于是要将图像转为numpy数组的格式再进行输入:

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

# img = Image.open("./45-data/Monkeypox/M06_01_04.jpg")  #这里选择你需要预测的图片
img = Image.open("/home/wjh/CNN/练习/T4猴痘病识别/data/Others/NM15_02_11.jpg")  #这里选择你需要预测的图片
img = img.resize((img_width, img_height))  # 调整图像大小
img_array = np.array(img)  # 转换为 NumPy 数组
img_array = tf.expand_dims(img_array, 0)  # 添加批次维度

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

输出为:

1/1 [==============================] - 0s 64ms/step
预测结果为: Others
2023-12-13 11:50:23.345980: I tensorflow/core/grappler/optimizers/custom_graph_optimizer_registry.cc:114] Plugin optimizer for device_type GPU is enabled.

成功

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

54afive

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

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

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

打赏作者

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

抵扣说明:

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

余额充值