Проблема: ValueError: установка элемента массива с последовательностью - PullRequest
2 голосов
/ 06 июля 2019

Сообщение об ошибке: 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 голосов
/ 06 июля 2019

Ошибка 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. Это поможет нам понять, чего вы хотите добиться, а не просто исправить ошибки во время компиляции.

Надеюсь, это поможет.

0 голосов
/ 06 июля 2019

Ошибка, которую вы получаете из-за этих строк:

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 типа numpy.ndarray.Таким образом, чтобы избавиться от ошибки, измените

self.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.

Должно быть learning_rate = 0.3.Хотя вы нигде не используете его в расчетах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...