Keras 中易于使用的 Connectionnist 时间分类
项目描述
CTCModel:Keras 的 Connectionnist 时间分类实现
描述
CTCModel 使使用 Connectionnist 时间分类方法的 RNN 训练完全透明。
它直接继承自传统的 Keras 模型,并使用 TensorFlow 实现 CTC 损失和解码功能。
依赖项
- 喀拉斯
- 张量流
- 六(仅作示例)
安装
$ pip install keras-ctcmodel
或者
$ git clone https://github.com/cyprienruffino/CTCModel
$ cd CTCModel $ python setup.py install --user
入门
Keras 中带有 CTCModel 的标准循环神经网络示例。
from keras.layers import LSTM, TimeDistributed, Dense, Activation, Input
from keras.optimizers import Adam
from numpy import zeros
from keras_ctcmodel.CTCModel import CTCModel as CTCModel
h_features = 10
nb_labels = 10
input_layer = Input((None, h_features))
lstm0 = LSTM(128, return_sequences=True)(input_layer)
lstm1 = LSTM(128, return_sequences=True)(lstm0)
dense = TimeDistributed(Dense(nb_labels))(lstm1)
output_layer = Activation("sigmoid")(dense)
model = CTCModel([input_layer], [output_layer])
model.compile(optimizer=Adam(lr=1e-4))
model.summary()
model.save_model("./")
loaded = CTCModel(None, None)
loaded.load_model("./", optimizer=Adam(lr=1e-4))
loaded.summary()
Keras 模型的标准输入 x 和 y 在这里定义不同,其中 x 是观察值,y 是标签。在 CTCModel 中,您必须提供为 x:
- 输入观察
- 标签_
- 输入序列的长度
- 标签序列的长度
在这里,y 没有以标准方式使用,必须为 Keras 方法定义(作为标签或长度等于标签长度的空结构)。让x_train、y_train、x_train_len和y_train_len这些术语。拟合、评估和预测方法可以使用如下:
model.fit(x=[x_train,y_train,x_train_len,y_train_len], y=zeros(nb_train), batch_size=64)
print(model.evaluate(x=[x_test,y_test,x_test_len,y_test_len], batch_size=64))
model.predict([x_test, x_test_len])
例子
文件 example.py 是使用 CTCModel 的示例。数据集由数字序列组成。这是来自 MNIST 数据集 [Lecun 98] 的图像,它们已被连接以获得观察序列和标签序列。
该示例展示了如何使用标准拟合、预测和评估方法。根据观察和标签序列,我们为每个数据集创建两个列表,其中包含每个序列的长度,一个用于观察,一个用于标签。然后填充数据以便为 Keras 方法提供固定大小的输入。
使用 CTCModel 的拟合方法定义和训练具有双向层的标准递归神经网络。然后执行评估方法来计算测试集上的损失、标签错误率和序列错误率。因此评估方法的输出是一个包含每个度量值的列表。最后,应用预测方法来获得对测试集的预测。打印第一个预测序列,以便将预测标签与基本事实进行比较。
在引擎盖下
CTCModel 的工作原理是向循环网络添加三个额外的输出层,用于计算 CTC 损失、解码和使用用于序列分析的标准度量(序列错误率和标签错误率)进行评估。通过使用标准的 Keras 方法,例如fit、predict和evaluate ,每一个都可以盲目地应用。请注意,基于生成器的方法已经定义并且可以以标准方式使用,前提是生成器返回的输入 x 和标签 y 具有上述特定结构。
除了三个特定的层外,CTCModel 作为标准的 Keras 模型工作,大多数被覆盖的方法只是选择正确的输出层并调用相关的 Keras 模型方法。还有其他方法可以保存或加载模型参数和其他方法以获取特定计算,例如使用 get_loss 的损失或使用get_probas的输入概率(以及相关的on_batch和生成器方法)。
学分和许可证
CTCModel 由 Cyprien RUFFINO 和 Yann SOULLARD 在诺曼底大学 LITIS 实验室 ( http://www.litislab.fr ) 在 Thierry PAQUET 的监督下开发。
CTCModel 受 MIT 许可条款约束。
CTCModel 托管在 PyPI ( https://pypi.org/project/keras-ctcmodel/ )
如果您将 CTCModel 用于研究目的,请考虑在您的论文中添加以下引文:
@misc{ctcmodel,
author = {Soullard, Yann and Ruffino, Cyprien and Paquet, Thierry},
title = {{CTCModel: Connectionist Temporal Classification in Keras}},
year = {2018},
ee = {https://arxiv.org/abs/1901.07957},
archivePrefix = {arXiv}
}
参考
F. Chollet 等人。Keras:Python 深度学习,https://github.com/keras-team/keras,2015年
。A. Graves、S. Fernández、F. Gomez、J. Schmidhuber。连接主义时间分类:用循环神经网络标记未分段的序列数据。在第 23 届机器学习国际会议论文集上(第 369-376 页)。ACM,2006 年 6 月
。LeCun, Y. (1998)。MNIST 手写数字数据库。http://yann.lecun.com/exdb/mnist/。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
内置分布
keras_ctcmodel -1.0.0rc3.tar.gz 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 1f51cf1f59fbafa1ac551db4fbfa4cc3c59d010d5a57b7f7c022476e948b5f1e |
|
| MD5 | 87581723f3e4c3c6a1ac788ce031c2a1 |
|
| 布莱克2-256 | 1ef59d5a4978d4f73ced22a450301c1dc211cc146cff678e754734af668c0537 |
keras_ctcmodel -1.0.0rc3-py3-none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 91bcdcf853e810ec7656aa2c44943b64c7ea7fa6c81248f145e0423fb6183378 |
|
| MD5 | 90ab52c159ce728697e07bfec77d9b5c |
|
| 布莱克2-256 | b49502881c7be9bc17ffb4d53e628a161fd6e9151d87b82ddac653e5276a6f06 |