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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2022, 19:24   #1
AleksandraOl
Новичок
Джуниор
 
Регистрация: 24.12.2022
Сообщений: 3
По умолчанию Error: AttributeError: 'Network' object has no attribute 'cost_derivative'

Please tell me where and what I missed. Returns an error:
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
net.SGD(training_data, 30, 10, 3.0, test_data=test_data)
File "C:\Python\NeuralNetwork\Network1\n etwork.py", line 33, in SGD
self.update_mini_batch(mini_batch, eta)
File "C:\Python\NeuralNetwork\Network1\n etwork.py", line 47, in update_mini_batch
elta_nabla_b, delta_nabla_w = self.backprop(x, y)
File "C:\Python\NeuralNetwork\Network1\n etwork.py", line 76, in backprop
delta = self.cost_derivative(activations[-1], y) * sigmoid_prime(zs[-1])
AttributeError: 'Network' object has no attribute 'cost_derivative'

In IDLE, I execute commands:
>>>import os
>>>os.chdir ('C:\\Python\\NeuralNetwork\\Networ k1')
>>>import mnist_loader
>>>training_data, validation_data, test_data = mnist_loader.load_data_wrapper ()
>>>import network
>>> net = network.Network([784, 30, 10])
>>> net.SGD(training_data, 30, 10, 3.0, test_data=test_data)

Файл network:
Код:
import random
import numpy as np

class Network(object):
    def __init__(self,sizes):
        self.num_layers = len(sizes)
        self.sizes = sizes
        self.biases = [np.random.randn(y, 1) for y in sizes[1:]]
        self.weights = [np.random.randn(y,x) for x, y in zip(sizes[:-1],sizes[1:])]

    def SGD(
        self
        , training_data
        , epochs
        , mini_batch_size
        ,eta
        , test_data
        ):
        test_data = list(test_data)
        n_test = len(test_data)
        training_data = list(training_data)
        n = len(training_data)
        for j in range(epochs):
            random.shuffle(training_data)
            mini_batches = [training_data[k:k+mini_batch_size] for k in range (0, n, mini_batch_size)]
            for mini_batch in mini_batches:
                self.update_mini_batch(mini_batch, eta)
                print("Epoch {0}: {1}/{2}".format(j, self.evaluate(test_data), n_test))
        def evaluate(self, test_data):
            test_results = [(np.argmax(self.feedforward(x)), y)
            for (x, y) in test_data]
            return sum(int(x == y) for (x, y) in test_results)
    def update_mini_batch(
        self
        , mini_batch
        , eta
        ):
        nabla_b = [np.zeros(b.shape) for b in self.biases]
        nabla_w = [np.zeros(w.shape) for w in self.weights]
        for x, y in mini_batch:
            elta_nabla_b, delta_nabla_w = self.backprop(x, y)
            nabla_b = [nb+dnb for nb, dnb in zip(nabla_b, delta_nabla_b)]
            nabla_w = [nw+dnw for nw, dnw in zip(nabla_w, delta_nabla_w)]
            self.weights = [w-(eta/len(mini_batch))*nw
                            for w, nw in zip(self.weights, nabla_w)]
            self.biases = [b-(eta/len(mini_batch))*n
                            for b, nb in zip(self.biases, nabla_b)]

    def backprop(
        self
        , x
        , y
        ):
        nabla_b = [np.zeros(b.shape) for b in self.biases]
        nabla_w = [np.zeros(w.shape) for w in self.weights]
            
        activation = x
        activations = [x]
        zs = []
        def cost_derivative(self, output_activations, y):
            return (output_activations-y)


        for b, w in zip(self.biases, self.weights):
            z = np.dot(w, activation)+b
            zs.append(z)
            activation = sigmoid(z)
            activations.append(activation)
            delta = self.cost_derivative(activations[-1], y) * sigmoid_prime(zs[-1])
            nabla_b[-1] = delta
            nabla_w[-1] = np.dot(delta, activations[-2].transpose())
                
            for l in range(2, self.num_layers):
                z = zs[-l]
                sp = sigmoid_prime(z)
                delta = np.dot(self.weights[-l+1].transpose(), delta) * sp
                nabla_b[-l] = delta
                nabla_w[-l] = np.dot(delta, activations[-l-1].transpose())
                return (nabla_b, nabla_w)
        
            

                
    def sigmoid_prime(z):
        return sigmoid(z)*(1-sigmoid(z))
net = Network([2, 3, 1])
def sigmoid(z):
    return 1.0/(1.0+np.exp(-z))
def sigmoid_prime(z):
        return sigmoid(z)*(1-sigmoid(z))
def feedforward(self,a):
    for b, w in zip(self.biases, self.weights):
        a = sigmoid(np.dot(w,a)+b)
        return a
print('Сеть net:')
print('Количество слоев:', net.num_layers)
for i in range(net.num_layers):
    print('Количество нейронов в слое',i,':',net.sizes[i])
    for i in range(net.num_layers-1):
        print('W_',i+1,':')
        print (np.round(net.weights[i],2))
        print('b_',i+1,':')
        print (np.round(net.biases[i],2))
Most likely, the level is not correctly set somewhere, but I can't find it
AleksandraOl вне форума Ответить с цитированием
Старый 24.12.2022, 20:03   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Код:
 def backprop(
        self
        , x
        , y
        ):
        nabla_b = [np.zeros(b.shape) for b in self.biases]
        nabla_w = [np.zeros(w.shape) for w in self.weights]
            
        activation = x
        activations = [x]
        zs = []
        def cost_derivative(self, output_activations, y):
            return (output_activations-y)
cost_derivative - is nested method in backprop
Is that good?
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 24.12.2022, 20:15   #3
AleksandraOl
Новичок
Джуниор
 
Регистрация: 24.12.2022
Сообщений: 3
По умолчанию

ViktorR, yes, it's not good, I've already fixed everything. Thanks!
AleksandraOl вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка "AttributeError: 'tuple' object has no attribute 'append'" VeryStupidPerson Python 1 04.10.2020 23:32
Ошибка при настройке админки в Django - 'NoneType' object has no attribute '_meta' Arkuz Python 1 15.12.2019 17:10
Ошибка socket error # 10051 network is unreachable в Indy IdSMTP remont_it, C++ Builder 0 21.01.2013 22:31
run-time error '1004' (Application-defined or object-defined error) Oldy7 Microsoft Office Excel 23 26.02.2012 21:18
Run-time error '1004': Application-defined or object-defined error malor Microsoft Office Excel 3 17.01.2010 17:13