#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 предоставляет отличный учебник!