我有一个包含数据的文件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
但是在训练数据上测试神经网络是错误的-您不应该那样做