Как вернуть предсказанный текст модели Keras обратно в список слов? - PullRequest
0 голосов
/ 14 апреля 2019

Я пытаюсь построить нейронную сеть автоэнкодера для поиска выбросов в одном столбце списка текста. Ввод текста выглядит следующим образом:

about_header.png
amaze_header_2.png
amaze_header.png
circle_shape.xml
disableable_ic_edit_24dp.xml
fab_label_background.xml
fab_shadow_black.9.png
fab_shadow_dark.9.png
fab_shadow_light.9.png
fastscroller_handle_normal.xml
fastscroller_handle_pressed.xml
folder_fab.png

Проблема в том, что я на самом деле не знаю, что я делаю, я использую Keras, и я преобразовал эти строки текста в матрицу, используя Keras Tokenizer, чтобы их можно было подавать в модель Keras. так что я могу подобрать и предсказать их.

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

Весь мой код выглядит следующим образом:

import sys
from keras import Input, Model
import matplotlib.pyplot as plt
from keras.layers import Dense
from keras.preprocessing.text import Tokenizer

with open('drawables.txt', 'r') as arquivo:
    dados = arquivo.read().splitlines()

tokenizer = Tokenizer(filters='', nb_words=None)
tokenizer.fit_on_texts(dados)

x_dados = tokenizer.texts_to_matrix(dados, mode="count")

tamanho = len(tokenizer.word_index) + 1
tamanho_comprimido = int(tamanho/1.25)

x = Input(shape=(tamanho,))

# Encoder
hidden_1 = Dense(tamanho_comprimido, activation='relu')(x)
h = Dense(tamanho_comprimido, activation='relu')(hidden_1)

# Decoder
hidden_2 = Dense(tamanho, activation='relu')(h)
r = Dense(tamanho, activation='sigmoid')(hidden_2)

autoencoder = Model(input=x, output=r)

autoencoder.compile(optimizer='adam', loss='mse')

history = autoencoder.fit(x_dados, x_dados, epochs=25, shuffle=False)

plt.plot(history.history["loss"])
plt.ylabel("Loss")
plt.xlabel("Epoch")
plt.show()

encoded = autoencoder.predict(x_dados)

result = ???????

1 Ответ

2 голосов
/ 14 апреля 2019

Вы можете декодировать текст, используя оригинальную кодировку tokenizer.sequences_to_texts.Это принимает список целочисленных последовательностей.Чтобы получить последовательности вы можете использовать np.argmax.

encoded_argmax  = np.argmax(encoded, axis=1)
text = tokenizer.sequences_to_texts([encoded_argmax])  # since your output is just a number needs to convert into list
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...