from keras.preprocessing.sequence import pad_sequences
keras只能接受长度相同的序列输入。因此如果目前序列长度参差不齐,这时需要该模块
该函数是将序列转化为经过填充以后的一个长度相同的新序列新序列
Sequential更准确的应该理解为堆叠,通过堆叠许多层,构建出深度神经
Sequential模型的核心操作是添加layers(图层),以下展示如何将一些最流行的图层添加到模型中:
如下代码向模型添加一个带有64个大小.3 * 3的过滤器的卷积层:
from keras.models import Sequential from keras.layers import Conv2D model = Sequential() model.add( Conv2D(64, (3, 3), activation='relu') )
嵌入层将正整数(下标)转换为具有固定大小的向量,如 [ [4],[20] ] ->[ [0.25,0.1],[0.6,-0.2] ],Embedding层只能作为模型的第一层
from keras.layers import Embedding embedding_layer = Embedding(VOCAB_SIZE + 1, EMBEDDING_DIM, weights=[embedding_matrix], input_length=TIME_STAMPS, trainable=False, mask_zero=True)
这里的参数解释一下:
-
input_dim:大或等于0的整数,字典长度,即输入数据最大下标+1
-
output_dim:大于0的整数,代表全连接嵌入的维度
-
init:初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的Theano函数。该参数仅在不传递
weights
参数时有意义。 -
weights:权值,为numpy array的list。该list应仅含有一个如(input_dim,output_dim)的权重矩阵
-
W_regularizer:施加在权重上的正则项,为WeightRegularizer对象
-
W_constraints:施加在权重上的约束项,为Constraints对象
-
mask_zero:布尔值,确定是否将输入中的‘0’看作是应该被忽略的‘填充’(padding)值,该参数在使用递归层处理变长输入时有用。设置为
True
的话,模型中后续的层必须都支持masking,否则会抛出异常 -
input_length:当输入序列的长度固定时,该值为其长度。如果要在该层后接
Flatten
层,然后接Dense
层,则必须指定该参数,否则Dense
层的输出维度无法自动推断。 -
dropout:0~1的浮点数,代表要断开的嵌入比例
关于Embedding层,请参考
from keras.models import Sequential from keras.layers import Bidirectional, LSTM model.add( Bidirectional( LSTM(128, return_sequences=True) ) )
return_sequences: 如果为True的话,只返回最后一个状态的输出,是一个(samples,output_dim)2D张量,如果是False,则是返回所有序列状态的输出,是一个(samples,timesteps,output_dim)3D张量
LSTM中的128,即是units参数,表示输出向量维度,请参考
关于其过程,请参考,下面的图片来自该博客:
Dense就是常用的全连接层
from keras_contrib.layers.crf import CRF crf_layer = CRF(self.NUM_CLASSES, sparse_target=True) model.add(crf_layer)
八、compile