keras 自定义层input_从4个方面介绍Keras和Pytorch,并给你选择其中一个学习库的理由...

全文共3376字,预计学习时长7分钟
5bb355474db874e1efb22a976762ad76.png

对许多科学家、工程师和开发人员而言,TensorFlow是他们的第一个深度学习框架。

TensorFlow 1.0于2017年2月发布;但客观来说,它对用户不是非常友好。

过去几年里,由于Keras和PyTorch比TensorFlow更容易使用,这两个主要的深度学习库已得到较广的普及。

本文将从四个方面来介绍Keras和Pytorch,以及选择其中一个学习库的理由。

ecdc0cf93e853c31c6d9ef46a59a16fa.png

Keras

Keras自身并不是框架,它其实是一个位于其他高级学习框架之上的高级API。目前,它支持TensorFlow, Theano和CNTK。

Keras的吸引力在于使用简单。它是目前为止启动和运行最快且最简单的框架。神经网络的定义是直观的,使用功能API则允许人们将函数定义为层次。

ecdc0cf93e853c31c6d9ef46a59a16fa.png

Pytorch

Pytorch是由Facebook AI 研究组开发的深度学习框架(如Tensorflow)。像Keras一样,它也提炼了深度网络编程的大多混乱部分。

就编码风格的高级和低级而言,Pytorch介于Keras和TensorFlow之间。使用时,你有比Keras更多的灵活性和控制力,同时还无需冗长的声明式编程。

应该使用哪一个编程框架,是深度学习练习者一直在争论的问题。一般来说,这取决于个人偏好。但在做选择时,需要记住Keras和Pytorch的这几个方面的知识。

fe818e03e7ae2483607e6857d324d767.png
ecdc0cf93e853c31c6d9ef46a59a16fa.png

用于定义模型的类与函数

为了定义深度学习模型,Keras设置了功能API。在功能API的范畴里,神经网络被定义为一组顺序函数,需要接连使用。比如说,函数定义层1的输出是函数定义层2的输入。

img_input = layers.Input(shape=input_shape)x = layers.Conv2D(64, (3, 3), activation='relu')(img_input)x = layers.Conv2D(64, (3, 3), activation='relu')(x)x = layers.MaxPooling2D((2, 2), strides=(2, 2))(x)

而Pytorch将网络设置为一个类,该类拓展了Torch库中的torch.nn模块。与Keras类似,Pytorch使用的层为构建块,但由于它们在Pytorch的类中,因此它们属于‘__init__()’类下的一种字符,并由‘forward()’类执行。

class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(3, 64, 3) self.conv2 = nn.Conv2d(64, 64, 3) self.pool = nn.MaxPool2d(2, 2) def forward(self, x): x = F.relu(self.conv1(x)) x = self.pool(F.relu(self.conv2(x))) return xmodel = Net()

因为Pytorch允许访问Python的所有的类功能而不是简单的函数调用,所以定义网络可以更清晰,包容量更多。这真没有什么不好的,除非你认为,尽可能快地编写网络代码对你来说是最重要的,那么Keras使用起来会更方便。

ecdc0cf93e853c31c6d9ef46a59a16fa.png

张量和计算图对比标准数列

对于随意的程序员来说,Keras API隐藏了许多混乱的细节。定义网络层十分直观,通常默认设置就足够入门。

只有你处理到前沿的、或是奇特的模型时,才需要开始着手处理低级、细节的TensorFlow。

然而麻烦的是,当你处理到更低级别的TensorFlow时,随之而来的是所有具有挑战性的部分。必须保证排好所有的矩阵乘法。你甚至不用尝试打印任何一个图层输出,因为你将在终端得到一个漂亮的Tensor定义。

Pytorch对这些方面的要求往往更加宽松。你必须知道每个层输入和输出的大小,但这是一个可以快速掌握的简单技能。不必构建一个无法在调试中直观看到的抽象计算图。

Pytorch的另一个优点是可以在Torch Tensors和Numpy阵列之间来回切换。如果你要做一些自定义的东西,那么在TF张量和Numpy阵列之间来回切换可能会很麻烦。此时,开发人员需要对TensorFlow会话有充分的了解。

Pytorch的交互操作实际上更简单。你只要知道两个操作:一个是将Torch Tensor(一个变量对象)切换为Numpy,另一个就是切换到相反方向。

当然,如果你不需要执行任何花哨的东西,那么Keras就已经足够好了,因为不会遇到任何TensorFlow的阻碍。但如果你需要执行复杂的编程,那么使用Pytorch可能会更顺畅。

ecdc0cf93e853c31c6d9ef46a59a16fa.png

训练模型

854171b2282ede01c3e8f2c8d920bf71.png

在Keras中训练模型非常简单!仅需一个的‘.fit()’,你就可以甩开步子,享受这场“编程之行”。

history = model.fit_generator( generator=train_generator, epochs=10, validation_data=validation_generator)

在Pytorch中训练模型包括几个步骤:

1. 每批训练开始时初始化梯度

2. 运行前进模式

3. 运行后退模式

4. 计算损失并更新权重

for epoch in range(2): # loop over the dataset multiple times  running_loss = 0.0 for i, data in enumerate(trainloader, 0): # Get the inputs; data is a list of [inputs, labels] inputs, labels = data  # (1) Initialise gradients optimizer.zero_grad()  # (2) Forward pass outputs = net(inputs) loss = criterion(outputs, labels)  # (3) Backward loss.backward() # (4) Compute the loss and update the weights optimizer.step()

这些都不过是运行训练的常见步骤!

如此一来,你总能意识到发生了什么。同时,由于这些模型训练步骤在训练不同模型时基本保持不变,因此它们显得十分不必要。

ecdc0cf93e853c31c6d9ef46a59a16fa.png

控制CPU与GPU模式

1cfb12c9508dc1f979464b7a0448004a.png

如果安装了tensorflow-gpu,你可以选择用Keras的默认设置启动并使用GPU。然后,如果你想把某些操作移动到CPU里,可以执行以下单行操作:

with tf.device('/cpu:0'): y = apply_non_max_suppression(x)

至于Pytorch,你必须为每个torch张量和Numpy变量明确指定运行GPU。如果在CPU和GPU之间来回切换来进行不同的操作,这会使代码变得混乱,且有可能容易出错。

例如,要把以前的模型转移到GPU上运行,我们必须执行以下操作:

# Get the GPU devicedevice = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") # Transfer the network to GPUnet.to(device) # Transfer the inputs and labels to GPUinputs, labels = data[0].to(device), data[1].to(device)

Keras赢在它的简洁和良好的默认设置。

ecdc0cf93e853c31c6d9ef46a59a16fa.png

选择框架的一般建议

通常我们建议从Keras入门。

Keras无疑是最容易使用,理解且快速启动和运行的框架。你不用担心它的GPU设置,不需要摆弄抽象代码,总之,你不必做任何复杂的事情。你甚至可以在不触及任何一行TensorFlow 的情况下,执行自定义图层和损失函数的操作。

如果你开始深入了解深层网络的更精细的方面,或者正在执行一些非标准化的东西,那么Pytorch就是首选深度学习库。用Keras的话,就会多一些额外的工作,但不会太多,只不过这会使你的工作效率降低。可是,你依旧可以快速执行,训练和检测网络,而且还能轻松调试!

cf24081d74ef8cf125b21af98040dc95.png

留言 点赞 关注

我们一起分享AI学习与发展的干货

欢迎关注全平台AI垂类自媒体 “读芯术”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297734.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

KlayGE 4.0中Deferred Rendering的改进(五)完结篇:Post process

转载请注明出处为KlayGE游戏引擎上一篇分析了KlayGE中实现实时全动态GI的方法,本篇是这个系列的完结篇,主要讲流水线的最后一段:Post process。 Post process 在KlayGE 4.0的Deferred Rendering中,post process主要有HDR、AA和col…

Centos 手工创建新用户

当我们要创建一个用户时,通常使用useradd命令就可以自动创建了一个用户;实际上,在linux下,一切皆文件,设置好几个文件,也是可以创建出一个用户:文件如下:/etc/passwd :用户/etc/sha…

为了这个羞羞的项目,我差点成为“鉴黄师”

全世界只有3.14 % 的人关注了爆炸吧知识转自:大数据文摘编译:蒋宝尚、魏子敏给男同学们一个机器学习,他们能研究所有他们能想到的问题。当然,根据这本真实存在的畅销书,他们真的能想到的话题也不多????开个玩笑&am…

【.NET】实现CI/CD(二)运行镜像,自动化部署

(一重山,两重山。)书接上文,在上回中我们说到了《【Azure Core】实现CI/CD(一)构建镜像并推送仓库今天我们继续往下说,说下CD(持续部署)的流程,也是很简单。…

a*算法的时间复杂度_数据结构(1)——算法和时间复杂度

Data Structure1算法和时间复杂度01.什么是数据结构?程序设计 数据结构 算法数据结构是关系,是数据元素相互之间存在的一种或多种特定关系的集合。数据结构和算法凌驾于任何一种编程语言之上。02.逻辑结构和物理结构数据结构分为逻辑结构和物理结构。逻…

学会了!如果认错人了,就像这样亲一口!

1 千万不要用曲面屏炒股▼2 谁掏钱多就听谁的准没错▼3 你和你妈的通话记录▼4 em......陷入沉思▼5 人类1994年拍摄到的冥王星人类2018年拍摄到的冥王星▼6 猫:你滚开!劳资不要运动!▼7 吃下去长肉了你来找我我给你送实验室研究研究▼…

python循环语句嵌套_Python 循环语句

循环语句 ​循环语句主要是用于解决某些重复的代码工作,使需要重复的代码只写一遍即可。 Python循环语句主要有两种:while循环和for...in...循环。 一、while循环 主要用于不确定循环的次数时,根据条件进行判断,条件成立&#xff…

那些年,冒死拍过的老师逗逼搞笑照片 !

全世界只有3.14 % 的人关注了爆炸吧知识「你曾经拍到过老师哪个搞笑的瞬间」哈哈哈哈哈哈啊哈哈哈哈已笑疯了拍照的人最后真的都没有被打死吗_石小麦:这张?wanngsh-:当历史老师谈及日本女人2HyFMm:班主任扔实心球曹梓建&#xff1…

记一次 .NET 某上市工业智造 CPU+内存+挂死 三高分析

一:背景 1. 讲故事上个月有位朋友加wx告知他的程序有挂死现象,询问如何进一步分析,截图如下:看这位朋友还是有一定的分析基础,可能玩的少,缺乏一定的分析经验,当我简单分析之后,我发…

60佳优秀的 Photoshop 网页制作教程【下篇】

Photoshop 作为网页设计利器,是网页设计师必备。曾经和大分享过几篇优秀的 Photoshop 网页制作教程,喜欢的人非常多。今天这篇文章继续向大家分享优秀的 Photoshop 网页制作教程。其实,网页设计并没有你想的那么难,相信看完这些教…

android studio 创建.9文件,自己使用Android studio创建.9(点9)图片

本来标题想写"Mac版Android studio创建.9图片",但是感觉区别应该不大,因为只需要拖拽一下鼠标就行了,键盘以及快捷键都不用不上。这篇文章其实也是自己看了其他文章后的一点补充,并不是所有人都会有的问题。既然是想标为…

java stream 求和_谈谈Java任务的并行处理

作者:ksfzhaohui前言谈到并行,我们可能最先想到的是线程,多个线程一起运行,来提高我们系统的整体处理速度;为什么使用多个线程就能提高处理速度,因为现在计算机普遍都是多核处理器,我们需要充分…

现在的男生真的太惨了

1 做男生不容易啊2 这到底是被甲方怎样虐过3 暴风螺旋般的伤口撒盐式连环补刀来源:知乎4 说好的雪橇三傻呢?5 谁都别打扰我看电视6 正弦余弦的空间展示7 这是什么原理?你点的每个赞,我都认真当成了喜欢

SharePoint 2010 - 如何导入\导出WebPart

为了保存WebPart并进行重用,有时我们必须导出该WebPart并在其他页面中将其导入。下面是对此过程的描述。 导出一个WebPart 导出一个WebPart可以将WebPart设置保存成计算机本地文件。并不是所有的WebPart都支持这个选项,该页面的所有者可能禁用了这个选项…

OC----内存管理

任何继承了NSObject的对象,都需要内存管理,但是对基本数据类型无效(不需要释放)原理:每个对象内部都保存了一个与之相关联的整数,称为引用计数器当使用alloc、new或者copy创建一个对象时,对象的…

python赋值语句格式_Python赋值语句后逗号的作用分析

Python赋值语句后逗号的作用分析 本文实例讲述了Python赋值语句后逗号的作用。分享给大家供大家参考。具体分析如下: IDLE 2.6.2 >>> a 1 >>> b 2, >>> print type(a)>>> print type(b)>>> c [] >>> d […

2020年高考数学试题难吗?历史上最难数学卷不是2003!

全世界只有3.14 % 的人关注了爆炸吧知识不经历风雨怎能知道明天会死得更惨今天,高考拉开大帷幕,数学考试结束的一瞬间,在微博上简直是一片哀嚎今年,延期一个月高考让许多人预测,难度比起非典那一年或许将有增无减&…

深入浅出Docker(三):Docker开源之路

背景 Docker从一开始的概念阶段就致力于使用开源驱动的方式来发展,它的成功缘于国外成熟的开源文化氛围,以及可借鉴的社区运营经验。通过本文详细的介绍,让大家可以全面了解一个项目亦或者一项技术是如何通过开源的方式发展起来的。为了更准确…

android activity解耦,Android与设计模式:用单一职责原则为Activity解耦

一、什么是单一职责原则单一职责原则(SRP:Single responsibility principle)又称单一功能原则,其定义为:一个类,应该只有一个可以导致变化的原因。光看概念一、什么是单一职责原则单一职责原则(SRP:Single responsibil…

利用Azure communication service实现跟Teams同样等级的沟通协作应用

大家都知道Teams是一个非常强大的沟通协作平台,包括聊天,团队协作,会议,以及应用集成等功能,现在在全世界拥有数以亿计的商业用户。作为Teams平台的一个延伸,产品组把一些核心功能变成了一个公开的服务&…