Классификатор RNN, как показать вес, чтобы понять, как сеть Neraul принимает решение - PullRequest
0 голосов
/ 11 июня 2018

Я использую RNN для создания простого классификатора, чтобы классифицировать абзац слов в разных каталогах.у него есть слой внедрения, за которым следует RNN, а затем показывается плотный слой, как показано ниже.

Он может правильно прогнозировать, но кроме прогноза, как я могу узнать, почему RNN получил это предсказание, например, что такоевес в каждом слове абзаца.

Какие слова заставили RNN полагать, что он принадлежит определенному каталогу?

model = Sequential()

embedding_size = 300

model.add(Embedding(input_dim=num_words+1, output_dim=embedding_size, input_length=max_tokens, name='layer_embedding', weights=embedding_matrix],trainable=True))

return_sequences=True))

model.add(Bidirectional(GRU(32,return_sequences=True)))
model.add(Bidirectional(GRU(32,return_sequences=True)))
model.add(Bidirectional(GRU(32)))
model.add(Dense(numdense, activation='sigmoid'))

model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])

1 Ответ

0 голосов
/ 11 июня 2018

В этом посте на GitHub предлагается способ просмотра имени параметров при их печати:

for e in zip(model.layers[0].trainable_weights, model.layers[0].get_weights()):
   print('Param %s:\n%s' % (e[0],e[1]))
...