高级库和低级库的区别

Difference btwn high and low level libraries

高级库和低级库有什么区别?

我知道 keras 是一个高级库,而 tensorflow 是一个低级库,但我对这些框架还不够熟悉,无法理解这对高级库和低级库意味着什么。

高水平意味着你的交互更接近于写英语,你写的代码本质上更容易被人类理解。

低级别的一个例子是一种语言,您必须在其中执行诸如分配内存、将数据从一个内存地址复制到另一个内存地址等操作。

Keras 被认为是高级的,因为您只需几行代码就可以构建一个神经网络,该库将为您处理所有的复杂性。

在tensorflow中(我没用过),你可能要写更多的代码来实现同样的事情,但可能有更大程度的控制。对于外行来说,阅读神经网络的 tensorflow 代码比阅读神经网络的 keras 代码意义不大。

Keras 位于 Tensorflow 之上,因此框架相对于 Tensorflow 本身 ​​'higher-level'。

'high' 级别的语言或框架通常被定义为相对于较低级别的语言或框架而言,具有更多依赖性或与核心二进制代码距离更远的语言或框架。

例如,jQuery 将被视为比 JavaScript 更高级别,因为它取决于 Javascript。而 Javascript 会被认为比汇编代码更高级,因为它被转译为汇编代码。

Keras 是一种高级深度学习 (DL) 'API'。 API 的主要组成部分是:

  • 模型 - 定义神经网络 (NN)。

  • - NN 模型的构建块(例如密集、卷积)。

  • 优化器 - 进行梯度下降以学习 NN 权重的不同方法(例如 SGD、Adam)。

  • Losses - objective 优化器应针对分类、回归等用例最小化的函数(例如 categorical_crossentropy、MSE) .

此外,它为 API 提供了合理的默认值,例如优化器的学习率,这适用于常见的用例。这减少了用户在学习阶段的认知负担。

这里的'Guiding Principles'部分信息量很大:

https://keras.io/

运行 神经网络本身涉及的数学运算(如卷积、矩阵乘法等)委托给后端。一 Keras 支持的后端是 Tensorflow。

用代码片段突出差异:

凯拉斯

# Define Neural Network
model = Sequential()  
# Add Layers to the Network
model.add(Dense(512, activation='relu', input_shape=(784,)))
....
# Define objective function and optimizer
model.compile(loss='categorical_crossentropy',
          optimizer=Adam(),
          metrics=['accuracy'])

# Train the model for certain number of epochs by feeding train/validation data
history = model.fit(x_train, y_train,
                    batch_size=batch_size,
                    epochs=epochs,
                    verbose=1,
                    validation_data=(x_test, y_test))

张量流

它不再是代码片段 :) 因为您需要定义所有内容,从存储权重的变量开始,层之间的连接,训练循环,创建数据批次以进行训练等.

您可以参考以下链接了解在 Keras 与 Tensorflow 中训练 MNIST(DL Hello world 示例)的代码复杂性。

https://github.com/keras-team/keras/blob/master/examples/mnist_mlp.py

https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/3_NeuralNetworks/multilayer_perceptron.py

考虑到 Keras 带来的好处,Tensorflow 已将 tf.keras 设为 Tensorflow 2.0 中的高级 API

https://www.tensorflow.org/tutorials/