Я строю сеть автоэнкодеров для нахождения выбросов в списке из одного столбца текста.
Я подбираю каждый символ, преобразовываю его в ASCII и помещаю в массив.
Каждая строка массива является строкой моего ввода, а каждый элемент массива является целочисленным представлением кода ascii для символа.
Каждый массив имеет размер самого большого элемента в моем массиве, более мелкие дополняются нулями справа.
Таким образом, я получаю Numpy Arrays с кодами ascii и создаю сеть автоэнкодеров, чтобы найти те, которые не следуют шаблону, которые отличаются от остальных.
Весь мой код:
import sys
from keras import Input, Model
import matplotlib.pyplot as plt
from keras.layers import Dense
import numpy as np
from pprint import pprint
from google.colab import drive
# Monta o arquivo do Google Drive
drive.mount('/content/drive')
with open('/content/drive/My Drive/Colab Notebooks/drawables.txt', 'r') as arquivo:
dados = arquivo.read().splitlines()
# Define uma função para pegar uma lista e retornar um inteiro com o tamanho do
# maior elemento
def tamanho_maior_elemento(lista):
maior = 0
for elemento in lista:
tamanho_elemento = len(elemento)
if tamanho_elemento > maior:
maior = tamanho_elemento
return maior
# Define uma função para pegar uma lista e o tamanho do maior elemento e
# retornar uma lista contendo uma outra lista com cada caractere convertido para
# ascii, antes de converter são adicionados zeros a direita para eles ficarem
# com o mesmo tamanho do maior elemento.
def texto_para_ascii(lista, tamanho_maior_elemento):
#para cada linha
lista_ascii = list()
for elemento in lista:
elemento_ascii_lista = list()
#coloca zeros do lado da string
elemento_com_zeros = elemento.ljust(tamanho_maior_elemento, "0")
for caractere in elemento_com_zeros:
elemento_ascii_lista.append(ord(caractere))
lista_ascii.append(elemento_ascii_lista)
return lista_ascii
def ascii_para_texto(lista):
#para cada linha
lista_ascii = list()
for elemento in lista:
elemento_ascii_lista = list()
for caractere in elemento:
elemento_ascii_lista.append(chr(caractere))
elemento_ascii_string = "".join(elemento_ascii_lista)
lista_ascii.append(elemento_ascii_string)
return lista_ascii
# Pega o tamanho do maior elemento
tamanho_maior_elemento = tamanho_maior_elemento(dados)
# Pega o tamanho da lista
tamanho_lista = len(dados)
# Converte os dados para ascii
dados_ascii = texto_para_ascii(dados, tamanho_maior_elemento)
# Converte a linha de dados em ascii para um array numpy
np_dados_ascii = np.array(dados_ascii)
# Define o tamanho da camada comprimida
tamanho_comprimido = int(tamanho_maior_elemento/5)
# Cria a camada de Input com o tamanho do maior elemento
dados_input = Input(shape=(tamanho_maior_elemento,))
# Cria uma camada escondida com o tamanho da camada comprimida
hidden = Dense(tamanho_comprimido, activation='relu')(dados_input)
# Cria a camada de saida com o tamanho do maior elemento
output = Dense(tamanho_maior_elemento, activation='relu')(hidden)
#resultado = Dense(tamanho_maior_elemento, activation='sigmoid')(output)
resultado = Dense(tamanho_maior_elemento)(output)
# Cria o modelo
autoencoder = Model(input=dados_input, output=resultado)
# Compila o modelo
autoencoder.compile(optimizer='adam', loss='mse')
# Faz o fit com os dados
history = autoencoder.fit(np_dados_ascii, np_dados_ascii, epochs=20)
# Plota o gráfico das epochs
plt.plot(history.history["loss"])
plt.ylabel("Loss")
plt.xlabel("Epoch")
plt.show()
# Pega a saída do predict
predict = autoencoder.predict(np_dados_ascii)
# What now?
Что я хочу знать, так это то, что я предсказал значение, каков следующий шаг? Я имею в виду, что функция model.predict из keras вернула мне массив значений с плавающей точкой. Как я могу вернуть его в символы ascii, чтобы я мог видеть предсказанный текст?
Я не знаю, правильно ли я сказал, английский не мой основной язык, и я совершенно потерян с этим.