Keras是什么模型.预测退货?

2024-09-29 23:27:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建一个自动编码器网络,用于在一列文本列表中查找异常值。在

我提取每个字符,将其转换为ASCII,并将它们放入一个数组中。在

数组的每一行是我输入的一行,数组中的每个元素都是字符的ascii码的整数表示。在

每个数组都有我数组中最大元素的大小,较小的元素在右边用零填充。在

所以我最终得到了带有ascii代码的Numpy数组,并且我创建了一个自动编码器网络,这样我就可以找到那些不遵循模式的,从其他模式中脱颖而出的。在

我的全部代码是:

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?

我想知道的是,我已经预测了价值,下一步怎么办?我是说模型.预测函数从keras返回了一个浮点值数组。如何将其恢复为ascii字符以便可以看到它预测的文本?在

我不知道我说得对不对,英语不是我的主要语言,我完全被这句话迷住了。在


Tags: importcomnpasciiplt数组dodense
1条回答
网友
1楼 · 发布于 2024-09-29 23:27:40

你可以把你的ASCII数字转换回文本,你可以可视化你的结果。使用^{},一个python内置函数。它需要输入0到255范围内的整数值。所以,确保你的模型预测了这个范围内的值。在

predict = np.random.uniform(0,255,(1,100)) # Replace with your original prediction
predict_text=[]
for i in range(predict.shape[1]):
  predict_text.append(chr(int(predict[0][i])))
predict_text =  np.expand_dims(np.asarray(predict_text),axis=0)

相关问题 更多 >

    热门问题