聊聊Keras的特点及其与其他框架的关系

Keras是一个高度抽象的深度学习框架,以其易用性著称,允许用户像搭乐高积木一样构建模型。它与Tensorflow有紧密关系,起初作为独立库存在,支持多种后端,现在是Tensorflow的一部分。Keras提供了快速搭建模型的能力,但相对于Tensorflow等框架,其灵活性较低。选择Keras还是其他框架取决于开发者的需求和对灵活性的重视程度。
摘要由CSDN通过智能技术生成

导读:独立的Keras和内置的Keras有什么不一样吗?我又该选择哪一种呢? 

 

现在说到开发深度学习模型,都先做个二选一:是工程能力更强的Tensorflow?还是语法更加Pythonic的Pytorch?当然还有一些其它框架,远没成气候。不过聊着聊着,有时候会蹦出一个新词,叫Keras。如果你去网上一查,发现这个Keras也是个Python的深度学习包,热度也很高。

这就很容易让初学者疑惑了,而更容易疑惑的还在后头:这个Keras好像又和Tensorflow存在某种关系,有人说得先安装Tensorflow才能使用Keras,也有人说Keras是个独立的包直接安装就好。真是越发叫人摸不着头脑。

今天我们就来捋一捋这个听起来错综复杂的Keras。

1

Keras的优点

现在Python下的深度学习包也不少了,叫什么名字一点不重要,我们先来看看用Keras做深度学习有什么优势。吴恩达在介绍深度学习的时候说过一句话,他说他喜欢神经网络能够像搭乐高积木一样搭起一款模型。

这个说法很形象。玩过乐高的都知道,乐高就是很多圆的、方的各种形状的小部件,单拿一块出来啥也不是,但是一旦把这些小部件组合起来,就可以搭建成许多意想不到的东西,小到巴掌大小的平板车,大到真人大小的钢铁侠模型都可以用乐高拼起来。

Keras就是可以用乐高的方式搭建出深度学习模型。

我们说深度学习也是神经网络,那比传统的神经网络模型好在哪里呢?好就好在多了很多好用的部件,譬如说池化层,譬如说LSTM,我们可以根据不同的任务目标,把各种部件像拼乐高一样组合起来,就可以搭建出一款好用的深度学习模型。

不过,理想很丰满,现实很骨感。Tensorflow就不用说了,语法怎么看怎么别扭,Pytorch在这方面要好太多,可是对于新手,特别是许多主要从事科研工作,此前没有太多编程基础的新手来说,用起来还是存在一些困难。

先来看一段用Pytorch搭建神经网络模型的代码:

device="cuda"iftorch.cuda.is_available()else"cpu"

classNeuralNetwork(nn.Module):

    def __init__(self):

        super(NeuralNetwork,self).__init__()

        self.flatten=nn.Flatten()

        self.linear_relu_stack=nn.Sequential(

            nn.Linear(28*28,512),

            nn.ReLU(),

            nn.Linear(512,10),

            nn.Softmax()

        )

    defforward(self,x):

        x=self.flatten(x)

        logits=self.linear_relu_stack(x)

        returnlogits

model=NeuralNetwork().to(device)

这是个两层的基本模型。熟悉编程的同学应该一眼就能看出来,这里用到了一些面向对象的知识,对于不了解相关背景的同学来说其实不太好读。而这仅仅只是用Pytorch搭建模型的部分,搭建好了模型还得训练,这部分通常会另外定义一个函数:

deftrain(dataloader,model,loss_fn,optimizer):

    size=len(dataloader.dataset)

    forbatch,(X,y)inenumerate(dataloader):

        X,y=X.to(device),y.to(device)



        # Compute prediction error

        pred=model(X)

        loss=loss_fn(pred,y)



        # Backpropagation

        optimizer.zero_grad()

        loss.backward()

        optimizer.step()



        ifbatch%100==0:

            loss,current=loss.item(),batch*len(X)


然后写个for循环,把参数都填好,最后将前面的model传进去才能使用。客观地评价,Pytorch确实很Pythonic,真的是用Python的方式来写深度学习。不过,对于不熟悉Python也不在乎Pythonic,只想搭建深度学习模型的同学来说,这种写法还是觉得绕了一点,至少,和前面说的“搭乐高积木”还是很有距离。

同样的模型用Ker

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值