猫咪藏在哪个房间python项目_Pytorch实战完整项目学习——猫狗二分类

一. 项目文件的组织结构

Checkpoints文件夹:用于保存训练好的模型

Data文件夹

__init__.py

Dataset.py 该文件完成图片数据集的加载和初始规范化处理的工作

Models文件夹

__init__.py

BasicModule.py文件用于完成模型加载和保存的工作

AlexNet.py ResNet34.py Squeezenet.py等文件用于实现一些特定的训练模型,都继承自 BasicModule,都有load和save的操作

Utils文件夹

__init__.py

Visualize.py 等文件用于实现一些工具操作,像数据可视化处理等

Config.py配置文件,该文件用于提供程序运行中参数的默认值,并可以进行修改

Main.py文件,该文件为运行的主文件,是训练和测试模型的入口

Requirements.txt文件,用于记录用到的库,如下:

fire用在main.py中的main函数中,命令行工具

torchvision.transforms用于dataset.py中,用于处理图片集的初始化变换操作

visdom可视化工具,用于visualize.py文件中,绘制loss,val_accuracy图和图片,以及一些日志信息

tqdm.tqdm进度条工具,在训练train,验证val,测试test方法中均有用到

ipdb实用的断点调试库,用在main.py中,若存在debug文件则ipdb.set_trace()

os用于处理文件和目录,用在dataset.py中读取图片集

warnings设置警告,用在了config.py中,警告没有相关参数

csv用于main.py中write_csv方法中,将得到的result保存为.csv文件

PIL图片处理库,在dataset.py中配合torchvision.transforms使用

time时间库,主要用于命名

torch.utils.data.Dataset

torch.utils.data.Dataloader;

numpy  python的数组类型

torch   pytorch框架基本数据类型——数组

torchnet.meter  便利的统计工具,用在训练train方法中统计平均值和标准差,以及分类情况

Readme.txt文件,提供程序的必要说明

注:

1.关于__init__.py文件的解释

可以看到,几乎每个文件夹下都有__init__.py文件,一个目录如果包含了 __init__.py文件,那么它就变成了一个包(package )。__init__.py可以为空,也可以定义包的属性和方法,但其必须存在,其他程序才能从这个目录中导入相应的模块或函数。

例如:在data/文件夹下有__init__.py,则在main.py中就可以from  data.dataset  import DogCat。如果在__init__.py中写人from  .dataset import DogCat,则在 main.py 中就可以直接写为: from data import DogCat,或者import data; dataset = data.DogCat, 比写为from data.dataset import DogCat更便捷。

2. .pyc文件的解释

.pyc文件是一个可执行的字节码文件,目的是节省Python解析器翻译时间,提高运行效率。

第一次执行python程序后,被import的py文件会生成.pyc字节码文件

第二次再执行程序时,Python就会拿.pyc文件和.py文件的修改时间对比,如果pyc文件修改时间大于py文件的话,说明py源文件没有被修改,Python就会直接执行.pyc文件;如果.py文件的修改时间比.pyc新的话,说明源文件被修改过,Python就会重新执行.py文件来重新生成字节码。

其实我们安装的Python第三方库还是Python自带的包(模块),都会在该目录下生成一个'__pycache__'目录,目录里全是该包(模块)的pyc文件

二. 项目数据测试结果展示

1使用的数据

取自kaggle平台的Dogs vs. Cats竞赛中的测试集和训练集(1=狗,0=猫)

2 测试方法

使用谷歌开源的命令行工具fire,安装pip install fire,导入import fire。使用Facebook提供的可视化工具visdom,安装pip install visdom,导入import visdom。我使用的是VScode编辑器,下面介绍测试流程:

A.运行main.py

B.点击下面窗口“+”号,会打开cmd窗口

C.启动visdom默认本地服务器:python -m visdom.server,打开http://localhost:8097/网页(online)

D.重复B操作,再打开一个命令窗口

E.键入python path\main.py train 默认设置测试,等待visdom网页画出结果

注:关于fire命令行工具的使用,例如

执行main.py文件中的train(字典参数)函数:

python path\main.py train

--model=’resnet34’

--batch-size=4

--max-epoch=20

3 结果展示

A.         squeezenet模型训练和测试结果

默认设置测试结果,batch_size=32squeezenet模型损失变化情况

squeezenet模型验证准确率变化

输出的一些日志信息:

[0701_212918] epoch:0,lr:0.001,loss:0.21642731666782866,

train_cm:[[7980  770][ 920 7830]],val_cm:[[3625  125][ 114 3636]]

[0701_213114] epoch:1,lr:0.001,loss:0.1717829980105979,

train_cm:[[8175  575][ 748 8002]],val_cm:[[3597  153][  85 3665]]

[0701_213309] epoch:2,lr:0.001,loss:0.16232758064429112,

train_cm:[[8229  521][ 670 8080]],val_cm:[[3602  148][  84 3666]]

[0701_213502] epoch:3,lr:0.001,loss:0.15960106837275473,

train_cm:[[8206  544][ 659 8091]],val_cm:[[3541  209][  53 3697]]

[0701_213655] epoch:4,lr:0.001,loss:0.1596247132806281,

train_cm:[[8206  544][ 685 8065]],val_cm:[[3670   80][ 128 3622]]

[0701_213849] epoch:5,lr:0.0005,loss:0.15363887070901217,

train_cm:[[8248  502][ 681 8069]],val_cm:[[3646  104][ 100 3650]]

[0701_214042] epoch:6,lr:0.0005,loss:0.15513105356769527,

train_cm:[[8243  507][ 653 8097]],val_cm:[[3603  147][  73 3677]]

[0701_214235] epoch:7,lr:0.00025,loss:0.1517436784543983,

train_cm:[[8263  487][ 651 8099]],val_cm:[[3628  122][  80 3670]]

[0701_214428] epoch:8,lr:0.00025,loss:0.14852604093591934,

train_cm:[[8255  495][ 645 8105]],val_cm:[[3643  107][  89 3661]]

[0701_214625] epoch:9,lr:0.00025,loss:0.14587212667223318,

train_cm:[[8258  492][ 627 8123]],val_cm:[[3630  120][  88 3662]]

测试图片的结果保存到squeezenet_test_result.csv文件中,其中id为图片名,label为该图片中的动物是狗的概率

B.         resnet34模型训练和测试结果

C.            alexnet模型训练和测试结果

一. 使用VScode执行程序时遇到的bug以及解决方法

1.      路径问题

VScode的相对路径,是以.vscode文件夹为参考点的

例如,我要访问exercise文件夹中的exercise.txt文件,

应该是exercise/exercise.txt(相对路径)

VScode中路径切勿使用‘\‘,否则会被系统认为是转义字符,要使用’/‘或’\\‘

2.      在BasicModule.py文件中,在使用时间命名模型时,配合使用torch.save(…,time.strftime())时会报错OSError:[Errno 22]:Invalid argument:‘路径\文件名‘,具体报错原因不知道,网上百度也没有找到类似错误,解决方法torch.save不能配合time.strftime一起使用

3.       训练ResNet34模型时,报错:RuntimeError: CUDA out of memory.解决方法:将batch_size适当减少,减少GPU消耗

附完整项目:

链接:https://pan.baidu.com/s/1h5X066GL45j6SpunAxW9BQ

提取码:om9f

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值