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

Решение СЛАУ с использованием нейронной сети

22.03.2023, 18:18. Показов 1683. Ответов 8

Студворк — интернет-сервис помощи студентам
Всем привет! Пытаюсь сделать нейронную сеть для решения СЛАУ 3х3. Вот мой код. Перепробовал уже многое. Уменьшение нейронов, изменение функций активации, оптимизаторы и тд. Все равно ничего не выходит. Перечитал кучу статей на эту тему, но толкового нет ничего. Цель вообще сделать решатель 5х5. Но буду очень рад если получится 3х3 хотя бы сделать. Очень нужна помощь. Сам в этой области совсем недавно (2 месяца) и опыта не много.
Данные подаю как двумерный массив, в котором shape(кол-во обучающих экземпляров, 12 элементов). 12 элементов: 3х3 =9 матрица А и еще вектор b содержит 3 элемента. Кол-во обучающих образцов делал разное (50, 1000, 10000). Пробовал еще самому инициализировать веса в первый скрытый слой, чтобы коэффициенты уравнений связать между определенными нейронами, но там вообще обучение не идет.

Сама модель выглядит так:

Python
1
2
3
4
5
6
7
8
9
10
11
model = tf.keras.models.Sequential()
 
model.add(tf.keras.layers.InputLayer(input_shape = X_train.shape[1:]))
model.add(tf.keras.layers.Dense(12, activation = 'sigmoid'))
model.add(tf.keras.layers.Dense(12, activation = 'sigmoid'))
model.add(tf.keras.layers.Dense(4, activation = 'relu'))
model.add(tf.keras.layers.Dense(n_outputs))
 
opt=tf.keras.optimizers.SGD(learning_rate = 0.001, momentum = 0.9)
 
model.compile(loss="mean_squared_error", optimizer=opt, metrics=['mae'])
Прикрепляю файл с графиком ошибок обучения и валидации. xlabel - это epochs. ylabel - mae(левый) и mse(правый). Буду очень рад если поможете. Подскажите пожалуйста, что не так делаю и
Миниатюры
Решение СЛАУ с использованием нейронной сети   Решение СЛАУ с использованием нейронной сети  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.03.2023, 18:18
Ответы с готовыми решениями:

Решение задачи регрессии с использованием рекуррентной нейронной сети
Здравствуйте, ребята! Скажите, существуют ли модели рекуррентных нейронных сетей для решения многофакторной задачи регрессии? ...

Обработка данных с использованием нейронной сети?
Всем привет, При боработке моих данных я использовал нейронную сеть с 2-6-1 (2 входящие нейроны, 6 скрытых нейронов, 1 выходящий нейрон)....

Обработка данных с использованием нейронной сети
Здравствуйте всем! Возник такой вопрос. Пишу программу по клавиатурному почерку. На выходе имею файл excel в котором записано время...

8
2642 / 1653 / 267
Регистрация: 19.02.2010
Сообщений: 4,377
22.03.2023, 18:43
Цитата Сообщение от Utopky Посмотреть сообщение
Подскажите пожалуйста, что не так делаю
Всё не так.
Сетку предварительно обучать не надо.
Структуру сети делать "непохожей" на задачу тоже не надо.
Нелинейности пихать в сетку тоже не надо.

Задача решения СЛАУ переформулируется в задачу минимизации величины квадратичной невязки https://www.cyberforum.ru/cgi-bin/latex.cgi?\parallel Ax-b \parallel - вот и (если представить эту формулу в виде графа вычислений) готова сетка с интегрированной в неё функцией потерь. Далее - градиентное "обучение" значений вектора x при заданных (матрицей А и вектором b конкретной СЛАУ) весах сетки.

Как это можно будет сделать в tf/keras - ХЗ.
1
0 / 0 / 0
Регистрация: 30.03.2019
Сообщений: 17
22.03.2023, 19:50  [ТС]
Спасибо за ответ!

Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
Сетку предварительно обучать не надо.
Почему ее предварительно не надо обучать? Разве это не является обычное обучение с учителем?

Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
Структуру сети делать "непохожей" на задачу тоже не надо.
Я старался сделать персептрон, где как раз выполняется линейная регрессия. А наши веса это по идее и есть наш X.

Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
Как это можно будет сделать в tf/keras - ХЗ.
Если есть какая-то толковая реализация, пусть и не в tf, то хотелось бы на нее взглянуть. Это может мне многое прояснить
0
2642 / 1653 / 267
Регистрация: 19.02.2010
Сообщений: 4,377
22.03.2023, 20:34
Лучший ответ Сообщение было отмечено Utopky как решение

Решение

Цитата Сообщение от Utopky Посмотреть сообщение
Почему ее предварительно не надо обучать?
Потому что значения весов и смещений единственного слоя нейронов без нелинейных функций - будут явно задаваться имеющейся у конкретной СЛАУ матрицей А и взятым у той же СЛАУ вектором b.
"Обучаться" будет вектор входов х этой однослойной сетки.

Цитата Сообщение от Utopky Посмотреть сообщение
А наши веса это по идее и есть наш X.
В описанном мной случае - х выступает как вектор входов (корректируемых в ходе процесса подгонки их значений) сетки, а не весов.
Новая СЛАУ - новые веса сетки, и опять некоторый начальный (хоть нулевой, хоть единичный) вектор входов х, "обучение" (а не прогнозирование!!!) которого надо будет провести.
1
0 / 0 / 0
Регистрация: 30.03.2019
Сообщений: 17
22.03.2023, 20:51  [ТС]
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
В описанном мной случае - х выступает как вектор входов (корректируемых в ходе процесса подгонки их значений) сетки, а не весов.
Хорошо, спасибо. Кажется я вас понял.

В таком случае у меня также имеется код, который я подглядел в одной из статей:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class LinearSystemSolution(tf.keras.Model):
    def __init__(self, n_input_dimension, A, b, **kwargs):
        super(LinearSystemSolution, self).__init__(**kwargs)
        self.solution = tf.Variable(initial_value=tf.zeros((
                      n_input_dimension,1), dtype=tf.float64),
                      trainable= True, dtype=tf.float64, shape=(n_input_dimension,1))
        self.A = tf.convert_to_tensor(A)
        self.b = tf.convert_to_tensor(b)
    def call(self, x, training=True):
        error = tf.matmul(self.A, self.solution) - self.b
        self.add_loss(tf.reduce_sum(tf.square(error))/2)
        return self.solution
 
model = LinearSystemSolution(n_dim, A, b)
model.compile(optimizer = 'sgd')
 
history = model.fit(x_train, epochs = NET_EPOCHS, verbose=0, batch_size=NET_BATCH_SIZE)
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
Новая СЛАУ - новые веса сетки, и опять некоторый начальный (хоть нулевой, хоть единичный) вектор входов х, "обучение" (а не прогнозирование!!!) которого надо будет провести.
Можно ли это назвать нейронной сетью тогда? Разве это не обычный итерационный метод?
0
2642 / 1653 / 267
Регистрация: 19.02.2010
Сообщений: 4,377
23.03.2023, 00:15
Цитата Сообщение от Utopky Посмотреть сообщение
В таком случае у меня также имеется код, который я подглядел в одной из статей:
Вроде бы похоже на то, что нужно (я на питоне не пишу, tf тоже не использую).

Цитата Сообщение от Utopky Посмотреть сообщение
Можно ли это назвать нейронной сетью тогда? Разве это не обычный итерационный метод?
Ну, нейросеть Хопфилда почему-то называется нейросетью, хотя она необучаемая (точнее, её веса задаются внешней неитерационной процедурой), и её работа в ответ на предъявленный входной образ заключается в итерационной минимизации "внутренней энергии" (происходит коррекция вх.образа до тех пор, пока тот не перестаёт изменяться).
Так и тут нет никаких причин не называть это нейросеткой. Всё аналогично сетке Хопфилда. Отличие только в том, что с.Х. сама явно изменяет вх.образ в сторону одного из лок.минимумов - а тут вход корректируется градиентной оптимизацией (на основе метода обратного распространения ошибки).
1
0 / 0 / 0
Регистрация: 30.03.2019
Сообщений: 17
23.03.2023, 15:52  [ТС]
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
Ну, нейросеть Хопфилда почему-то называется нейросетью, хотя она необучаемая (точнее, её веса задаются внешней неитерационной процедурой), и её работа в ответ на предъявленный входной образ заключается в итерационной минимизации "внутренней энергии" (происходит коррекция вх.образа до тех пор, пока тот не перестаёт изменяться).
Спасибо, очень многое прояснилось. Значит других вариантов реализации быть не может? Тем же самым персептроном, например.
0
2642 / 1653 / 267
Регистрация: 19.02.2010
Сообщений: 4,377
23.03.2023, 18:32
Цитата Сообщение от Utopky Посмотреть сообщение
Значит других вариантов реализации быть не может?
А зачем усложнять тут способ решения?
Зачем выкидывать бритву Оккама и, например, вставлять здесь в нейросетку какие-либо нелинейные функции нейронов, если в исходной матем.формулировке задачи никаких нелинейностей нет?

Цитата Сообщение от Utopky Посмотреть сообщение
Тем же самым персептроном, например.
Так это и есть однослойный персептрон (с числом нейронов, равным числу уравнений в системе) - только без каких-либо нелинейных функций у его нейронов.
Просто у этого слоя неоднородных сумматоров обучаются не веса (коэффициенты) - а входы.
И обучение входов идёт всё тем же самым методом обратного распространения ошибки (хоть это и не видно напрямую из последнего кода - но tf именно обр.распространением будет делать автоматическое дифференцирование для sgd или любого иного встроенного в tf метода градиентной оптимизации).
2
0 / 0 / 0
Регистрация: 30.03.2019
Сообщений: 17
23.03.2023, 22:12  [ТС]
Хорошо, разобрался. Спасибо большое
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.03.2023, 22:12
Помогаю со студенческими работами здесь

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

Распознавание цифры по картинке с использованием нейронной сети
Помогите, пожалуйста, найти ошибку в программе. Её цель состоит в распознавании рукописных цифр с изображения. Для простоты используется...

Решение СЛАУ с использованием разложения матриц
Подскажите где можно найти алгоритм или реализацию ( желательно mathcad ) Решения СЛАУ c помощью разложения A = LU L - нижнетреугольная...

Решение СЛАУ с использованием метода релаксации
Решить СЛАУ с помощью метода релаксации \begin{cases} & \text 3*x1-x2+x3=10 \\ & \text 2*x1-x2+3*x3=3.5 \\ & \text...

Решение СЛАУ методом простой итерации с использованием динамических массивов
Программа ,которая находит решения СЛАУ за следующим алгоритмом:


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru