Дешифратор с keras

#python #tensorflow #keras

#python #тензорный поток #keras

Вопрос:

Я создаю дешифратор с нейронной сетью с помощью python3, это то, что я сделал до сих пор:

 from sklearn.model_selection import train_test_split
import numpy as np
import keras
from keras.models import Sequential
from keras.layers.core import Dense
import pandas as pd
from sklearn.preprocessing import LabelEncoder
import csv

LE = LabelEncoder()

dado = pd.read_csv('teste.csv', header=None)
print("codigo:",dado)
dado = LE.fit_transform(dado)

np.random.seed(2)

classification = 26

dataset = pd.read_csv('base.csv', header=None)

print("letras:",dataset[0])
print("n")

print("codigo:",dataset[1])
print("n")

dataset[0] = LE.fit_transform(dataset[0])
dataset[1] = LE.fit_transform(dataset[1])


print("letras:",dataset[0])
print("n")
print("codigo:",dataset[1])


# Define dados de treinamento
X = dataset[0].values

#print("x: ",X)
# Define a saida padrao
Y = dataset[1].values
#print("ny: ",Y)

x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.66, random_state=5)

#print("x_train:", x_train,"n x_test:", x_test, "ny_train:",y_train,"ny_test:",y_test)
                                                

y_train = keras.utils.to_categorical(y_train-1, classification)
y_test = keras.utils.to_categorical(y_test-1, classification)

#print("ny_train:",y_train,"ny_test: ",y_test)

# A rede será uma MLP com duas entradas, uma camada intermediária com 3 neurônios e
# uma camada de saída com um neurônio.
model = Sequential()
model.add(Dense(26, input_dim=1, activation='relu'))
model.add(Dense(classification, activation='softmax'))

# Mostra os parâmetros da RNA
#model.summary()

# 
model.compile(loss='mean_squared_error', optimizer='sgd', metrics=['binary_accuracy'])
print("OK")

# Executa o treinamento da MLP
model.fit(x_train, y_train, batch_size=1, epochs=1000, validation_data=(x_test, y_test))

# Executa a MLP após o treinamento
#print(model.predict(X))
#print(model.predict(dado))


prediction =model.predict(dado)

print("prediction: ",prediction)



#pred_name = dado[np.argmax(prediction)]
  

Я использую базовый файл .csv для обучения:

  A,'@'
 B,'#'
 C,'$'
 D,'%'
 E,'amp;'
 F,'*'
 G,'1'
 H,'2'
 I,'3'
 J,'4'
 K,'5'
 L,'6'
 M,'7'
 N,'8'
 O,'9'
 P,'0'
 Q,a
 R,b
 S,c
 T,d
 U,e
 V,f
 X,g
 W,h
 Y,i
 Z,j
  

и я хочу расшифровать, например, это сообщение:

 '@e*c$amp;7e3d96amp;1@7'
  

по-видимому, обучение правильное, и я получаю значение predict (), я добавлю некоторые из них:

  [1.67683919e-03 1.00730495e-05 3.00646033e-02 3.47359193e-04
  7.34448224e-10 2.07794699e-07 6.91458354e-07 9.16662440e-02
  1.12631470e-01 1.55544106e-03 1.33347882e-07 1.26970816e-08
  1.17909266e-07 2.84538746e-01 2.04548487e-04 4.61375207e-01
  4.84018710e-06 6.99752900e-06 1.09326131e-04 4.26771911e-03
  2.73230253e-03 1.45343272e-03 1.31152268e-03 5.98493521e-09
  3.70860286e-03 2.33352231e-03]
 [1.35914271e-03 6.58475028e-06 2.74186116e-02 2.63669877e-04
  3.23479521e-10 1.15685609e-07 4.04968659e-07 8.76267478e-02
  1.08614832e-01 1.25834497e-03 7.29217859e-08 6.29246166e-09
  6.41369695e-08 2.85867929e-01 1.51908389e-04 4.74235952e-01
  3.07537766e-06 4.51551887e-06 7.91385319e-05 3.59652541e-03
  2.26239045e-03 1.17159961e-03 1.05227530e-03 2.87827917e-09
  3.10653565e-03 1.91950181e-03]]
  

это входной код зашифрованного файла:

 dado = pd.read_csv('teste.csv', header=None)
dado = LE.fit_transform(dado)
  

как мне отобразить результат predict () обратно в символы, чтобы расшифровать сообщение?

Ответ №1:

Вы не можете просто превратить данные обратно в исходные, передав их по сети в обратном направлении. Вам нужно обучить другую нейронную сеть преобразовывать данные обратно в исходные. Передайте вторую сеть своей y_train и сделайте так, чтобы она предсказывала ваше x_train подобное:

 another_model.fit(y_train, x_train, ...)
  

Единственным другим способом сделать это было бы использовать GAN, по которому TensorFlow предоставляет отличный учебник!