我最近在Coursera上接受了Andrew Ng的演出。之后我转向Python并使用Pandas,Numpy,Sklearn来实现ML算法。现在在冲浪的时候,我遇到了tensorFLow并发现它非常棒,并实现了这个example,它将MNIST数据作为输入。 但我不确定为什么使用库(TensorFlow)? 我们没有进行任何并行计算,因为在上一个时期更新的权重用于下一个? 我发现很难找到使用这样一个图书馆的理由吗?
答案 0 :(得分:2)
TensorFlow在训练卷积神经网络(以及许多其他机器学习模型)时提供了几种形式的并行性,包括:
个别操作中的并行性(例如tf.nn.conv2d()
和tf.matmul()
)。这些操作为多核CPU和GPU提供了高效的并行实现,TensorFlow在任何可用的地方都使用这些实现。
操作之间的并行。 TensorFlow使用模型的数据流图表表示,并且有两个节点没有通过数据流图中的有向路径连接,这些节点可以并行执行。例如,Inception图像识别模型在其数据流图中有许多并行分支(参见this paper中的图3),TensorFlow可以利用它来同时运行许多操作。 AlexNet paper还描述了如何使用"模型并行性"在模型的不同部分上并行运行操作,TensorFlow支持使用相同的机制。
模型副本之间的并行性。 TensorFlow也是为distributed execution设计的。并行训练的一种常见方案("数据并行")涉及在一组相同的工作人员中分割数据集,对每个工作人员执行相同的训练计算以获取不同的数据,并在工作人员之间共享模型参数
此外,TensorFlow和Theano等库可以在处理模型的整个数据流图时执行各种优化。例如,它们可以消除常见的子表达式,避免重新计算常量值,并生成更有效的融合代码。
答案 1 :(得分:0)
您可以在sklearn或其他库中找到预烘焙模型,但TensorFlow允许快速迭代自定义机器学习模型。它还附带a ton of useful functions你必须(并且可能不应该)写自己。
对我来说,它不是关于性能(尽管它们肯定关心性能),而是关于如何快速地推出神经网络。