专栏名称: 机器之心
目录
相关文章推荐
爱可可-爱生活  ·  【[393星]CockroachDB ... ·  昨天  
量子位  ·  “Transformer就像燃油车,atte ... ·  昨天  
爱可可-爱生活  ·  【[109星]PRefLexOR:基于偏好的 ... ·  2 天前  
AIGC开放社区  ·  GPU效率暴涨!DeepSeek开源Deep ... ·  2 天前  
AIGC开放社区  ·  GPU效率暴涨!DeepSeek开源Deep ... ·  2 天前  
爱可可-爱生活  ·  本文创新性地提出循环Transformer架 ... ·  2 天前  
51好读  ›  专栏  ›  机器之心

终于!Keras官方中文版文档正式发布了

机器之心  · 掘金  · AI  · 2018-03-07 05:14

正文

终于!Keras官方中文版文档正式发布了

今年 1 月 12 日,Keras 作者 François Chollet‏ 在推特上表示因为中文读者的广泛关注,他已经在 GitHub 上展开了一个 Keras 中文文档项目。而昨日,François Chollet‏ 再一次在推特上表示 Keras 官方文档已经基本完成!他非常感谢翻译和校对人员两个多月的不懈努力,也希望 Keras 中文使用者能继续帮助提升文档质量。
这一次发布的是 Keras 官方中文文档,它得到了严谨的校对而提升了整体质量。但该项目还在进行中,虽然目前已经上线了很多 API 文档和使用教程,但仍然有一部分内容没有完成。其实早在官方中文文档出现以前,就有开发者构建了 Keras 的中文文档,而且很多读者都在使用 MoyanZitto 等人构建的中文文档。
  • Keras 官方文档:https://keras.io/zh/
  • Keras 第三方文档:http://keras-cn.readthedocs.io/en/latest/
以下我们将简要介绍这次官方发布的 Keras 文档。
Keras 是一个用 Python 编写的高级神经网络 API,它能够以 TensorFlow、CNTK、或者 Theano 作为后端运行。Keras 的开发重点是支持快速的实验。能够以最小的时延把你的想法转换为实验结果,是做好研究的关键。

如果你有如下需求,请选择 Keras:
  • 允许简单而快速的原型设计(用户友好,高度模块化,可扩展性)。
  • 同时支持卷积神经网络和循环神经网络,以及两者的组合。
  • 在 CPU 和 GPU 上无缝运行与切换。
Keras 兼容的 Python 版本: Python 2.7-3.6。
Keras 相对于其它深度学习库非常容易构建:首先它提供一致和简单的 API;其次,它提供独立的、完全可配置的模块构成序列或图表以完成模型;最后,作为新的类和函数,新的模块很容易扩展。这样说可能比较抽象,但正如文档中所描述的,我们甚至在 30 秒就能快速上手 Keras。所以在坑外徘徊或准备入坑 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 的一个核心原则是使事情变得相当简单,同时又允许用户在需要的时候能够进行完全的控制(终极的控制是源代码的易扩展性)。
model.compile(loss=keras.losses.categorical_crossentropy,
              optimizer=keras.optimizers.SGD(lr=0.01, momentum=0.9, nesterov=True))
现在,你可以批量地在训练数据上进行迭代了:
# x_train and y_train are Numpy arrays --just like in the Scikit-Learn API.
model.fit(x_train, y_train, epochs=5, batch_size=32)
或者,你可以手动地将批次的数据提供给模型:
model.train_on_batch(x_batch, y_batch)
只需一行代码就能评估模型性能:
loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128)
或者对新的数据生成预测:
classes = model.predict(x_test, batch_size=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 = keras.utils.to_categorical(np.random.randint(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)
score = model.evaluate(x_test, y_test, batch_size=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)

auxiliary_input = Input(shape=(5,), name='aux_input')
x = keras.layers.concatenate([lstm_out, auxiliary_input])

# 堆叠多个全连接网络层
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(inputs=[main_input, auxiliary_input], outputs=[main_output, auxiliary_output])

model.compile(optimizer='rmsprop', loss='binary_crossentropy',
              loss_weights=[1., 0.2])


model.fit([headline_data, additional_data], [labels, labels],
          epochs=50, batch_size=32)

model.compile(optimizer='rmsprop'






请到「今天看啥」查看全文