2017-03-27 118 views
0

我有一个文件BCICIV1bAF3.dat其中包含数据。文件大小为20X1在python中训练神经网络中的数据时发生断言错误?

这是我的代码...

在newff功能我决定基于最小/最大范围内,但我不知道如何来决定其他参数。多少隐藏层做我想做等

import numpy as np 
import neurolab as nl 

input_data = np.fromfile('BCICIV1bAF3.dat' ,dtype=float) 

print(len(input_data)) 
transformed_input_data = [[x] for x in input_data] # added 
print(len(transformed_input_data)) 
output_data = np.fromfile('test.dat',dtype=float) 

transformed_output_data = [[x] for x in output_data] # added 

net = nl.net.newff([[-21, -10.5]], [1020, 1]) 
error = net.train(transformed_input_data, transformed_output_data) 
predicted_output = net.sim(input_data) 

输入数据:

-10.5 -91.7 -219.8 -227 -190.8 -218.7 -208.2 -205 -214.3 -202 -211.5 -211.1 -208.2 -212.4 -206 -206.7 -211.5 -210.7 -212 -215.1

输出数据:

-5.2 -45.6 -108.6 -112 -94.5 -106.7 -99.6 -98.5 -105.4 -101.2 -106.4 -106.5 -102.4 -105.7 -104 -97.9 -99.5 -101.3 -100.6 -103.7

错误:

Traceback (most recent call last): 
    File "NNwork2.py", line 15, in <module> 

    error = net.train(transformed_input_data, transformed_output_data) 
    File "C:\Python34\lib\site-packages\neurolab\core.py", line 328, in __call__ 
    assert target.shape[0] == input.shape[0] 
AssertionError 

我如何训练?并模拟input_data?

如果有人可以指导...我会非常感激。谢谢

+0

从你的错误消息的内容,我可以得到你输入的形状是你所期望不是。也许仔细看看。 – PinkFluffyUnicorn

回答

1

您是否尝试过其他培训方法?我在其他答案中看到它有帮助,因为库中存在一个错误。 可用的方法: train_gd, train_gdm, train_gda, train_gdx, train_rprop, train_bfgs (DEFAULT), train_cg

你可以通过调用改变:

net.trainf = nl.train.train_gd

如果你能提供的输入数据(即使变更值)这将是巨大的。

我打过电话串方式输入形式:[0,1,2,3...18,19]和失败 - 我不得不改变输入(和目标),以[[0],[1],...[18],[19]]

编辑:

您的数据格式错误,你应该变换它列表的名单。我没有scipy我的机器上,但试试这个:

import numpy as np 
import neurolab as nl 

input_data = np.fromfile('BCICIV1bAF3.dat' ,dtype=float) 
transformed_input_data = [[x] for x in input_data] # added 

print(len(transformed_input_data)) # changed 
net = nl.net.newff([[-215.1, -10.5]], [20, 1]) 
error = net.train(transformed_input_data, transformed_input_data, epochs=500) # changed 

编辑2:

我就不解释了神经网络是什么(我没在相当长的一段使用它们)但它应该是这样的,当我们想3D输入转换成2D输出与使用1隐含层:

INPUT [3D] | HIDDEN LAYER | OUTPUT [2D] 
       ---- 
       | H1 | 
       ---- 
    ---- 
    | X1 | 
    ---- 
       ----   ---- 
       | H2 |  | Y1 | 
       ----   ---- 


    ----    
    | X2 |      
    ----      

       ----   ---- 
       | H3 |  | Y2 | 
       ----   ---- 
    ---- 
    | X3 | 
    ---- 
       ---- 
       | H4 | 
       ---- 

每个X由每^ h相乘,我们计算输出。我们如何得到这些H值?它们是在神经网络的training期间通过算法计算的。我们指定我们需要多少隐藏层,并通过反复试验得出令人满意的解决方案。非常重要 - 我们应该使用不同的数据来训练和检查神经网络的输出。

我们什么时候可以使用这个特定的网络?例如。根据年龄,客户的薪水以及特定餐厅的位置计算麦当劳订购多少巨无霸和薯条时。它看起来像这样:

----- 
    | AGE | 
    ----- 
       ----   ---------- 
       | H2 |  | BIG MACS | 
       ----   ---------- 


    --------    
    | SALARY |      
    --------      

       ----   ----------- 
       | H3 |  | FRIES | 
       ----   ----------- 
    ------- 
    | PLACE | 
    ------- 
       ---- 
       | H4 | 
       ---- 

所以我们可以说转换看起来像这样f([Age, Salary, Place]) = [Big Macs, Fries]。 我们可能拥有数百万个员工收集的输入和输出数据记录来训练我们的网络,因此将其翻译为python,它将是输入(3D)的list,并且我们预计输出(2D)的list。例如。 f([[A_1, S_1, P_1], [A_2, S_2, P_2], ... , [A_N, S_N, P_N]]) -> [[BM_1, F_1], [BM_2, F_2], ... , [BM_N, F_N]]

我们希望与您的数据同样的事情,但我们希望有输入和输出是一维的,因此我们不得不一个list的每个元素“包装”成另一种list。与输出和模拟输入相同的东西 - 你忘记了。

predicted_output = net.sim(input_data) # this won't work! You should wrap it

但测试训练数据的神经网络是错误的 - 你不应该这样做

+0

谢谢这么多...它的工作:) – Uzair

+0

我很高兴它帮助! – pierscin

+0

@Uzair - 你没有选中我的答案吗? – pierscin