关于Keras和TensorFlow的比较

duanshao 2018-06-06

关于Keras和TensorFlow的比较

在这篇文章中,我打算回答关于Keras和TensorFlow的以下问题:

  1. 他们是什么?
  2. 他们如何工作?
  3. 有什么优点和缺点?
  4. 我应该什么时候使用它们?

他们是什么?

Keras是一个用Python编写的开放源码的神经网络API。它可以运行在几个深度学习和机器学习框架之上,包括TensorFlow (TF)、Microsoft Cognitive Tool (CNTK)和Theano。

TensorFlow是一个用于高性能symbolic-numeric计算的开源软件库。它也被用于深度学习应用,如神经网络。TensorFlow由谷歌Brain team开发,用Python、c++和CUDA (Nvidia用于编程gpu的语言)编写。它可以部署在各种平台上(cpu、gpu、tpu)。

他们如何工作?

Keras是一个接口,而不是一个独立的框架,比如TensorFlow。它提供了高级的、直观的抽象,支持快速实验。

TensorFlow的名字来源于它的功能。它允许用户定义数据、张量等。

下面的类比有助于说明Keras的功能和目的。如果您使用过seaborn,matplotlip,plotly.js或d3.js,则此部分适合您。

  • Keras对TensorFlow来说就像seaborn是matplotlib

Seaborn是基于matplotlib的高级界面。如果我想用一个使用seaborn的x和y标签进行线性回归拟合的散点图,我只需要3行代码:

import seaborn as sns

df = sns.load_dataset('dataset')

sns.regplot(x=df["independent"], y=df["dependent"])

sns.plt.show()

但是,如果我想在matplotlib中创建相同的绘图,我会做类似如下的操作:

import matplotlib.pyplot as plt

import numpy as np

plt.figure(figsize=(10,10))

plt.xlabel("independent")

plt.ylabel("dependent")

plt.grid()

m, b = np.polyfit(x, y, 1)

plt.plot(x, y, '.')

plt.plot(x, m*x + b, '-')

Seaborn是生成具有所有预期特性的标准散点图的最简单和有效的方法。但是,如果我想在没有合适标签的情况下做一个散点图,那么matplotlib会更有效。同样地,如果您想要使用经过尝试的和真正的方法来生成函数模型,那么Keras是一种方法。

  • Keras对TensorFlow来说就像plotly.js对d3.js

如果你想用d3.js建立一个简单的条形图来比较每个“类别”中的“数量”。js文件可能是这样的:

var svgWidth = 960;

var svgHeight = 500;

var chartMargin = {

top: 30,

right: 30,

bottom: 30,

left: 30

};

var chartWidth = svgWidth - chartMargin.left - chartMargin.right;

var chartHeight = svgHeight - chartMargin.top - chartMargin.bottom;

var svg = d3.select("body")

.append("svg")

.attr("height", svgHeight)

.attr("width", svgWidth)

var chartGroup = svg.append("g")

.attr("transform", "translate(" + chartMargin.right + ", " + chartMargin.top + ")");

var xBandScale = d3.scaleBand().range([0, chartWidth]).padding(0.1);

var yLinearScale = d3.scaleLinear().range([chartHeight, 0]);

d3.csv("data.csv", function (error, Data) {

if (error) throw error;

console.log(tvData);

Data.forEach(function (data) {

data.amount = +data.amount;

});

xBandScale.domain(Data.map(function (data) {

return data.category;

}));

yLinearScale.domain([0, d3.max(Data, function (data) {

return data.y;

})]);

var bottomAxis = d3.axisBottom(xBandScale);

var leftAxis = d3.axisLeft(yLinearScale).ticks(10);

chartGroup.selectAll(".bar")

.data(Data)

.enter()

.append("rect")

.attr("class", "bar")

.attr("x", function (data) {

return xBandScale(data.category);

})

.attr("y", function (data) {

return yLinearScale(data.amount);

})

.attr("width", xBandScale.bandwidth())

.attr("height", function (data) {

return chartHeight - yLinearScale(data.amount);

});

chartGroup.append("g")

.call(leftAxis);

chartGroup.append("g")

.attr("transform", "translate(0, " + chartHeight + ")")

.call(bottomAxis);

});

使用plotly.js要简单得多。它看起来像:

var data = [{

x: ['category one', 'category two', 'category three'],

y: [5, 14, 23],

type: 'bar'

}];

Plotly.newPlot('myDiv', data);

很明显很简单,但很有限。如果你想创造惊人的视觉效果,你必须使用d3。如果您想要创建功能完美、简单、用户友好的图形,请使用plotly。类似地,如果您想要完全的创造性控制,请使用TensorFlow。如果你正在寻找一种快速便捷的功能产品,那就选Keras。

有什么优点和缺点?

Keras的优势包括:

  • 用户友好性

重视用户体验。最大限度地减少认知负荷。常数。简单。减少用户操作的数量。受欢迎。由一个庞大而活跃的社区支持。

  • 模块化和可扩展性

神经层、函数、方案和优化器都是独立的模块,您可以将它们结合起来创建新的模型。

  • 使用Python

Python代码= compact,易于调试,并易于扩展。

Keras的缺点:

  • 有限的控制

Keras是一个写得很好的API,它不会阻止对底层框架的访问。话虽如此,Keras并不是为您设计来改变模型的底层架构的。你可以在Keras来定制你的层,但你可以使用TensorFlow。

TensorFlow的优点:

  • 强大

TensorFlow可以应用于各种各样的用例。通过对数据进行一系列的数学运算,它几乎可以构建任何涉及数据处理的内容。然而,TensorFlow最常用来构建神经网络,它在深度学习中处于领先地位。如果您正在尝试进行简单的机器学习,那么您可能只想坚持使用scikitt -learn。如果您使用的是小型数据集,那么TensorFlow可能有点过了头。

关于Keras和TensorFlow的比较

  • Versitile

TensorFlow不仅为您提供了对模型的完全控制,还为您提供了对预处理逻辑的完全控制。去年,谷歌宣布了TensorFlow转换,允许用户定义预处理管道,该管道支持对数据进行大规模、高效、分布式的数据处理。

TensorFlow的缺点:

  • 困难

功能越多,学习难度越大

我应该什么时候使用它们?

如果你是一名研究人员或深度学习专家,那么你可能会使用Keras进行第一次测试,因为它可以快速执行原型和POC实验。然后,您可以转到TensorFlow以获得对网络中的步骤和层的完全控制。您还可以使用调试器实时了解结构。

如果您想要进入Kaggle比赛或参加hackathon,Keras或许是您的最佳选择。如果你是一个新手,想要通过深入的学习来获得乐趣,而你对神经网络的了解只是肤浅的,那么Keras对你来说是最合适的。

相关推荐