Red neuronal de memoria
La imagen original se ve así :
Ahora que la imagen se ve así, es más fácil de entender. (Por supuesto, es solo una realización de una sola capa)
La implementación de keras es la siguiente:
input_base = layers.Input(shape=(self.sent_len*5,))
input_question = layers.Input(shape=(self.sent_len,))
x_base_embeding = layers.Embedding(input_dim=self.word_dic_len, output_dim=self.embeding_len)(input_base)
x_q_embeding = layers.Embedding(input_dim=self.word_dic_len, output_dim=self.embeding_len)(input_question)
x_base = layers.Bidirectional(layers.LSTM(units=self.unit_len, return_sequences=True))(x_base_embeding)
x_q = layers.Bidirectional(layers.LSTM(units=self.unit_len, return_sequences=True))(x_q_embeding)
x_base2 = layers.Bidirectional(layers.LSTM(units=15 ,return_sequences=True))(x_base_embeding)
w2w_dot = layers.dot([x_base, x_q], axes=(2,2))
w2w_dot_soft = layers.Dense(activation="softmax", units=30)(w2w_dot)
base_sum = layers.add([x_base2, w2w_dot_soft])
base_sum = layers.Permute((2,1))(base_sum)
total = layers.concatenate([base_sum, x_q], axis=-1) #转换
predict_lstm = layers.Bidirectional(layers.LSTM(units=128))(total)
predict = layers.Dense(units=self.class_num, activation="softmax")(predict_lstm)
model = Model([input_base, input_question], predict)
model.compile(optimizer='rmsprop', loss='categorical_crossentropy',
metrics=['accuracy'])
model.summary()
Resumen: La
red de memoria puede verse como un marco para el control de calidad o la clasificación.