使用python在GPU上构建和训练卷积神经网络 我将对代码进行补充演练,以构建在数据集上训练的任何类型的图像分类器 。在这个例子中,我将使用花卉数据集 , 其中包括102种不同类型的花 。需要数据集和代码都可以私信我 。
Pytorch是机器学习和Python上的免费软件包 , 非常易于使用 。语法模拟numpy , 因此,如果你在python中有一些科学计算经验,那么会相当有用的 。只需几行代码,就可以下载预先训练的数据集 , 使用定义的变换对图像进行标准化,然后运行训练 。
创建和扩充数据集
为了增加数据集,我使用'google_images_download'API 从互联网上下载了相关图像 。显然,您可以使用此API不仅可以扩充现有数据集 , 还可以从头开始创建自己的数据集 。
确保从图像中挑选出异常值(损坏的文件或偶然出现的无关图像) 。
图像标准化
为了使图像具有相同的大小和像素变化,可以使用pytorch的transfors模块:
转移学习
从头开始训练的模型可能不是最明智的选择,因为有许多网络可用于各种数据集 。简单地说,像edge-和其他简单形状检测器等低级特征对于不同的模型是相似的,即使clasificators是针对不同目的进行训练的 。在本项目中,我使用了一个预训练网络Resnet152,只有最后一个完全连接的层重新用于新任务,即使这样也会产生相当好的效果 。
在这里,我将除最后一层之外的所有层都设置为具有固定权重(requires_grad = False) , 因此只有最后层中的参数将通过梯度下降进行更新 。
训练模型
下面介绍一下进行训练的函数:
如何获得GPU?
当然,对CPU的训练太慢了 。根据我自己的经验,在GPU仅需要一个小时就可以完成12次训练周期,但是在CPU上相同数量的训练周期可能需要花费大约15个小时 。
如果您没有本地可用的GPU,则可以考虑使用云GPU 。为了加速CNN的训练,我使用了floydhub()上提供的云GPU。
这项服务非常指的使用:总有很好的文档和大量的提示,所以你会很清楚的知道下一步需要如何去做 。在floydhub上对于使用GPU的收费也是可以接受的 。
首先,需要将数据集上传到服务器
然后 , 需要创建项目 。需要在计算机上安装floydhub客户端 , 将数据集上载到其网站并在终端中运行以下命令:
其中'username'是您的登录名,'i'是数据集所在的文件夹 。
这样子在训练网络时就会很轻松了
结果和改进想法
得到的模型在数据集上训练了1.5小时,并在验证数据集上达到了95%的准确度 。
Python 中用于两个值卷积的函数是什么 , 我知道matlab 中是conv , Python中有预知对应的吗全部用文件IO的话可以这样: matlab把所有参数输出到一个文件里 , 然后用system命令调python脚本 。python脚本读文件做计算结果再写文件 。最后matlab再读文件得到结果 。假设python脚本的用法是: python xxx.py in.txt out.txt 则matlab调用命令...
python三维卷积可以用什么函数? matlab只要用convn写了一个输入和卷积核dim=2是一样的(都是3)的卷积函数,可以试试多加一个for循环变成三维卷积
def conv3D(image, filter):
'''
三维卷积
:param image: 输入,shape为 [h,w,c], c=3
:param filter:卷积核,shape为 [x,y,z], z=3
:return:
'''
h, w, c = image.shape
x, y, z = filter.shape
height_new = h - x + 1# 输出 h
width_new = w - y + 1# 输出 w
image_new = np.zeros((height_new, width_new), dtype=np.float)
for i in range(height_new):
推荐阅读
- 怎么查看电脑外部连接,电脑如何查看外接设备
- 迅雷看视频需要加载什么,迅雷视频字幕怎么加载
- 吃药网红直播,网红直播被观众催喝药 次日离世
- linux过滤的命令 linux过滤错误信息
- 角色扮演游戏教案看病,角色扮演医生游戏教案
- ios系统王者荣耀怎么转移到安卓,如何把ios王者荣耀转移到安卓
- java代码动态加密 javajar包加密
- 做新媒体如何赚钱快点,新媒体赚钱的方式
- pc像素经营游戏,像素游戏经营类游戏