【发布时间】:2019-04-02 02:56:04
【问题描述】:
btwn 高级库和低级库有什么区别?
我知道 keras 是一个高级库,而 tensorflow 是一个低级库,但我对这些框架仍然不够熟悉,无法理解这对高级库和低级库意味着什么。
【问题讨论】:
标签: tensorflow keras libraries low-level
btwn 高级库和低级库有什么区别?
我知道 keras 是一个高级库,而 tensorflow 是一个低级库,但我对这些框架仍然不够熟悉,无法理解这对高级库和低级库意味着什么。
【问题讨论】:
标签: tensorflow keras libraries low-level
Keras 是一种高级深度学习 (DL) 'API'。 API 的关键组件是:
模型 - 定义神经网络 (NN)。
层 - NN 模型的构建块(例如 Dense、Convolution)。
优化器 - 进行梯度下降以学习 NN 权重的不同方法(例如 SGD、Adam)。
损失 - 优化器应在分类、回归等用例中最小化的目标函数(例如 categorical_crossentropy、MSE)。
此外,它还为 API 提供了合理的默认值,例如优化器的学习率,适用于常见用例。这减少了用户在学习阶段的认知负担。
这里的“指导原则”部分内容丰富:
运行神经网络本身所涉及的数学运算(如卷积、矩阵乘法等)被委托给后端。一 Keras 支持的后端有 Tensorflow。
使用代码 sn-p 突出显示差异:
Keras
# 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))
张量流
它不再是代码 sn-p :) 因为您需要定义从存储权重的变量开始的所有内容、层之间的连接、训练循环、创建批量数据以进行训练等.
您可以参考以下链接以了解在 Keras 与 Tensorflow 中训练 MNIST(DL Hello world 示例)的代码复杂性。
https://github.com/keras-team/keras/blob/master/examples/mnist_mlp.py
考虑到 Keras 带来的好处,Tensorflow 已使 tf.keras 成为 Tensorflow 2.0 中的高级 API。
【讨论】:
高级意味着您的交互更接近于编写英语,并且您编写的代码本质上更易于人类理解。
低级别的一个例子是一种语言,您必须在其中执行诸如分配内存、将数据从一个内存地址复制到另一个内存地址等操作。
Keras 被认为是高级别的,因为您只需几行代码即可构建神经网络,该库将为您处理所有复杂性。
在 tensorflow 中(我没用过),你可能要写很多行代码才能实现同样的事情,但可能有更大程度的控制。对于外行来说,阅读 NN 的 tensorflow 代码的意义不如阅读 NN 的 keras 代码。
【讨论】:
Keras 位于 Tensorflow 之上,因此该框架比 Tensorflow 本身相对“更高级别”。
“高级”语言或框架通常定义为相对于低级语言或框架具有更多依赖项或与核心二进制代码距离更远的语言或框架。
例如,jQuery 将被视为比 JavaScript 更高级别,因为它依赖于 Javascript。而 Javascript 将被视为比汇编代码更高级别,因为它被转译为汇编。
【讨论】: