我正在用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)]
我正在使用base.csv来训练:
A,'@'
B,'#'
C,'$'
D,'%'
E,'&'
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$&7e3d96&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()结果显示回字符以破译消息
您不能通过向后通过网络将数据转换回原始数据。你需要训练另一个神经网络将数据转换回原始数据。向第二个网络提供
y_train
并使其预测x_train
如下所示:唯一的其他方法是使用一个GAN,TensorFlow提供了一个很好的教程
相关问题 更多 >
编程相关推荐