我有一个包含数据的文件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?

如果有人可以指导...我将不胜感激。谢谢

最佳答案

您尝试其他训练方法了吗?我在其他答案中看到它有所帮助,因为库中存在错误。
可用方法:
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:

我不会解释什么是神经网络(我已经有一段时间没有使用它们了),但是当我们想使用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]]

我们想要与您的数据相同的东西,但我们希望输入和输出均为一维,因此我们不得不将list的每个元素“包装”到另一个list中。输出和模拟输入相同-您忘记了。

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

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

07-26 05:56
查看更多