这里有几个问题。在
第一个问题是你需要8个输入神经元。为此,您需要newff中的第一个列表的长度为8(8个输入中每个输入一个最小值和一个最大值)。因此,您只得到一个输入,而不是8(因此是3x1数组而不是3x8数组)。可以通过改变:net = nl.net.newff([[0, 1]], [3, 4])
收件人:
^{pr2}$
一种较短的书写方式:net = nl.net.newff([[0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1]], [3, 4])
下一个问题是python使用与matlab不同的维度排序(默认情况下)。因此,一个具有(8,3)形状的2D数组在numpy中将有一个(3,8)的形状。所以你所有的重塑都是不必要的。在
第三个问题是输入偏差和偏差2的维度混淆了。我对neuralab的了解还不足以说明您是否希望将开始时的[3, 4]更改为{},或者是否要切换偏差。我会假设后者。在
最后一个问题是,在网络sim卡,但你只有7个。在
下面是代码的一个固定版本,假设您混淆了偏差,并使用一些伪值来填充遗漏的内容:import numpy as np
import neurolab as nl
net = nl.net.newff([[0, 1]]*8, [3, 4])
input_w = np.array([[-24.1874,24.1622,0.0755,-0.2521,4.4625,-10.7961,6.2183,0.2680],
[-24.1874,24.1622,0.0755,-0.2521,4.4625,-10.7961,6.2183,0.2680],
[-24.1874,24.1622,0.0755,-0.2521,4.4625,-10.7961,6.2183,0.2680]])
layer_w = np.array([[-3.7940,-0.0336,-14.9024],
[-3.7940,-0.0336,-14.9024],
[-3.7940,-0.0336,-14.9024],
[-3.7940,-0.0336,-14.9024]])
input_bias = np.array([0.4747,-1.2475,-1.2470])
bias_2 = np.array([-10.9982,1.9692,5.0705,-0.1236])
net.layers[0].np['w'][:] = input_w
net.layers[1].np['w'][:] = layer_w
net.layers[0].np['b'][:] = input_bias
net.layers[1].np['b'][:] = bias_2
print net.sim([[0.015,0.022,0.0,0.0,0.432,0.647,0.831]])