<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>по стопам webkill&#039;а &#187; нейронная сеть</title>
	<atom:link href="http://blog.lukmus.ru/tag/neyronnaya-set/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.lukmus.ru</link>
	<description>это наш химический дом для печальных жителей Земли</description>
	<lastBuildDate>Sat, 21 Oct 2023 19:10:13 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<item>
		<title>нейронные сети на ruby</title>
		<link>http://blog.lukmus.ru/2013/01/21/neyronnyie-seti-na-ruby/</link>
		<comments>http://blog.lukmus.ru/2013/01/21/neyronnyie-seti-na-ruby/#comments</comments>
		<pubDate>Mon, 21 Jan 2013 22:31:28 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[ruby & ruby on rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby-fann]]></category>
		<category><![CDATA[искусственный интеллект]]></category>
		<category><![CDATA[нейронная сеть]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=1774</guid>
		<description><![CDATA[Недавно я узнал о том, что больше не надо заморачиваться и писать всю логику работы нейросетки. Собственно говоря, это уже давно можно было не делать благодаря существованию такой библиотеки на C как Fast Artificial Neural Network. А спустя считанные минуты я с удивлением обнаружил, что FANN уже давно портатированна на различные языки более высокого уровня, [...]]]></description>
			<content:encoded><![CDATA[<p>Недавно я узнал о том, что больше не надо заморачиваться и писать всю логику работы нейросетки. Собственно говоря, это уже давно можно было не делать благодаря существованию такой библиотеки на C как <a href="http://leenissen.dk/fann/wp/" target="_blank" rel='nofollow'>Fast Artificial Neural Network</a>. А спустя считанные минуты я с удивлением обнаружил, что FANN уже давно портатированна на <a href="http://leenissen.dk/fann/wp/language-bindings/" target="_blank" rel='nofollow'>различные языки более высокого уровня</a>, включая PHP, Python и, конечно, апогей человеческого гения &#8211; Ruby.<br />
<img src="http://blog.lukmus.ru/wp-content/uploads/2013/01/kaspersky.jpg" alt="Касперский пиарится на Красном Октябре" title="Касперский пиарится на Красном Октябре" width="517" height="400" class="aligncenter size-full wp-image-1776" /><span id="more-1774"></span><br />
Для Ruby интерфейс к FANN обеспечивает гем <a href="http://ruby-fann.rubyforge.org/" target="_blank" rel='nofollow'>ruby-fann</a>.</p>
<h2>установка</h2>
<p>Для установки его под рельсы надо закинуть в <code>Gemfile</code></p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="ruby" style="font-family:monospace;">gem <span style="color:#996600;">'ruby-fann'</span></pre></td></tr></table></div>

<p>и забандлить</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;">bundle <span style="color: #c20cb9; font-weight: bold;">install</span></pre></td></tr></table></div>

<h3>установка graphviz</h3>
<p>Еще для отображения графической схемы нейронной сети можно воспользоваться <code>graphviz</code>. Эта штука вроде как должна экспортировать графическую схему сетки в PNG или VRML.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">yum install</span> graphviz
gem <span style="color: #c20cb9; font-weight: bold;">install</span> ruby-graphviz</pre></td></tr></table></div>

<h2>эксплуатация</h2>
<p>У гема есть <a href="http://ruby-fann.rubyforge.org/rdoc/" target="_blank" rel='nofollow'>подробная документация</a>.<br />
В качестве примера я не буду дублировать код на сайте гема, а приведу нейросеть для решения <a href="http://www.aiportal.ru/downloads/neural-networks/nn_xor.html" target="_blank" rel='nofollow'>классической задачи с XOR</a>, только с большим количеством нейронов.<br />
<img src="http://blog.lukmus.ru/wp-content/uploads/2013/01/image0341.jpg" alt="" title="image034" width="517" height="294" class="alignnone size-full wp-image-1791" /><br />
Код упакован в rake-файл рельс.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="ruby" style="font-family:monospace;">namespace <span style="color:#ff3333; font-weight:bold;">:test</span> <span style="color:#9966CC; font-weight:bold;">do</span>
  desc <span style="color:#996600;">'test NN'</span>
  task <span style="color:#ff3333; font-weight:bold;">:nn</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:environment</span> <span style="color:#9966CC; font-weight:bold;">do</span>
&nbsp;
    <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'ruby_fann/neural_network'</span>
    <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'ruby_fann/neurotica'</span> <span style="color:#008000; font-style:italic;">#только для graphviz</span>
&nbsp;
    <span style="color:#008000; font-style:italic;">#объявляется ИНС</span>
    fann = <span style="color:#6666ff; font-weight:bold;">RubyFann::Standard</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>
	<span style="color:#ff3333; font-weight:bold;">:num_inputs</span><span style="color:#006600; font-weight:bold;">=&gt;</span><span style="color:#006666;">2</span>, <span style="color:#008000; font-style:italic;">#входы</span>
	<span style="color:#008000; font-style:italic;">#кол-во нейронов на первом и </span>
        <span style="color:#008000; font-style:italic;">#втором уровнях соответственно</span>
	<span style="color:#ff3333; font-weight:bold;">:hidden_neurons</span><span style="color:#006600; font-weight:bold;">=&gt;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">3</span>, <span style="color:#006666;">2</span><span style="color:#006600; font-weight:bold;">&#93;</span>, 
	<span style="color:#ff3333; font-weight:bold;">:num_outputs</span><span style="color:#006600; font-weight:bold;">=&gt;</span><span style="color:#006666;">1</span> <span style="color:#008000; font-style:italic;">#выходы</span>
    <span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
    <span style="color:#008000; font-style:italic;">#обучение</span>
    pairs=<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span>,<span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span>,<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">1</span>,<span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span>,<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span>,<span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#93;</span>,<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">1</span>,<span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#008000; font-style:italic;">#учебные данные</span>
    training_data = <span style="color:#6666ff; font-weight:bold;">RubyFann::TrainData</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>
  	<span style="color:#ff3333; font-weight:bold;">:inputs</span><span style="color:#006600; font-weight:bold;">=&gt;</span>pairs, 
  	<span style="color:#008000; font-style:italic;">#правильные результаты в соответствии с учебными данными</span>
  	<span style="color:#ff3333; font-weight:bold;">:desired_outputs</span><span style="color:#006600; font-weight:bold;">=&gt;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span>,<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#93;</span>,<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#93;</span>,<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#93;</span> 
    <span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
    <span style="color:#008000; font-style:italic;">#собственно само обучение</span>
    fann.<span style="color:#9900CC;">train_on_data</span><span style="color:#006600; font-weight:bold;">&#40;</span>
	training_data, <span style="color:#008000; font-style:italic;">#данные для обучения</span>
	<span style="color:#006666;">1000</span>, <span style="color:#008000; font-style:italic;">#макс. кол-во эпох</span>
	<span style="color:#006666;">1</span>, <span style="color:#008000; font-style:italic;">#кол-во эпох спустя которые выводить рез-тат</span>
	<span style="color:#006666;">0.01</span> <span style="color:#008000; font-style:italic;">#допустимая погрешность</span>
    <span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
    <span style="color:#008000; font-style:italic;">#проверка обученности сети</span>
    pairs.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>pair<span style="color:#006600; font-weight:bold;">|</span>
	<span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;#{pair}: #{fann.run(pair)}&quot;</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
    <span style="color:#008000; font-style:italic;">#вывод полученных нейронов</span>
    fann.<span style="color:#9900CC;">get_neurons</span>.<span style="color:#9900CC;">each</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>n<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#CC0066; font-weight:bold;">p</span> n<span style="color:#006600; font-weight:bold;">&#125;</span>
&nbsp;
    <span style="color:#008000; font-style:italic;">#вывод графической схемы</span>
    graph=<span style="color:#6666ff; font-weight:bold;">RubyFann::Neurotica</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    graph.<span style="color:#9900CC;">graph</span><span style="color:#006600; font-weight:bold;">&#40;</span>fann, <span style="color:#996600;">'xor_nn.png'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;">$ bundle <span style="color: #7a0874; font-weight: bold;">exec</span> rake test:nn
Max epochs     <span style="color: #000000;">1000</span>. Desired error: <span style="color: #000000;">0.0099999998</span>.
Epochs            <span style="color: #000000;">1</span>. Current error: <span style="color: #000000;">0.2501267791</span>. Bit fail <span style="color: #000000;">4</span>.
Epochs            <span style="color: #000000;">2</span>. Current error: <span style="color: #000000;">0.2520069778</span>. Bit fail <span style="color: #000000;">4</span>.
Epochs            <span style="color: #000000;">3</span>. Current error: <span style="color: #000000;">0.2551138699</span>. Bit fail <span style="color: #000000;">4</span>.
Epochs            <span style="color: #000000;">4</span>. Current error: <span style="color: #000000;">0.2513942719</span>. Bit fail <span style="color: #000000;">4</span>.
Epochs            <span style="color: #000000;">5</span>. Current error: <span style="color: #000000;">0.2500072420</span>. Bit fail <span style="color: #000000;">4</span>.
...
Epochs          <span style="color: #000000;">370</span>. Current error: <span style="color: #000000;">0.0440760627</span>. Bit fail <span style="color: #000000;">1</span>.
Epochs          <span style="color: #000000;">371</span>. Current error: <span style="color: #000000;">0.0343447179</span>. Bit fail <span style="color: #000000;">0</span>.
Epochs          <span style="color: #000000;">372</span>. Current error: <span style="color: #000000;">0.0233961642</span>. Bit fail <span style="color: #000000;">0</span>.
Epochs          <span style="color: #000000;">373</span>. Current error: <span style="color: #000000;">0.0175627228</span>. Bit fail <span style="color: #000000;">0</span>.
Epochs          <span style="color: #000000;">374</span>. Current error: <span style="color: #000000;">0.0113563286</span>. Bit fail <span style="color: #000000;">0</span>.
Epochs          <span style="color: #000000;">375</span>. Current error: <span style="color: #000000;">0.0067548323</span>. Bit fail <span style="color: #000000;">0</span>.
<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">0</span>, <span style="color: #000000;">0</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>: <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">0.045396712927026114</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>
<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">1</span>, <span style="color: #000000;">0</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>: <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">0.9389753126711914</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>
<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">0</span>, <span style="color: #000000;">1</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>: <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">0.9501094945639519</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>
<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">1</span>, <span style="color: #000000;">1</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>: <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">0.061412697926247546</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>:<span style="color: #007800;">activation_function</span>=<span style="color: #000000; font-weight: bold;">&gt;</span>:linear, :<span style="color: #007800;">activation_steepness</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">0.0</span>, :<span style="color: #007800;">layer</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">0</span>, :<span style="color: #007800;">sum</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">0.0</span>, :<span style="color: #007800;">value</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">1.0</span>, :<span style="color: #007800;">connections</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #7a0874; font-weight: bold;">&#125;</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>:<span style="color: #007800;">activation_function</span>=<span style="color: #000000; font-weight: bold;">&gt;</span>:linear, :<span style="color: #007800;">activation_steepness</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">0.0</span>, :<span style="color: #007800;">layer</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">0</span>, :<span style="color: #007800;">sum</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">0.0</span>, :<span style="color: #007800;">value</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">1.0</span>, :<span style="color: #007800;">connections</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #7a0874; font-weight: bold;">&#125;</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>:<span style="color: #007800;">activation_function</span>=<span style="color: #000000; font-weight: bold;">&gt;</span>:sigmoid_stepwise, :<span style="color: #007800;">activation_steepness</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">0.5</span>, :<span style="color: #007800;">layer</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">1</span>, :<span style="color: #007800;">sum</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">1.3608390766086655</span>, :<span style="color: #007800;">value</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">0.9258633161869951</span>, :<span style="color: #007800;">connections</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">0</span>, <span style="color: #000000;">1</span>, <span style="color: #000000;">2</span><span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #7a0874; font-weight: bold;">&#125;</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>:<span style="color: #007800;">activation_function</span>=<span style="color: #000000; font-weight: bold;">&gt;</span>:sigmoid_stepwise, :<span style="color: #007800;">activation_steepness</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">0.5</span>, :<span style="color: #007800;">layer</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">1</span>, :<span style="color: #007800;">sum</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">5.5199047483640955</span>, :<span style="color: #007800;">value</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">1.0</span>, :<span style="color: #007800;">connections</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">0</span>, <span style="color: #000000;">1</span>, <span style="color: #000000;">2</span><span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #7a0874; font-weight: bold;">&#125;</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>:<span style="color: #007800;">activation_function</span>=<span style="color: #000000; font-weight: bold;">&gt;</span>:sigmoid_stepwise, :<span style="color: #007800;">activation_steepness</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">0.5</span>, :<span style="color: #007800;">layer</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">1</span>, :<span style="color: #007800;">sum</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">1.7510475747029322</span>, :<span style="color: #007800;">value</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">0.9606836699618748</span>, :<span style="color: #007800;">connections</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">0</span>, <span style="color: #000000;">1</span>, <span style="color: #000000;">2</span><span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #7a0874; font-weight: bold;">&#125;</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>:<span style="color: #007800;">activation_function</span>=<span style="color: #000000; font-weight: bold;">&gt;</span>:sigmoid_stepwise, :<span style="color: #007800;">activation_steepness</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">0.5</span>, :<span style="color: #007800;">layer</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">2</span>, :<span style="color: #007800;">sum</span>=<span style="color: #000000; font-weight: bold;">&gt;</span>-<span style="color: #000000;">2.005618142945213</span>, :<span style="color: #007800;">value</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">0.029562103469001694</span>, :<span style="color: #007800;">connections</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">3</span>, <span style="color: #000000;">4</span>, <span style="color: #000000;">5</span>, <span style="color: #000000;">6</span><span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #7a0874; font-weight: bold;">&#125;</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>:<span style="color: #007800;">activation_function</span>=<span style="color: #000000; font-weight: bold;">&gt;</span>:sigmoid_stepwise, :<span style="color: #007800;">activation_steepness</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">0.5</span>, :<span style="color: #007800;">layer</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">2</span>, :<span style="color: #007800;">sum</span>=<span style="color: #000000; font-weight: bold;">&gt;</span>-<span style="color: #000000;">2.3070915806646646</span>, :<span style="color: #007800;">value</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">0.018010737799533</span>, :<span style="color: #007800;">connections</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">3</span>, <span style="color: #000000;">4</span>, <span style="color: #000000;">5</span>, <span style="color: #000000;">6</span><span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #7a0874; font-weight: bold;">&#125;</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>:<span style="color: #007800;">activation_function</span>=<span style="color: #000000; font-weight: bold;">&gt;</span>:sigmoid_stepwise, :<span style="color: #007800;">activation_steepness</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">0.5</span>, :<span style="color: #007800;">layer</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">3</span>, :<span style="color: #007800;">sum</span>=<span style="color: #000000; font-weight: bold;">&gt;</span>-<span style="color: #000000;">1.4195548161431304</span>, :<span style="color: #007800;">value</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">0.061412697926247546</span>, :<span style="color: #007800;">connections</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">7</span>, <span style="color: #000000;">8</span>, <span style="color: #000000;">9</span><span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #7a0874; font-weight: bold;">&#125;</span>
rake aborted<span style="color: #000000; font-weight: bold;">!</span>
graph attribute <span style="color: #ff0000;">'output'</span> invalid
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>rvm<span style="color: #000000; font-weight: bold;">/</span>gems<span style="color: #000000; font-weight: bold;">/</span>ruby-1.9.2-p290<span style="color: #000000; font-weight: bold;">/</span>gems<span style="color: #000000; font-weight: bold;">/</span>ruby-graphviz-1.0.8<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>graphviz<span style="color: #000000; font-weight: bold;">/</span>attrs.rb:<span style="color: #000000;">53</span>:in <span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>=<span style="color: #ff0000;">'
/usr/local/rvm/gems/ruby-1.9.2-p290/gems/ruby-graphviz-1.0.8/lib/graphviz.rb:378:in `[]='</span>
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>rvm<span style="color: #000000; font-weight: bold;">/</span>gems<span style="color: #000000; font-weight: bold;">/</span>ruby-1.9.2-p290<span style="color: #000000; font-weight: bold;">/</span>gems<span style="color: #000000; font-weight: bold;">/</span>ruby-graphviz-1.0.8<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>graphviz.rb:<span style="color: #000000;">901</span>:in <span style="color: #000000; font-weight: bold;">`</span>block <span style="color: #000000; font-weight: bold;">in</span> initialize<span style="color: #ff0000;">'
/usr/local/rvm/gems/ruby-1.9.2-p290/gems/ruby-graphviz-1.0.8/lib/graphviz.rb:878:in `each'</span>
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>rvm<span style="color: #000000; font-weight: bold;">/</span>gems<span style="color: #000000; font-weight: bold;">/</span>ruby-1.9.2-p290<span style="color: #000000; font-weight: bold;">/</span>gems<span style="color: #000000; font-weight: bold;">/</span>ruby-graphviz-1.0.8<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>graphviz.rb:<span style="color: #000000;">878</span>:in <span style="color: #000000; font-weight: bold;">`</span>initialize<span style="color: #ff0000;">'
/usr/local/rvm/gems/ruby-1.9.2-p290/gems/ruby-fann-1.1.3/lib/ruby_fann/neurotica.rb:37:in `new'</span>
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>rvm<span style="color: #000000; font-weight: bold;">/</span>gems<span style="color: #000000; font-weight: bold;">/</span>ruby-1.9.2-p290<span style="color: #000000; font-weight: bold;">/</span>gems<span style="color: #000000; font-weight: bold;">/</span>ruby-fann-1.1.3<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>ruby_fann<span style="color: #000000; font-weight: bold;">/</span>neurotica.rb:<span style="color: #000000;">37</span>:in <span style="color: #000000; font-weight: bold;">`</span>graph<span style="color: #ff0000;">'
/home/username/ror/nn/lib/tasks/test.rake:42:in `block (2 levels) in &lt;top (required)&gt;'</span>
Tasks: TOP =<span style="color: #000000; font-weight: bold;">&gt;</span> test:nn
<span style="color: #7a0874; font-weight: bold;">&#40;</span>See full trace by running task with --trace<span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></td></tr></table></div>

<p>Как видно по ошибке в конце вывода, удалось все кроме создания PNG-файла. Но т.к. <code>graphviz</code> далеко не самый важный и нужный элемент, то и Бог с ним.<br />
Описываемое далее выходит за рамки темы объявленной в заголовке, однако, чтобы не забыть я напишу.</p>
<h3>определение количества нейронов</h3>
<p>Теоретически, именно теоретически, количество нейронов определяется по формуле из следствия теорем Арнольда – Колмогорова – Хехт-Нильсена:<br />
<img src="http://blog.lukmus.ru/wp-content/uploads/2013/01/18-0.gif" alt="" title="18-0" width="330" height="54"  /><br />
N<sub>y</sub> — количество выходов;<br />
Q — количество обучающих примеров;<br />
N<sub>w</sub> — необходимое число синаптических связей;<br />
N<sub>x</sub> — количество входов.<br />
Из этого неравенства следует, что количество нейронов для сети с одним скрытым слоем определяется:<br />
<img src="http://blog.lukmus.ru/wp-content/uploads/2013/01/19-0.gif" alt="" title="19-0" width="106" height="52" class="alignnone size-full wp-image-1809" /><br />
Если нарисовать схему нейросети с более чем одним скрытым слоем, то становится очевидным равенство:<br />
<img src="http://blog.lukmus.ru/wp-content/uploads/2013/01/f1.jpg" alt="" title="f1" width="220" height="59" class="alignnone size-full wp-image-1811" /><br />
l — количество слоев;<br />
N<sub>i</sub> — количество нейронов в i-м слое.<br />
Если же в каждом скрытом слое подразумевается одно и тоже количество нейронов, то тождество преобретает вид:<br />
<img src="http://blog.lukmus.ru/wp-content/uploads/2013/01/f2.jpg" alt="" title="f2" width="220" height="59" class="alignnone size-full wp-image-1814" /><br />
Решив квадратное уравнение относительно N и отбросив заведомо отрицательный корень, получаем, что количество нейронов в каждом скрытом слое определяется по формуле:<br />
<img src="http://blog.lukmus.ru/wp-content/uploads/2013/01/f31.jpg" alt="" title="f3" width="259" height="59" class="alignnone size-full wp-image-1817" /><br />
На этом с математикой пока все. Все что идет после следствия из теорем выводилось мной, поэтому возможна ошибка.<br />
<meta property="og:image" content="http://blog.lukmus.ru/wp-content/uploads/2013/01/kaspersky.jpg" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2013/01/21/neyronnyie-seti-na-ruby/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
