问题:ValueError:使用序列设置数组元素

时间:2019-07-06 18:40:10

标签: python arrays numpy neural-network

错误消息:ValueError。为什么会这样?

我正在从我买的书中学习神经网络。我已经从那本书中复制了代码,但是不知何故,它不断给我该错误消息。

非常感谢您!

import numpy
import scipy

class neuralNetwork:

    def __init__(self, inputnodes, hiddennodes, outputnodes, learningrate):

        self.inodes = inputnodes
        self.hnodes = hiddennodes
        self.onodes = outputnodes

        self.wih = (numpy.random.rand(self.hnodes, self.inodes) -0,5)
        self.who = (numpy.random.rand(self.onodes, self.hnodes) -0,5)

        self.lr = learningrate

        self.activation_function= lambda x: scipy.special.expit(x)

        pass

    def train():
        pass

    def query(self, inputs_list):

        inputs = numpy.array(inputs_list, ndmin=2).T

        hidden_inputs = numpy.dot(self.wih, inputs)
        hidden_outputs = self.activation_function(hidden_inputs)

        final_inputs = numpy.dot(self.who, hidden_outputs)
        final_outputs = self.activation_function(final_inputs)

        return final_outputs

        pass


input_nodes = 3
hidden_nodes = 3
output_nodes = 3

learning_rate = 0,3

n = neuralNetwork(input_nodes, hidden_nodes, output_nodes, learning_rate)

n.query([1, 1, 1])

我期望一个数组作为输出。

hidden_inputs = numpy.dot(self.wih, inputs)

ValueError:设置具有序列的数组元素。

2 个答案:

答案 0 :(得分:0)

您收到的错误是由于以下几行:

self.wih = (numpy.random.rand(self.hnodes, self.inodes) -0,5)
self.who = (numpy.random.rand(self.onodes, self.hnodes) -0,5)

(numpy.random.rand(self.hnodes, self.inodes) -0,5)是一个元组,您正在尝试使用类型inputs的{​​{1}}执行元组的点积。 因此,为了摆脱错误更改

numpy.ndarrayself.wih = (numpy.random.rand(self.hnodes, self.inodes) -0,5)

self.wih = (numpy.random.rand(self.hnodes, self.inodes) -0.5)self.who = (numpy.random.rand(self.onodes, self.hnodes) -0,5)

初始化self.who = (numpy.random.rand(self.onodes, self.hnodes) -0.5)变量的行也存在错误,即

learning_rate

应为learning_rate = 0,3。虽然,您还没有在计算中使用它。

答案 1 :(得分:0)

发生ValueError的原因是您试图执行元组与向量(输入向量)的点积。

我还注意到,您正在传递learning_rate = 0,3,而您期望学习率在类主体中为整数或浮点型。这使我认为您正在阅读的书中的圆点(。)可能被误打印为逗号(,)。这可能是一个问题。

一旦用点修复了三个逗号,就可以看到代码运行。

这是下面的完整代码:

import numpy
import scipy
from scipy import special

class neuralNetwork:

    def __init__(self, inputnodes, hiddennodes, outputnodes, learningrate):

        self.inodes = inputnodes
        self.hnodes = hiddennodes
        self.onodes = outputnodes

        self.wih = (numpy.random.rand(self.hnodes, self.inodes)-0.5)
        self.who = (numpy.random.rand(self.onodes, self.hnodes)-0.5)

        self.lr = learningrate

        self.activation_function= lambda x: scipy.special.expit(x)

        pass

    def train():
        pass

    def query(self, inputs_list):

        inputs = numpy.array(inputs_list, ndmin=2).T

        print(self.wih[0].shape)
        hidden_inputs = numpy.dot(self.wih, inputs)
        hidden_outputs = self.activation_function(hidden_inputs)

        final_inputs = numpy.dot(self.who, hidden_outputs)
        final_outputs = self.activation_function(final_inputs)

        return final_outputs

        pass


input_nodes = 3
hidden_nodes = 3
output_nodes = 3

learning_rate = 0.3

n = neuralNetwork(input_nodes, hidden_nodes, output_nodes, learning_rate)

n.query([1,1,1])

此外,在向SO发布问题时,请添加一些上下文。这将有助于我们了解您要实现的目标,而不仅仅是解决编译时错误。

希望有帮助。