Форум программистов, компьютерный форум, киберфорум
Python: ИИ, нейросети, ML, агенты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 03.12.2022
Сообщений: 23

Ошибки при запуске процедуры исполнения нейронной сети

07.05.2023, 18:13. Показов 956. Ответов 2

Студворк — интернет-сервис помощи студентам
Добрый день!
Создается программа по распознаванию рукописных цифр
При исполнении программы
Python
1
2
3
4
5
6
7
import os
os.chdir ('C:\\NeuralNetwork\\Network1')
import mnist_loader
training_data, validation_n_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)
возникает ошибка и не могу найти где что пропустила:

Traceback (most recent call last):
File "<pyshell#46>", line 1, in <module>
net.SGD(training_data, 30, 10, 3.0, test_data=test_data)
File "C:\NeuralNetwork\Network1\network.p y", line 60, in SGD
self.update_mini_batch(mini_batch, eta) # один шаг градиентного спуска
File "C:\NeuralNetwork\Network1\network.p y", line 77, in update_mini_batch
delta_nabla_b, delta_nabla_w = self.backprop(x, y) # послойно вычисляем градиенты dC/db и dC/dw для текущего прецедента (x, y)
File "C:\NeuralNetwork\Network1\network.p y", line 103, in backprop
activation = sigmoid(z) # считаем выходные сигналы текущего слоя, применяя сигмоидальную функцию активации к активационным потенциалам слоя
NameError: name 'sigmoid' is not defined


Файл network:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
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 feedforward(self, a): 
        for b, w in zip(self.biases, self.weights):
            a = sigmoid(np.dot(w, a)+b)
            return a
        
    def sigmoid(z): 
        return 1.0/(1.0+np.exp(-z))
 
    def sigmoid_prime(z):
        return sigmoid(z)*(1-sigmoid(z))
    
    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:
             delta_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))*nb
                       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 = [] 
 
        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 cost_derivative(self, output_activations, y): 
            return (output_activations-y)
 
net = Network([2, 3, 1])
 
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))
Файл: mnist_loader
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import gzip 
import pickle 
import numpy as np 
 
def load_data():
    f = gzip.open('mnist.pkl.gz', 'rb') 
    training_data, validation_data, test_data = pickle.load(f,encoding='latin1') 
    f.close() # закрываем файл
    return (training_data, validation_data, test_data)
 
def load_data_wrapper():
    tr_d, va_d, te_d = load_data() 
    training_inputs = [np.reshape(x, (784, 1)) for x in tr_d[0]] 
    training_results = [vectorized_result(y) for y in tr_d[1]] 
    training_data = zip(training_inputs, training_results) 
    validation_inputs = [np.reshape(x, (784, 1)) for x in va_d[0]] 
    validation_data = zip(validation_inputs, va_d[1]) 
    test_inputs = [np.reshape(x, (784, 1)) for x in te_d[0]] 
    test_data = zip(test_inputs, te_d[1]) 
    return (training_data, validation_data, test_data)
 
 
def vectorized_result(j):
 
    e = np.zeros((10, 1))
    e[j] = 1.0
    return e
Вложения
Тип файла: zip mnist.pkl.zip (15.38 Мб, 4 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.05.2023, 18:13
Ответы с готовыми решениями:

Обратное распространение ошибки нейронной сети
Разбираюсь с методом обратного распространения ошибки в нейронных сетях. Подскажите пожалуйста правильно ли я посчитал компоненты градиента...

Ошибки нейронной сети по эпохам обучения
Здравствуйте, товарищи программисты! Столкнулась с такой проблемой - нужно сделать поиск минимальных векторов, он в коде есть, но - слишком...

Обучение нейронной сети методом обратного распространения ошибки
При обучении созданной на C# нейронной сети возникли сложности. Используется сигмоидная функция активации и архитектура нейронной сети с...

2
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
08.05.2023, 07:00
SandraOl, как вариант, можно попробовать вынести sigmoid, sigmoid_prime из класса наружу.
1
Любознательный
 Аватар для YuS_2
7405 / 2255 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
08.05.2023, 09:41
Цитата Сообщение от u235 Посмотреть сообщение
можно попробовать вынести sigmoid, sigmoid_prime из класса наружу.
Даже, я бы сказал, нужно...

Цитата Сообщение от SandraOl Посмотреть сообщение
def cost_derivative(self, output_activations, y):
            return (output_activations-y)
И ещё в этих строках с отступами разберитесь...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.05.2023, 09:41
Помогаю со студенческими работами здесь

Обучение нейронной сети методом обратного распространения ошибки
пишу нейронную сеть типа многослойный персептрон, для решения задачи аппроксимации функции. Знаю что есть много ресурсов с готовым...

Может ли график ошибки нейронной сети иметь такой вид?
Может ли график ошибки, в процессе обучения, настолько сильно колебаться(вершина картинки - 100% ошибки)? И почему значение сети не...

Некорректно работает метод обратного распространения ошибки в нейронной сети
Добрый день, пишу нейронную сеть на вход которой подается матрица размеров 504х13, на выходе матрица вектор 504х1. Сама сеть вроде бы...

Количество скрытых слоёв в алгоритме обратного распространения ошибки нейронной сети
Всем привет. Сколько должно быть скрытых слоёв и нейронов в них, если на входе два нейрона, а на выходе три? Пользуюсь программой,...

Создание нейронной сети Хопфилда для коррекции ошибки в двоичной последовательности
Здравствуйте. Прошу помощи с созданием сети Хопфилда, которая согласна эталонному массиву двоичных данных смогла бы корректировать ошибки в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru