Перейти к публикации
Форум - ComputerCraft
Syabro

Искуственная нейронная сеть (ИНС)

Рекомендованные сообщения

Всем привет!

Недавно решил проверить, что тут у вас и был огорчен - меня забанили на форуме  :unsure: Но сейчас не об этом! Как вы уже, наверное, поняли из названия темы, здесь будет кое-что интересное! А именно, я написал нейронную сеть. Она еще не дописана до конца, но один учитель есть, и она уже вполне может функционировать. Вот исходник: https://github.com/MrSyabro/Neuro
 

Вот пример программы: 

local neuro = require("Neuro")

network = neuro.Neurons:CreateNetwork (neuro.AFunctions:BipolarSigmoidFunction(), {3, 5, 5, 3}, neuro.Neurons.ACompute)
inputs = {
{1, 0, 1},
{0, 0, 1}}

outputs = {
{0, 1, 0},
{1, 1, 0}}

for i = 1, 50 do
  print(neuro.Learning.BackPropagationLearning:RunEpoch(network, inputs, outputs))
end

При вызове ф-ции Createnetwork кроме "{3, 5, 5, 3}" лучше ничего не трогать. Эта таблица определяет параметры сети. А именно слои и кол. нейронов в них. Первый слой входной, 3 нейрона - 3 входа, 2 по центру - скрытые, последний - выходной.

"inputs" и "outputs" - таблицы наборов уроков (подобраны случайно). {1, 0, 1} - вход, соответствует {0, 1, 0} выходу.

Далее 50 циклов уроков с выводом общей погрешности сети.


Вот только... Lua не нравится огромные значения после запятой.. так что получается "-1.#IND"

Изменено пользователем Syabro

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Расскажи для непосвященных, что оно делать умеет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А в чём функционал? Да и не описаны функции все.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Расскажи для непосвященных, что оно делать умеет?

Тебе лекцию написать? Это сложно. Она просто в зависимости от уроков будет отвечать на определенный вход.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тебе лекцию написать? Это сложно. Она просто в зависимости от уроков будет отвечать на определенный вход.

 

Да, я знаю что сложно. Не надо лекцию.

 

Просто привер ввода и поведения. Чтобы запустить и поиграться.

Что оно умеет делать. Чему можно научить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В общем-то забыл еще одну функцию! "output = network.Compute( input )" вот так из нее после уроков можно получить ответ


Да, я знаю что сложно. Не надо лекцию.

 

Просто привер ввода и поведения. Чтобы запустить и поиграться.

Что оно умеет делать. Чему можно научить.

Проблема в больших значениях после запятой -.-

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я же объяснил, что библиотека пока-что не дописана. По этому и обширной документации нету. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А потянут ли опенкомпы что-то серьёзное?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А потянут ли опенкомпы что-то серьёзное?

 

В рамках своих лимитов на количество действий в тик / памяти. Если оптимизировать как следует, можно и что-нибудь интересное запустить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В рамках своих лимитов на количество действий в тик / памяти. Если оптимизировать как следует, можно и что-нибудь интересное запустить.

Конекретнее. Как именно оптимизировать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Конекретнее. Как именно оптимизировать?

 

Я не про твой код. Это просто абстрактные рассуждения.

 

А что там с большими числами, удалось метачисла присобачить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я не про твой код. Это просто абстрактные рассуждения.

 

А что там с большими числами, удалось метачисла присобачить?

Нет, я не могу их сравнить друг с другом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Нет, я не могу их сравнить друг с другом.

Хм.

post-7-0-46460200-1464591571_thumb.png

 

А ты не думал построить нейронную сеть на микроконтроллерах, так, что бы один микроконтроллер выполнял роль нейрона?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
А ты не думал построить нейронную сеть на микроконтроллерах, так, что бы один микроконтроллер выполнял роль нейрона?

 

В любом случае огромные значения после запятой.

 

 

Хм.

 

81ySVuqaxyM.jpg

 

local learning = require("Neuro.Learning")
local neurons = require("Neuro.Neurons")
local funcs = require("Neuro.ActivationFunctions")
local mn = require("metanum")

network = neurons:CreateNetwork (funcs:SigmoidFunction(), {3, 5, 5, 5, 3}, neurons.ACompute)
nError = mn(100.01)
err = mn (0.00001)
inputs = {
{1, 0, 1},
{0, 0, 1}}

outputs = {
{0, 1, 0},
{1, 1, 0}}
while nError > err do
  nError = mn(learning.BackPropagationLearning:RunEpoch(network, inputs, outputs))
  print(nError)
end

print("")
local output = network:Compute({1, 0, 1})
for i = 1, #output do
  print(mn(output[i]))
end
Изменено пользователем Syabro

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А как работать с сетью? Всмысле прогонять через нее данные, что бы она на основе своей обученности выдавала новые значения. Или эта функция тоже недописана/не написана?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В первом посте есть пример обучения. Только тут нет выбора типа сети, нет адекватного управления дампами, представление данных совершенно костыльное.

 

Если есть идеи, как использовать нейросети в опенкомпах, можно написать либу, с поддержкой 4 самых популярных типов сетей. Благо, в основе они очень похожи, за исключением сверточных.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×