python图像分类项目-03迁移学习pytorch内预设模型训练自己的模型

项目教程及代码来自:同济子豪兄

https://github.com/TommyZihao/Train_Custom_Dataset

https://www.bilibili.com/video/BV1Ng411C7WY

一、学习总结

这节课体验了pytorch的迁移学习模式的一种,即在pytorch原有模型(示例为resnet18)基础上,微调最后一层(分类层)。当然也能选择微调所有训练层或是仅仅借用resnet18的框架自行从头训练参数,这部分就等日后体验。 模型的训练以batch为最小单位进行,每一次遍历完训练集(一个epoch)后会依据测试集对得到模型的准确度进行评估,并保存下准确度更高模型。训练过程中的日志记录以及可视化监控由wandb,一个可以通过浏览器页面查看实时数据的py库实现。

(本地vs云平台)

二、感悟

这一次代码试运行打破了我想在本地mac上训练模型的幻想。训练模型时mac的cpu没法并行计算,速度极慢,跑一个epoch要700秒…相对比gpu云平台只要9秒一个epoch,还是乖乖选云平台吧。

wandb,即weight and bias数据监控平台太惊艳了,用云gpu平台训练模型+wandb浏览器页面监控数据,在外只要带个pad就能方便的观测,谢谢子豪佬介绍的网站[赞]

三、日志

安装py库

conda有 seaborn plotly

pip安装 wandb pip install wandb -i https://pypi.tuna.tsinghua.edu.cn/simple

用于记录训练过程中的数据。可视化与监控

关于对模型进行完整训练时报错:

[W ParallelNative.cpp:229] Warning: Cannot set number of intraop threads after parallel work has started or after set_num_threads call when using native parallel backend (function set_num_threads)

调查后发现原因为DataLoader无法使用并行计算

目前只有两种低效的解决方法。能跑通,但效率大打折扣

1.调用DataLoader时设置num_workers=0,只为数据提供主线程

#DataLoader类的函数参数说明

num_workers (int, optional): how many subprocesses to use for data

loading. ``0`` means that the data will be loaded in the main process.

default: ``0``)

2是修改环境变量,同样是设置仅使用单线程

export OMP_NUM_THREADS=1

或者

import os

os.environ["OMP_NUM_THREADS"] = "1"

参考链接:

https://www.cnblogs.com/ytxwzqin/p/12012025.html pytorch-3

https://www.pudn.com/news/6228d9fd9ddf223e1ad257a4.html

https://stackoverflow.com/questions/64772335/pytorch-w-parallelnative-cpp206

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值