def __init__(self, word_index, embedding_matrix):
embedding_layer_q = Embedding(len(word_index) + 1,
EMBEDDING_DIM,
weights=[embedding_matrix],
input_length=MAX_SEQUENCE_LENGTH_Q,
trainable=False)
embedding_layer_a = Embedding(len(word_index) + 1,
EMBEDDING_DIM,
weights=[embedding_matrix],
input_length=MAX_SEQUENCE_LENGTH_A,
trainable=False)
question = Input(shape=(MAX_SEQUENCE_LENGTH_Q,), dtype='int32', name='question')
answer = Input(shape=(MAX_SEQUENCE_LENGTH_A,), dtype='int32', name='answer')
embedded_question = embedding_layer_q(question)
embedded_answer = embedding_layer_a(answer)
conv_blocksA = []
conv_blocksQ = []
for sz in [3,5]:
conv = Convolution1D(filters=20,
kernel_size=sz,
padding="valid",
activation="relu",
strides=1)(embedded_answer)
conv = MaxPooling1D(pool_size=2)(conv)
conv = Flatten()(conv)
conv_blocksA.append(conv)
for sz in [5,7, 9]:
conv = Convolution1D(filters=20,
kernel_size=sz,
padding="valid",
activation="relu",
strides=1)(embedded_question)
conv = MaxPooling1D(pool_size=3)(conv)
conv = Flatten()(conv)
conv_blocksQ.append(conv)
z = Concatenate()(conv_blocksA + conv_blocksQ)
z = Dropout(0.5)(z)
z = Dense(100, activation="relu")(z)
softmax_c_q = Dense(2, activation='softmax')(z)
self.model = Model([question, answer], softmax_c_q)
opt = Nadam()
self.model.compile(loss='categorical_crossentropy',
optimizer=opt,
metrics=['acc'])
评论列表
文章目录