erwin模型怎么保存_GAN新手入门—pytorch篇(附代码详解+torch模型保存和加载+cpu和gpu转换实例)...

v2-fda28f2bdc7b9fb85fc73d1f52e401de_1440w.jpg?source=172ae18b

引言

继上次写完 gankerasTensorFlow两个框架的入门后,这次补充一下 gandcganpytorch框架的代码。顺带安利一下怎么将 cpu的代码修改成使用 cuda进行加速的代码,还有怎么将运行在 cpu的模型参数保存下来接着到 gpu的环境下加载运行 (代码链接在后面,有个案例在手还是挺有用的,说不定哪天就用上了!)然后也顺带写一下怎么将运行在 gpu的模型参数保存下来到 cpu环境下加载运行 (这种情况可能较少吧,但是积累起来也不是坏事)

如果对gan还不太熟悉的,推荐看我上一篇的gan入门指南。个人认为,里面的指引对新手应该有挺大帮助的(起码有个小方向),传送门

seven:GAN新手入门指南+keras&TensorFlow代码详解(WIN10)​zhuanlan.zhihu.com
v2-ff6d2d27b293d25693ad4727d55f44dd_180x120.jpg

文章附带的代码有一个是在gpu环境下使用cuda加速的,如果不感兴趣可以略过那一个,直接使用cpu环境的代码训练就好了;如果感兴趣但还没配置pytorch+cuda+cudnn环境的童鞋可以看一下这篇环境配置的文章,传送门

seven:Pytorch1.0+CUDA10.0+cuDNN环境配置之谈(Win 10)​zhuanlan.zhihu.com
v2-3d1d89708a8ca32aed883bea0aa77f86_180x120.jpg

代码运行环境:

电脑:联想小新Air 13 pro CPU:i5 ,4G运行内存 显卡:NVIDIA GeForce 940MX,2G显存 系统:windows10 64位系统 软件:Anaconda 5.3.0 python 3.6.6 pytorch1.0(cpu) pytorch1.0(gpu)

正题

GAN代码

这次讲一下pytorch这个框架的gan。我参考的资料有:

eriklindernoren/PyTorch-GAN​github.com
v2-6da8eceac843afc93e2218a5717d511c_ipico.jpg
用pytorch实现GAN--mnist(含有全部注释和网络思想) - qxqsunshine的博客 - CSDN博客​blog.csdn.net 理解和创建GANs|使用PyTorch来做深度学习​mp.weixin.qq.com
v2-2d9ceed78978badf52f685b50ced44c6_ipico.jpg

其中第一份是eriklindernoren关于gangithub地址,里面收集了很多pytorch写的gangan的一些衍生模型的代码,是很重要的一份干货。如果搜一下就会发现机器之心和量子云等都安利过这个github仓库。再附上一份我添加了一些注释的普通gan代码,应该是比较好理解的了:

Hyfred/gan-torch​github.com
v2-19eb3194983c69ccd3e293b1377493ef_ipico.jpg
如果之前跟过keras和TensorFlow的框架的话,这次新上手pytorch就会发现pytorch和前两个框架还是有较大的区别的,主要就在于静态图和动态图的区别了。keras和TensorFlow就属于静态图,运行的步骤大概就是你把图架构做好,再输入到对话执行。而pytorch这种动态图就略显灵活了,因为在整个过程中,很多东西的修改和调用就方便了许多。这段话你可以看一下我之前发过的TensorFlow的gan和pytorch的gan代码就有体会了,TensorFlow里面把网络架构和损失函数等搭好,传入对话运行的代码很简洁。pytorch的话就是把网络架构搭好之后,在最后的for循环里写出来损失函数等,代码就比较多。反正就是两个框架的特点还是比较鲜明的

扯了一下我自己对pytorchTensorFlowkeras的小感受,如果还想深入了解的可以关注一下这个问题:

PyTorch到底好用在哪里?​www.zhihu.com

挺多大神在里面回答的,都讲得十分到位。

DCGAN

接着主要讲一下dcgan,其实dcgangan十分相近,思路不变只是框架变了。附上一份使用dcgan生成cifar的代码:

Hyfred/gan-torch​github.com
v2-19eb3194983c69ccd3e293b1377493ef_ipico.jpg

注释基本都在里边,稍微强调一下读取数据集的代码

#读取数据集

因为原数据集有50000张32*32的图片,我们使用pytorch的内置函数DataLoader按一个批次64张图片来读取,所以会有782批,最后一批不够64张,只有16张图片。由于数据集本身的结构,所以我们调用数据集的时候需要使用for循环enumerate(dataloader)这个命令的是同时将数据集(批次)索引和数据集(批次)输出。也就是一批一批的进行循环(除了最后一批为16张图,其他每批64张图)。数据集命名为data,它分为两部分,我们只需要第一部分(real_images),它是一个四维向量(第一维为批次数,第二维为通道数,第三维和第四维为图片的长宽,也就是64*3*32*32,最后一个批次为16*3*32*32)最后使用一个for循环:每100批保存一次原图,我们有782个批次,所以只能保存8张图片(第0,100,200...700批保存当批的图片),每一张图片是该批次的图片,nrow=8设置保存的图片格局有8个列,因为每批有64张图片,所以就是8*8=64(8行8列)的格局。

还有就是我们在扩大图像的时候有两种思路:一种是插值(上采样);另一种是反卷积。在搭建生成网络G时,我们就使用了反卷积转置卷积)的概念,命令为“nn.ConvTranspose2d”转置卷积的原理可以看一下:

pytorch演示卷积和反卷积运算 - qq_37879432的博客 - CSDN博客​blog.csdn.net
v2-68a1b5037cd725674b3cf087a7fa7686_180x120.jpg

至于最后训练模型的for循环,就跟我上一篇文章讲过的类似了,如果忘记了可以回顾一下我上一篇文章讲的内容。另外,在代码最后使用:

torch

生成网络G判别网络D的训练参数进行保存,命名为“generator.pth”“discriminator.pth”。我做到这里的时候是嫌cpu环境下模型训练的太慢了,所以想着在gpu环境下继续训练模型,所以我重新改了一份可以在gpu环境下跑的代码,其实就是在源代码的基础上修改了一些命令,代码链接:

Hyfred/gan-torch​github.com
v2-19eb3194983c69ccd3e293b1377493ef_ipico.jpg

其实修改成gpu版的代码并没想象的这么难,我是参考了这篇知乎然后进行修改的,如果有需要修改的话,可以看看我发的这个链接,然后看看我两份代码的修改处就ok了,倘若有些地方没修改到,你就看它第一个报错的地方,像这样

v2-d88e24c6b71fc3d842f5386038bc6142_b.jpg

v2-35e0fb0dea91e6018d5300a5b5e9b95f_b.png

你就知道要去哪里修改:

#源代码:

全部修改完并确定可以运行gpu环境下cuda加速的代码之后,加载我们在cpu环境下保存的代码参数:

#载入cpu训练的预参数

就可以接着训练了。

在这个基础上,我补充一下cpu训练的参数保存下来接着在cpu的环境下加载的代码:

#载入cpu训练的预参数

补充一下gpu训练的参数保存下来接着在cpu的环境下加载的代码:

#载入gpu训练的预参数

补充一下gpu训练的参数保存下来接着在gpu的环境下加载的代码:

#载入gpu训练的预参数

基本上你实操一遍就可以掌握了。

尾声

这次使用pytorch的框架玩了一下普通的gan和dcgan,加上之前写过的keras和TensorFlow的gan,如果你跟了一遍之后,基本上就跟深度学习最火的三个框架打了一遍交道了,也可以亲身感受一下这三个框架的区别。另外,个人认为加载参数继续训练这种小技巧还是挺有用的,希望这个案例也能当做典例储备一下哈!~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值