Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2020, 13:15   #1
VeryStupidPerson
Пользователь
 
Аватар для VeryStupidPerson
 
Регистрация: 20.07.2020
Сообщений: 69
По умолчанию ошибка 'numpy.ndarray' object is not callable

Я попробовал написать простейший нейрон, но постоянно возникает TypeError: 'numpy.ndarray' object is not callable, и я не понимаю, что не так.

Код:
import numpy

class neuron:
    activation = False
    vesa = None
    outn = None
    inn = None
    def __init__(self, vesa):
        self.vesa = vesa
    def inn(self, inn):
        self.outn = self.fun_activation(inn)
        self.activation = True
        self.inn = inn
        return self.outn
    def fun_activation(self, inn):
        x = inn * self.vesa
        x = numpy.sum(x)
        return 1/(1 + numpy.exp(-x))
    def trening(self, trueoutn):
        if self.outn != trueoutn:
            self.vesa = self.vesa + 0.00001 * (trueoutn - self.outn) * self.inn
        self.activation  = False

schoolin = numpy.array([[1, 1, 1],
                       [1, 1, 0],
                       [1, 0, 1],
                       [1, 0, 0]])
schoolout = numpy.array([[1],
                        [0],
                        [1],
                        [0]])
novin = numpy.array([0, 1, 0])
nerv = neuron(numpy.array([[0.1], [0.2], [0.3]]))
out = nerv.inn(novin)
print(out)
for i in range(100):
    for a in range(4):
        nerv.inn(schoolin[(a)])
        nerv.trening(schoolout[(a)])
Вывод:
0.6456563062257954
Traceback (most recent call last):
File "/home/filaret/chess/figuri.py", line 38, in <module>
nerv.inn(schoolin[(a)])
TypeError: 'numpy.ndarray' object is not callable
---------------------------------------------------
Нич-чего не понимаю!
Или что-то случилось, или… одно из двух!
VeryStupidPerson вне форума Ответить с цитированием
Старый 16.11.2020, 14:32   #2
VeryStupidPerson
Пользователь
 
Аватар для VeryStupidPerson
 
Регистрация: 20.07.2020
Сообщений: 69
По умолчанию

П. С. Ошибка возникает, при повторном обращении к функции inn() класса нейрон. Но почему, я не понимаю.
---------------------------------------------------
Нич-чего не понимаю!
Или что-то случилось, или… одно из двух!
VeryStupidPerson вне форума Ответить с цитированием
Старый 16.11.2020, 14:58   #3
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Так вы прочитайте, что написали...
Код:
    def inn(self, inn):
        ...
        self.inn = inn
Из метода сделали массив, а потом пытаетесь его вызвать.
FrosyaZZ вне форума Ответить с цитированием
Старый 16.11.2020, 15:44   #4
VeryStupidPerson
Пользователь
 
Аватар для VeryStupidPerson
 
Регистрация: 20.07.2020
Сообщений: 69
По умолчанию

Спасибо! Случайно одинаково назвал.
---------------------------------------------------
Нич-чего не понимаю!
Или что-то случилось, или… одно из двух!
VeryStupidPerson вне форума Ответить с цитированием
Старый 16.11.2020, 16:07   #5
VeryStupidPerson
Пользователь
 
Аватар для VeryStupidPerson
 
Регистрация: 20.07.2020
Сообщений: 69
По умолчанию

Возникла опять проблема.
Я добавил вывод весов нейрона и обнаружил, что из массива из трёх элементов неожиданно получается массив из трёх массивов из трёх элементов:

[[-0.12]
[-0.1 ]
[ 3.1 ]]
[[-0.12]
[-0.1 ]
[ 3.1 ]]
[[-0.11999982 -0.11999982 -0.11999982]
[-0.09999982 -0.09999982 -0.09999982]
[ 3.10000018 3.10000018 3.10000018]]
[[-0.12099668 -0.12099668 -0.11999982]
[-0.10099668 -0.10099668 -0.09999982]
[ 3.09900332 3.09900332 3.10000018]]
...
Как это получается, ведь я прибавляю к массиву из трёх элементов массив из трёх элементов? Откуда возникает матрица?

Код:
class neuron:
    activation = False
    vesa = None
    outn = None
    innp = None
    def __init__(self, vesa):
        self.vesa = vesa
        print(self.vesa)
    def inn(self, innp):
        self.outn = self.fun_activation(innp)
        self.activation = True
        self.innp = innp
        return int(self.outn)
    def fun_activation(self, inn):
        x = inn * self.vesa
        x = numpy.sum(x)
        return 1/(1 + numpy.exp(-x))
    def trening(self, trueoutn):
        if self.outn != trueoutn:
            print(self.vesa)
            self.vesa = self.vesa + 0.001 * (trueoutn - self.outn) * self.innp #собственно, вот здесь происходит сложение.
        self.activation  = False
---------------------------------------------------
Нич-чего не понимаю!
Или что-то случилось, или… одно из двух!

Последний раз редактировалось VeryStupidPerson; 16.11.2020 в 16:11.
VeryStupidPerson вне форума Ответить с цитированием
Старый 16.11.2020, 18:19   #6
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Цитата:
Сообщение от VeryStupidPerson Посмотреть сообщение
ведь я прибавляю к массиву из трёх элементов массив
Нет. [[0.1], [0.2], [0.3]] - двумерный массив.

Код:
import numpy as np
a = np.array([[0.1], [0.2], [0.3]])
print(a.ndim)
FrosyaZZ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
NumPy и чтение/запись массива в файл ViktorR Python 8 08.09.2018 15:40
В чём ошибка? Задача на object pascal FLASH_MAN Помощь студентам 2 20.10.2015 22:32
Проблема с типами! Ошибка object Михаил__ C# (си шарп) 23 06.01.2014 20:00
Ошибка при подключении к базе данных Object reference not set to an instance of an object. lowercase ASP.NET 1 20.11.2011 22:48
Ошибка! ActiveX component can't create object! Insainer Microsoft Office Access 0 27.01.2008 11:13