我使用pybrain构建了神经网络。 我想要做的是创建一个可以处理输入错误的字典。
我构建了规范化的数据集,创建了网络,用我的数据集训练它,直到收敛。
现在,当我测试它时,我的结果是随机的。我尝试了一些新的输入,以及用于训练网络的所有原始输入。什么都没有找到正确的解决方案。
提前致谢!
'''
Created on Dec 8, 2016
@author:
'''
from pybrain.structure import FeedForwardNetwork
from pybrain.structure import LinearLayer, SigmoidLayer
from pybrain.structure import FullConnection
from pybrain.datasets import SupervisedDataSet
from pybrain.supervised.trainers import BackpropTrainer
from pybrain.tools.shortcuts import buildNetwork
from pybrain.supervised.trainers import RPropMinusTrainer
num_of_definitions = 7
real_input = [["rouge", "red", "rot"],
["jelov", "yellow", "yelov"],
["wit", "white", "wajt"],
["green", "grun", "groen"],
["bleu,", "blue", "blau"],
["color", "couleur", "kleur"],
["brown", "bruin", "braun"]]
real_output = [["crvena"], ["zuta"], ["bijela"],
["zelena"], ["plava"], ["boja"], ["smeda"]]
def normalize_polje(polje):
novo_polje = [[]]
for i in range(0, num_of_definitions):
for j in range(0, len(polje[0])):
novo_polje[i].append(normalize_string(polje[i][j]))
novo_polje.append([])
novo_polje.pop()
return novo_polje
def normalize_string(st):
d = 0.0
for i in range(0, len(st)):
d += ord(st[i]) / 122.0
d /= len(st)
return d
def output_appr(d):
diff = 1.0
t_diff = 0.0
for i in range(0, len(output)):
t_diff = abs(output[i][0] - d)
if t_diff < diff:
diff = t_diff
index = i
return real_output[index][0]
def input_appr(d):
diff = 1.0
index1 = 0
index2 = 0
for i in range(0, len(iinput)):
for j in range(0, len(iinput[i])):
t_diff = abs(iinput[i][j] - d)
if t_diff < diff:
diff = t_diff
index1 = i
index2 = j
return real_input[index1][index2]
iinput = normalize_polje(real_input)
output = normalize_polje(real_output)
n = FeedForwardNetwork()
inLayer = LinearLayer(3)
hiddenLayer = SigmoidLayer(3)
outLayer = LinearLayer(1)
n.addInputModule(inLayer)
n.addModule(hiddenLayer)
n.addOutputModule(outLayer)
in_to_hidden = FullConnection(inLayer, hiddenLayer)
hidden_to_out = FullConnection(hiddenLayer, outLayer)
n.addConnection(in_to_hidden)
n.addConnection(hidden_to_out)
n.sortModules()
ds = SupervisedDataSet(3, 1)
for i in range(0, len(iinput)):
ds.addSample(iinput[i], output[i])
trainer = BackpropTrainer(n, ds)
trainer.train()
epoch = 1
while True:
error = trainer.train()
print ("Epoch #" + str(epoch) + " Error: " + str(error))
epoch += 1
if epoch > 1000:
print "No Solution found!"
break
if error < 0.001:
print "Solution found!"
break
trainer.trainUntilConvergence()
for innput, expectedOutput in ds:
print innput
outputt = n.activate(innput)
print outputt
print "Input: {}, Got: {}".format(input_appr(innput[0]), output_appr(outputt))
print ""
tst_str = "redd"
novi = normalize_string(tst_str)
print tst_str, novi
lista = []
lista.append(novi)
lista.append(novi)
lista.append(novi)
print n.activate(lista)
print output_appr(n.activate(lista))
'''print n
print iinput
print output
print("dataset:" + str(len(ds)))
for inpt, target in ds:
print inpt, target'''