我想做一个小项目,我想用python的神经网络。我发现pybrain是最好的解决方案。但到目前为止,我找到的所有例子和问题都无法帮助我。
我有一系列数字。数百行。缺少一些值,而不是数字,有一个“x”。
例如
1425234838636**x**40543485435097**x**43953458345345430843967067045764607457607645067045**x**04376037654067458674506704567408576405
等等。这只是一个例子。不是我的序列。
我想要逐一阅读数值并训练我的神经网络,当我找到一个'x'时我会预测数字,我将继续训练它以下数字。
到目前为止我所发现的是像这样的训练
trainSet.addSample([0,0,0,0],[1])
有一些输入和一些输出。
有什么建议我可以继续吗?
编辑:我想点什么,我想收到反馈,因为我不知道是不是。
我仍然有上面的字符串。我把它拆分成列表,所以我有一个列表,其中每个实体都是一个数字。
for ind in range(len(myList)):
if not myList[ind] == "x" and not myList[ind+1]=="x":
ds.addSample(myList[ind],myList[ind+1])
else:
break
net = FeedForwardNetwork()
inp = LinearLayer(1)
h1 = SigmoidLayer(1)
outp = LinearLayer(1)
net.addOutputModule(outp)
net.addInputModule(inp)
net.addModule(h1)
net.addConnection(FullConnection(inp, h1))
net.addConnection(FullConnection(h1, outp))
net.sortModules()
trainer = BackpropTrainer(net, ds)
trainer.trainOnDataset(ds,1000)
trainer.testOnData(verbose=True)
lis[ind+1] = net.activate((ind,))
GO to the beggining and continue from the last "x" which replaced from the net.activate()
你怎么看?你相信这样的东西会起作用吗?
答案 0 :(得分:2)
通常,如果您使用反向传播训练ANN,则基本上是训练输入输出图。这意味着您的训练集必须包含已知的输入 - 输出关系(训练集中不包含任何未知值)。然后ANN成为输入和输出之间实际关系的近似值。
然后,您可以致电x = net.activate([seq])
,其中seq
是与未知值x
相关联的输入序列。
如果x
是已知结果的未知输入序列,则必须调用ANN的逆。我不认为在pybrain中有一种简单的反转神经网络的方法,但你可以用原始训练数据的倒数来训练神经网络。换句话说,使用您已知的结果作为训练输入,并将其相关序列用作训练结果。
要考虑的主要因素是工具的适当性以及您要尝试的培训数据。如果您只想将x
预测为前一个数字的函数,那么我认为您的训练正确。我猜测x
将是以前的n
数字的函数,在这种情况下,您希望将数据集更新为:
n = 10
for ind in range(len(myList)):
# Don't overrun our bounds
if ind == len(myList)-1:
break
# Check that our sequence is valid
for i in range(ind-n, ind+1):
if i >= 0 and myList[i] == "x":
# we have an invalid sequence
ind += i # start next seq after invalid entry
break
# Add valid training sequence to data set
ds.addSample(myList[ind-n:ind],myList[ind+1])
答案 1 :(得分:1)
我可以不给你那个python库的具体答案,但正如我所看到的,你有一个神经网络,你给它的形式样本
[ i0 i1 ... i n ] --> [ o0 o1 ... on ] (input vector) (output vector)
现在,您使用长度为1的样本向量训练网络。您的网络不知道呈现给它的数字序列,该序列仅对训练网络的结果感兴趣。
要获得一个知道序列的网络,您可以将连续数字的向量作为输入,并将所需的单个数字作为输出。你留下包含X例子的序列:
Sequence: 1 2 3 4 X 2 3 4 5 6 7 8 Training with input length 3, output length 1: [1 2 3] -> 4 [2 3 4] -> 5 (the second one, as the first one is not available) [3 4 5] -> 6 [4 5 6] -> 7 [5 6 7] -> 8
我认为使用它,您的网络可以适应输入序列。 “如何”提取正确的训练序列作为输入,我必须留给域专家(你)。
答案 2 :(得分:1)
您所描述的是名为Imputation的统计应用程序:替换数据中的缺失值。传统的方法不涉及神经网络,但肯定有一些research in this direction。这不是我的领域,但我建议您查看文献。