我在学习一个关于神经网络的教程,但尝试按照自己的方式进行操作,但在这一行代码时遇到了问题:
_Y[i0,i1]=ForwardPass(Neural_net, np.array([[x0,x1]]))
控制台显示错误信息:
ValueError: setting an array element with a sequence.
变量在以下代码块中定义:
res = 50 _x0=np.linspace(-1.5,1.5,res) _x1=np.linspace(-1.5,1.5,res) _Y = np.zeros((res,res)) for i0,x0 in enumerate(_x0): for i1,x1 in enumerate(_x1): _Y[i0,i1]=ForwardPass(Neural_net, np.array([[x0,x1]]))
这是ForwardPass函数的代码:
def ForwardPass(neu_net, ent): outs=[ent] for l, layer in enumerate(neu_net): Sp=outs[-1]@neu_net[l].w + neu_net[l].b a=neu_net[l].act_f[0](Sp) outs.append(a) return outs
回答:
如果你在迭代中添加一个打印语句来检查_Y[i0,i1]的值:
res = 50_x0=np.linspace(-1.5,1.5,res)_x1=np.linspace(-1.5,1.5,res)_Y = np.zeros((res,res))for i0,x0 in enumerate(_x0): for i1,x1 in enumerate(_x1): print(_Y[i0,i1])>>0.0 0.0 0.0 ..
_Y[i0,i1]
是一个浮点值,而 ForwardPass(Neural_net, np.array([[x0,x1]]))
的返回结果是一个列表。
因此,正如错误信息 ValueError: setting an array element with a sequence.
所述,这是因为你试图将一个列表(数组)赋值给一个浮点值(数组元素)。