Комментарии 16
Насколько актуально программирование подобных сетей на таких языках как Java, C# и на им подобных? Или производительность настолько критична, что требуется С/С++?
+1
Зависит от размера нейронной сети. Но сомневаюсь что вам будет нужна такая нейросеть, в которой в данной задаче плюсы дадут реальный прирост. Так что для экспериментов — смело можно писать на чем угодно.
-2
Иногда — да. И тут же хочется icc, AVX2/AVX-512 и подобных вещей, позволяющих выжать ещё немного производительности.
Для начальных же экспериментов часть хватает python'а c нормально собранным numpy (как минимум, с каким-нибудь blas, ускоряет работу в 2-3 раза, что вполне ощутимо).
Для начальных же экспериментов часть хватает python'а c нормально собранным numpy (как минимум, с каким-нибудь blas, ускоряет работу в 2-3 раза, что вполне ощутимо).
0
Я решил создать перцептрон для распознования «AND» или «OR» на своем любимом языке C++
Ну и где class Perceptron или подобная конструкция?
+5
Логистическа регрессия (сигмоида) строит гладкую монотонную нелинейную функцую, имеющую форму буквы «S»:Иллюстрация шикарна
+4
Статья откуда взяты картинки (http://robocraft.ru/blog/algorithm/558.html, не сочтите за рекламу, сам нашел 2 минуты назад в гугле) написана гораздо лучше, а главное там написан список ссылок, как-то невежливо…
+6
Теория была написана мной с нуля, поэтому она выглядит как обрывки мыслей.
Источник на картинки я вставил.
Класс Perceptron я не стал расписывать, ведь я хотел всего лишь показать как с чистого листа сделать свою маленькую нейронную сеть без каких либо конструкций.
Мне правда очень приятно, что кому то понравилась статья, ведь это мой первый опыт! Большое спасибо!
Источник на картинки я вставил.
Класс Perceptron я не стал расписывать, ведь я хотел всего лишь показать как с чистого листа сделать свою маленькую нейронную сеть без каких либо конструкций.
Мне правда очень приятно, что кому то понравилась статья, ведь это мой первый опыт! Большое спасибо!
0
---(outputs — targets) % sig_der(outputs)
это что деление векторов? Это как?
В теории матриц нет понятия «деления матрицы», матрицы можно только умножать.
это что деление векторов? Это как?
В теории матриц нет понятия «деления матрицы», матрицы можно только умножать.
0
Я вижу, вы не попробовали данный пример и не вникли в градиентный спуск. Это поэлементное умножение.
arma.sourceforge.net/docs.html#operators
arma.sourceforge.net/docs.html#operators
0
Не смотря что тоже люблю C++ переписал на TSQL.
Считает 3 секунды.
Считает 3 секунды.
create function sigma(@x float) returns float as begin return (1.0 / (1 + exp(-1.0 * @x))) end;
create function sig_der(@x float) returns float as begin return @x * (1.0 - @x) end;
GO
declare @neurons int = 2;
declare @epoches int = 100;
declare @koef_edication float = 1.0;
declare @mat_samples table (val1 float, val2 float, val3 float, id int not null identity(1,1) primary key);
INSERT INTO @mat_samples( val1, val2, val3 ) VALUES
(0.0, 0.0, 1.0),
(1.0, 0.0, 1.0),
(0.0, 1.0, 1.0),
(1.0, 1.0, 1.0)
declare @mat_targets table (val float, id int not null identity(1,1) primary key);
INSERT INTO @mat_targets( val ) VALUES (0.0), (0.0), (0.0), (1.0)
declare @w table (val1 float, val2 float, val3 float); -- w.set_size(3,1);
INSERT INTO @w (val1, val2, val3) SELECT 1.0 + (rand()/0.9999999) * (-1.0 - 1.0), 1.0 + (rand()/0.9999999) * (-1.0 - 1.0), 1.0 + (rand()/0.9999999) * (-1.0 - 1.0);
declare @size_sample int = 3 * (select count(*) from @mat_samples)
while @epoches > 0
begin
declare @z table (val float);
insert into @z (val) -- Summator
select s.val1 * w.val1 + s.val2 * w.val2 + s.val3 * w.val3 from @mat_samples s, @w w
declare @output table (val float, id int not null identity(1,1) primary key);
insert into @output (val) -- auto outputs = sig(z);
select dbo.sigma(val) from @z
-- Gradient Descend
update o set o.val = cast(n.val / nullif(dbo.sig_der(o.val), 0.0) as int) from @output o
join (select o.val - t.val as val, o.id from @output o join @mat_targets t on o.id = t.id) n on o.id = n.id
declare @rs table (val1 float, val2 float, val3 float);
insert into @rs
select sum(s.val1*t.val1 / @size_sample), sum(s.val2*t.val2 / @size_sample), sum(s.val3*t.val3 / @size_sample) from @mat_samples s , (
select sum(val1) as val1, sum(val2) as val2, sum(val3) as val3 from (
select val as val1, 0 as val2, 0 as val3 from @output where id = 1
union all
select 0, val, 0 from @output where id = 2
union all
select 0, 0, val from @output where id = 3
) k ) t
update w set w.val1=@koef_edication * (w.val1-r.val1), w.val2=@koef_edication *(w.val2-r.val2), w.val3=@koef_edication *(w.val3-r.val3) from @w w, @rs r
set @epoches = @epoches - 1
end
select round(sum(w.val1*s.val1), 0), round(sum(w.val2*s.val2), 0), round(sum(w.val3*s.val3), 0) from @w w, @mat_samples s
0
А вот моя реализация перцептрона розенблатта для браузера на JavaScipt http://pierceptio.appspot.com/. Делал как курсовой лет 5 назад, переписывал код из этой статьи http://habrahabr.ru/post/140495/
0
«я не нашел простейших и прозрачных примеров а-ля «Hello world»»
И чтобы исправить это Вы написали статью с кучей графиков и сторонней библиотекой (с которой нужно разбираться). Действительно думаете, что это «Hello World»? IMHO пару кастомных классов — это должно быть пределом для этой статьи.
И чтобы исправить это Вы написали статью с кучей графиков и сторонней библиотекой (с которой нужно разбираться). Действительно думаете, что это «Hello World»? IMHO пару кастомных классов — это должно быть пределом для этой статьи.
0
Нейронная сеть вроде целительства — если есть пациент, который хочет верить, то появится и целитель, который будет исцелять снова и снова. Результат будет, но не у заказчика, а у исполнителя в кармане.
-2
Статья отличная, спасибо!
Жаль только картинки отвалились :(
Жаль только картинки отвалились :(
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Однослойный перцептрон для начинающих