1. 数据处理
keras的数据处理都在Keras.preprocessing这个库里面,有text、sequence和image三个子库。
文字的预处理叫做标注(Tokenize)
(1)文字拆分。text_to_word_sequence函数,中文的话第三方组件做分词,例如结巴分词 pip3 install jieba
(2)建立索引。统一的序号和字词对应,集合,形成字典。或者用onr_hot来编码。索引的建立和自己选取的维度会造成哈希碰撞或者稀疏矩阵的问题
(3)序列补齐(Padding)。矩阵的长宽所限,宽度不够的句子肯定要补齐。还有一种补齐的方式是用类似tcp滑动窗口的形式的形式,主要是针对一定顺序的单词(K)拆分成连续的子串(M),K非常大。一般用pad_sequences函数
(4)转换为矩阵。上面序列补齐的pad_sequences就是哟中矩阵化的方式。对于大量的文本用Keras提供的标注类Tokenizer来处理
(5)使用标注类批量处理文本文件。参考(4)
序列数据预处理
对于时间序列和上面的处理方式一致,不论是补齐还是截断,都是将其相邻的连续N个元素连在一起,即跟自然语言处理中的N元语法(N-Gram)模型类似,还有一个对序列数据做跳跃语法处理的(SkipGram)模型,代表是著名的word2vec。
图像数据的处理
Keras.preprocessing.image.ImageDataGenerator类。这个类生成一个数据生成器(Generator)对象,图像的矩阵数据就那么个结构
2. Keras模型
分两类:序列模型(Sequential)和通用模型(Model),他们之间的拓扑结构不同
eg:比如在Keras手册中就举了一个教神经网络看视频进行自然语言问答的例子。在这个例子中,输入数据有两种:一是视频图像;二是自然语言的提问。首先通过构造多层卷积神经网络使用序列模型来对图像编码,然后将这个模型放入TimeDistributed函数中建立视频编码,最后使用LSTM对编码建模,同时对自然语言也进行从文字到向量的转换,在合并两个网络以后,将合并的网络作为参数输入下一个全连接层进行计算,并输出可能的回答。