Keras 官方中文文档发布:François Chollet 感谢翻译团队的努力与贡献
[id_1984902]

[id_638812811]
今年 1 月 12 日,Keras 的作者 François Chollet 在推特上进行了表示。他表示由于中文读者的广泛关注,他已经在 GitHub 上开启了一个 Keras 中文文档项目。昨日,François Chollet 又一次在推特上做出表示。他表示 Keras 官方文档已经基本完成了。他对翻译和校对人员两个多月来的不懈努力表示非常感谢。同时,他希望 Keras 的中文使用者能够继续助力提升文档的质量。
这一次发布的是 Keras 的官方中文文档,它经过了严谨的校对,从而提升了整体质量。然而,该项目仍在推进中,尽管目前已经有很多 API 文档和使用教程上线了,但仍有一部分内容尚未完成。在官方中文文档出现之前,就已经有开发者构建了 Keras 的中文文档。并且,许多读者都在使用 MoyanZitto 等人构建的中文文档。
以下我们将简要介绍这次官方发布的 Keras 文档。
Keras 是用 Python 编写的高级神经网络 API。它能够以 TensorFlow、CNTK 或者 Theano 作为后端运行。Keras 的开发重点在于支持快速的实验。能够以最小的时延将想法转换为实验结果,这是做好研究的关键。
如果你有如下需求,请选择 Keras:
Keras 兼容的 Python 版本包含 Python 2.7 以及 Python 3.6 。
Keras 构建起来很容易,相比其他深度学习库有优势。其一,它提供了一致且简单的 API;其二,它能提供独立且完全可配置的模块,用来构成序列或图表以完成模型;其三,新的模块能很容易地作为新的类和函数进行扩展。这样的表述或许比较抽象,但正如文档所描述的那样,我们甚至能在 30 秒内快速开始使用 Keras。所以,在坑外徘徊的小伙伴可以开心地开始你们的 30 秒。同时,准备入坑 Keras 的小伙伴也可以开心地开始你们的 30 秒。
快速开始:30 秒上手 Keras
Keras 的核心数据结构是 model,它是一种用于组织网络层的方式。其中,最简单的模型是 Sequential 模型,此模型是由多个网络层线性堆叠而成的栈。而对于更为复杂的结构,就应该使用 Keras 的函数式 API,因为它能够允许构建任意的神经网络图。
Sequential 模型如下所示:
from keras.models import Sequential
model = Sequential()
可以简单地使用 .add() 来堆叠模型:
from keras.layers import Dense
model.add(Dense(units=64, activation='relu', input_dim=100))
model.add(Dense(units=10, activation='softmax'))
模型构建完成之后,就能够运用.compile() 去对学习过程进行配置。
model.compile(loss='categorical_crossentropy',
optimizer='sgd',
metrics=['accuracy'])
如果你需要,那么你可以进一步对优化器进行配置优化。Keras 有一个核心原则,即让事情变得较为简单,同时还能让用户在有需求时进行完全的控制,而终极的控制就是源代码的易扩展性。
模型进行编译,其损失函数为 keras 的 categorical_crossentropy 函数。
优化器为 keras 的 SGD 优化器,学习率为0.01, momentum=0.9, nesterov=True))
现在,你可以批量地在训练数据上进行迭代了:
y_train 是一个 Numpy 数组,就像在 Scikit-Learn API 中那样。
模型对 x_train 和 y_train 进行拟合,其中 epochs 被设置为5, batch_size=32)
或者,你可以手动地将批次的数据提供给模型:
模型在一个批次的数据上进行训练,这个批次的数据是 x_batch,对应的标签是 y_batch,然后执行训练操作 model.train_on_batch(x_batch, y_batch)
只需一行代码就能评估模型性能:
loss_and_metrics 等于 model 对 x_test 和 y_test 进行评估,批处理大小为128)
或者对新的数据生成预测:
模型在批量大小为[具体批量大小]的情况下对 x_test 进行预测,得到的结果为 classes 。128)
构建问答系统,构建图像分类模型,构建神经图灵机,或者构建其他任何模型,速度都很快。深度学习背后的思想较为简单,那么它们的实现没必要那么痛苦。
使用简介
Keras 模型的使用通常可分为顺序模型(Sequential)以及 Keras 函数式 API。顺序模型是将多个网络层进行线性堆叠。Keras 函数式 API 则是用于定义复杂模型的方法,像多输出模型、有向无环图,或者具有共享层的模型等。以下将简略介绍这两种模型的使用方式:
1.Keras 顺序模型
你能够通过把层的列表传递给 Sequential 的构造函数,以此来构建一个 Sequential 模型。
from keras.models import Sequential
from keras.layers import Dense, Activation
model = Sequential([
Dense(32, input_shape=(784,)),
Activation('relu'),
Dense(10),
Activation('softmax'),
])
也可以使用 .add() 方法将各层添加到模型中:
model = Sequential()
model.add(Dense(32, input_dim=784))
model.add(Activation('relu'))
展示了一个完整的模型,此模型是基于多层感知器 (MLP) 的 softmax 多分类。
import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.optimizers import SGD
# 生成虚拟数据
import numpy as np
x_train = np.random.random((1000, 20))
y_train 等于 keras.utils 库中的 to_categorical 函数对 np.random.randint 生成的随机整数进行处理后的结果。10, size=(1000, 1)), num_classes=10)
x_test = np.random.random((100, 20))
y_test 等于将 np.random.randint 生成的随机整数转换为分类编码的结果,这个转换是通过 keras.utils.to_categorical 函数来实现的。10, size=(100, 1)), num_classes=10)
model = Sequential()
Dense(64) 是一个全连接层,它拥有 64 个隐藏神经元。
# 在第一层必须指定所期望的输入数据尺寸,在这里是一个 20 维的向量。
model.add(Dense(64, activation='relu', input_dim=20))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy',
optimizer=sgd,
metrics=['accuracy'])
model.fit(x_train, y_train,
epochs=20,
batch_size=128)
模型在测试集 x_test 和 y_test 上进行评估,批次大小为 batch_size,评估结果赋值给 score。128)
2. Keras 函数式 API
利用函数式 API 能够很容易地复用训练好的模型。可以把任何模型当作一个层,接着通过传递一个张量来对其进行调用。需要注意的是,在调用模型时,不但会复用模型的结构,还会复用它的权重。
以下是一个函数式 API 的良好范例:存在有着多个输入以及多个输出的模型。函数式 API 让处理大量相互交织的数据流变得较为容易。
考虑下面的模型。我们要预测 Twitter 上一条新闻标题的转发数和点赞数。模型的主要输入是新闻标题本身,也就是一系列词语。不过,为了增加趣味,我们的模型添加了其他辅助输入来接收额外数据,像新闻标题的发布时间等。该模型还将通过两个损失函数进行监督学习。在模型中较早地使用主损失函数,这是深度学习模型的一种良好正则化方式。
模型结构如下图所示:
我们使用函数式 API 来达成它。详细解释可查看中文文档。
from keras.layers import Input, Embedding, LSTM, Dense
from keras.models import Model
接收一个序列,这个序列包含 100 个整数。每个整数的范围在 1 到 10000 之间。
我们可以通过传递一个参数来为任何层命名,这个参数就是 `name` 。
main_input = Input(shape=(100,), dtype='int32', name='main_input')
Embedding 层把输入序列进行编码,编码后的结果是一个稠密向量的序列,并且每个向量的维度是 512。
x = Embedding(output_dim=512, input_dim=10000, input_length=100)(main_input)
LSTM 层具有将向量序列转换为单个向量的功能,此单个向量包含着整个序列的上下文信息。
lstm_out = LSTM(32)(x)
auxiliary_output = Dense(1, activation='sigmoid', name='aux_output')(lstm_out)
该形状为( 。5,), name='aux_input')
x 等于将 lstm_out 和 auxiliary_input 进行连接的结果,即通过 keras.layers.concatenate 函数将它们组合在一起。
# 堆叠多个全连接网络层
x = Dense(64, activation='relu')(x)
x = Dense(64, activation='relu')(x)
x = Dense(64, activation='relu')(x)
# 最后添加主要的逻辑回归层
main_output = Dense(1, activation='sigmoid', name='main_output')(x)
模型由输入部分[主输入,辅助输入]和输出部分[主输出,辅助输出]组成,即 model = Model 且其输入为[主输入,辅助输入],输出为[主输出,辅助输出]
model.compile(optimizer='rmsprop', loss='binary_crossentropy',
loss_weights=[1., 0.2])
模型对[标题数据,额外数据]进行拟合,同时对[标签,标签]进行拟合。
epochs=50, batch_size=32)
model.compile(optimizer='rmsprop',
loss={'main_output': 'binary_crossentropy', 'aux_output': 'binary_crossentropy'},
loss_weights={'main_output': 1., 'aux_output': 0.2})
# 然后使用以下方式训练:
model.fit({'main_input': headline_data, 'aux_input': additional_data},
{'main_output': labels, 'aux_output': labels},
epochs=50, batch_size=32)
以上是一个简单案例。Keras 函数式 API 有很多应用案例。这些案例包括层级共享、有向无环图和残差网络等顶尖视觉模型。读者可以继续阅读中文文档以了解更多。
文档的后一部分主要描述 Keras 中常用的一些内容,包含 Keras 模型、层级函数、预处理过程、损失函数、最优化方法、数据集和可视化等。这些在实际使用时很多时候可以去查找相关 API 及其对应实现的功能,当然对于最基本的 API 我们是需要了解的。以下会简要介绍 Keras 的模型和层级 API,对于其他的模块,需查阅原中文文档。
Keras 模型
Keras 中有两类模型,一类是顺序模型,另一类是使用函数式 API 的 Model 类模型。这些模型具备许多共同的方法:
config = model.get_config()
模型是通过配置来创建的,创建后的模型为 model,即 model = Model.from_config(config) 。
# or, for Sequential:
创建了一个名为 model 的对象,该对象是通过 Sequential 类的 from_config 方法,使用给定的配置 config 来创建的。
from keras.models import model_from_json
json_string = model.to_json()
模型通过从 JSON 字符串中进行加载而被创建,创建后的模型即为 model = model_from_json(json_string) 所表示的模型。
from keras.models import model_from_yaml
yaml_string = model.to_yaml()
使用 yaml_string 构建了 model,构建出的模型为 model
Keras 层级
所有 Keras 层都有很多共同的函数:
layer = Dense(32)
config = layer.get_config()
重建的层 = Dense.通过配置(config)来创建
如果一个层是单个节点(也就是它不是共享层),那么你能够获取它的输入张量、输出张量、输入尺寸以及输出尺寸。
如果层有多个节点,您可以使用以下函数:
这些是 Keras 模型与层级的基本函数,文档的中心内容包含这部分以及下面描述的 API 用途与参数,其中涵盖了完整模型所需的各个模块,像数据、预处理、网络架构、训练、评估和可视化等。然而,这部分我们不会进行介绍,因为很多时候只有在遇到未知函数时我们才会去详细查阅。
Keras 官方中文文档,欢迎各位徘徊者入坑。