深度神经网络中低精度,低精度

时间:2017-07-27 06:13:10

标签: machine-learning nlp keras

我最近建立了一个POS标签模型。我尝试了LSTM模型并且运行良好,但我仍然想添加一个CNN层来重建原始单词的向量。主要问题是序列的灵活长度,当在RNN中时可以通过掩蔽层来解决,但是CNN不支持。我仍然将原始序列零填充到MAXLEN并将其用作CNN的输入,因为这些额外字的输出仍然大部分为零,并且可以通过掩蔽层来解决。

但与LSTM(0.478,0.871)相比,低损耗和低acc(0.342,0.298)似乎非常糟糕。这是什么主要原因?如何解决弹性长度问题?'

input_seq = Input(shape=(None, input_dim), )
#conv,RELU
conv_out=Conv1D(
   filters=200,
   kernel_size=3,
   padding='same',
   activation='relu',
   use_bias=1,)(input_seq)
#zero pad 2 at head
pad_out=ZeroPadding1D(padding=(2,0))(conv_out)
#max_pool
pool_out=MaxPool1D(pool_size=3,strides=1,padding='valid')(pad_out)

# masking
mask_out = Masking(mask_value=0.0)(pool_out)
# LSTM
lstm_out = LSTM(units=hidden_unit, return_sequences=True)(mask_out)
# drop_out
drop_out = Dropout(drop_out_rate)(lstm_out)
# softmax
output_seq = TimeDistributed(Dense(output_dim, activation="softmax"))(drop_out)

# compile
model = Model(inputs=input_seq, outputs=output_seq)
model.compile(optimizer='rmsprop',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

填充序列的形状是x(Samples,MAXLEN,200),y(Samples,MAXLEN,42),我对x和y的每个序列使用零填充。

0 个答案:

没有答案