1

我有一个 包含数据的文件BCICIV1bAF3.dat 。文件大小为20x1

这是我的代码...

在 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?

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

4

1 回答 1

2

你有没有尝试过其他的训练方法?由于库中的错误,我在其他答案中看到它有所帮助。可用方法: train_gd, train_gdm, train_gda, train_gdx, train_rprop, train_bfgs (DEFAULT), train_cg

您可以通过调用来更改它:

net.trainf = nl.train.train_gd

如果您可以提供输入数据(即使值已更改),那就太好了。

我尝试为表单中的输入调用 train 方法:[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:

我不会解释什么是神经网络(我有一段时间没有使用它们),但是当我们想使用 1 个隐藏层将 3D 输入转换为 2D 输出时,它应该是这样的:

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 将是list输入(3D),而我们期望list输出(2D)。例如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]]

我们希望与您的数据相同,但我们希望输入和输出都是一维的,因此我们必须将 a 的每个元素“包装”list到另一个list. 输出和模拟输入也一样——你忘了。

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

但是在训练数据上测试神经网络是错误的——你不应该那样做

于 2017-03-27T11:57:27.250 回答