python 中的神经网络训练数据时出现断言错误?
Getting Assertion Error when training data in neural network in python?
我有一个包含数据的文件 BCICIV1bAF3.dat。文件大小为20x1
这是我的代码...
在 newff 函数中,我根据 Min/Max 决定范围,但我不知道如何决定其他参数。我想要多少隐藏层等
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
如果您能提供输入数据(即使值已更改),那就太好了。
我尝试调用 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]]
我们想要与您的数据相同的东西,但我们希望输入和输出都是一维的,因此我们必须 "wrap" 将一个 list
的每个元素转换为另一个 list
.输出和模拟输入也一样——你忘了。
predicted_output = net.sim(input_data) # this won't work! You should wrap it
但是在训练数据上测试神经网络是错误的——你不应该那样做
我有一个包含数据的文件 BCICIV1bAF3.dat。文件大小为20x1
这是我的代码...
在 newff 函数中,我根据 Min/Max 决定范围,但我不知道如何决定其他参数。我想要多少隐藏层等
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
如果您能提供输入数据(即使值已更改),那就太好了。
我尝试调用 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]]
我们想要与您的数据相同的东西,但我们希望输入和输出都是一维的,因此我们必须 "wrap" 将一个 list
的每个元素转换为另一个 list
.输出和模拟输入也一样——你忘了。
predicted_output = net.sim(input_data) # this won't work! You should wrap it
但是在训练数据上测试神经网络是错误的——你不应该那样做