Не могу разобраться с teach_php - Visavi.net https://visavi.net/ RSS - Visavi.net https://visavi.net/assets/img/images/logo_small.png RSS - Visavi.net https://visavi.net/ [email protected] (admin) [email protected] (admin) Fri, 10 Jan 2025 16:38:30 +0300 Мысль понял. Я правда думал, что так как массив двумерный, то как раз благодаря второму элементу сеть и понимала бы, к какой папке относится данный элемент (я про array($index)). Буду пробовать. https://visavi.net/topics/31269/545014 Не могу разобраться с teach_php Валерий Thu, 26 Apr 2012 00:43:57 +0400 Сообщения https://visavi.net/topics/31269/545014 <blockquote class="blockquote">Не совсем понял, для чего одинаковые фото, различающиеся по яркости запихивать в 1 массив.</blockquote> если А - это фотка без обработки, а а1-а10 это фотки полученные после обработки А с яркостью от -100% до +100%, после обработки и чб, получились разные данные. если а1-а10 в разных массивах то сеть будет ставить вероятность для каждой не зная что это от одной фотки данные, из-за этого сильно снизится распознаваемость т.к при определённой яркости фотки разных людей станут одинаковыми(получается что то в виде if(a1 || a2 || a3) истина то всё - это этот человек), а если их объединить то таких ошибок будет намного меньше(тогда будет &quot;и&quot; а не &quot;или&quot;), а умножать 40000 надо будет если запихнешь а1-а10 в массив, пикселей то увеличится, вот и умножить не забудь.<br> <br> <em><span style="font-size:x-small">Добавлено через 01:02 сек.</span></em><br> собственно наверняка из-за этого и не работает.<br> <br> <em><span style="font-size:x-small">Добавлено через 06:46 сек.</span></em><br> и ещё некоторые вещи подбираются экспериментальным путём, тут $ann = fann_create(array(40000, 200, 3), 1.0, 0.7); вместо 200 попробуй больше(раз в 10) поставить, будет хуже меньше. тут , 1000, 0.001, 100) вместо 0.001(попробуй сначала 0.01 и 0.0001) тоже попробуй поэкспериментировать, и количество фоток с яркостью лучше не больше 10 делай сначала, если будет плохо работать, тоже поэкспериментируй. https://visavi.net/topics/31269/544982 Не могу разобраться с teach_php Александр Wed, 25 Apr 2012 23:13:07 +0400 Сообщения https://visavi.net/topics/31269/544982 Ну пока дообучалась моя сеть, проверил. Не работает нормально: на все три типа фото из обучающего материала примерно одно и то же говорит:<br> <blockquote class="blockquote"><br> php ran.php<br> Array<br> (<br> [0] =&gt; 1<br> [1] =&gt; 0<br> [2] =&gt; 0.022985305637121<br> )<br> <br> </blockquote> Так что даже не знаю... идея в этот раз была такая: 3 папки, и сеть должна была понимать, на фото из какой папки входящее фото похоже, если ничего похожего нет, то грубо говоря 0 0 0. В исходном скрипте, по которому я начинал, было только 2 папки - свои и чужие. Не знаю как, но вроде как работало.. А тут ни в какую <img src="https://visavi.net/uploads/stickers/sad.gif" alt="sad"> . Может я все таки ошибочно понимаю логику этого всего?<br> Не совсем понял, для чего одинаковые фото, различающиеся по яркости запихивать в 1 массив.. И если так, то у меня в каждой папке получится примерно по 40 массивов. И еще не понял, зачем 40000 умножать на к-во фото, мне что, надо в my_array запихивать эти 3*40 массивов? https://visavi.net/topics/31269/544956 Не могу разобраться с teach_php Валерий Wed, 25 Apr 2012 22:27:39 +0400 Сообщения https://visavi.net/topics/31269/544956 судя по коду фотки с разной яркостью обрабатываются как отдельные, надо вместе, либо соедини их в 1 фотку либо читай все одинаковые фото но с разной яркостью в 1 массив, если так сделаешь не забудь поправить 40000, умножив на количество фоток с яркостью.<br> <blockquote class="blockquote">Набросал второй скрипт. Все ли я правильно понял в плане работы fann_train, fann_save ?</blockquote> работать будет.<br> и код можно проще написать, примерно так.<br> <pre class="prettyprint"> &lt;? set_time_limit(0); //ini_set(&#039;memory_limit&#039;,&#039;1G&#039;); //если переменные из папки то можно использовать glob(&quot;*.txt&quot;) он умеет искать по шаблону что то вроде $array1 = glob(&#039;foto/filename*&#039;);//всё что начинается с filename // Китайская переменная //$array1 = array(&#039;filename99&#039;, &#039;filename199&#039;, &#039;filename299&#039;, &#039;filename399&#039;, &#039;filename499&#039;, &#039;filename599&#039;, &#039;filename699&#039;, &#039;filename799&#039;, &#039;filename899&#039;, &#039;filename923&#039;); $ann = fann_create(array(40000, 200, 3), 1.0, 0.7); //if ( fann_train($ann, $my_example, 1000, 0.001, 1000) == FALSE) fann_train($ann, unserialize(file_get_contents(&#039;filename99&#039;)), 1000, 0.001, 100) or exit(&#039;Could not train $ann.&#039;); fann_save($ann, &quot;my.ann&quot;); foreach($array1 as $val) //или с китайской переменной и так =&gt; ($c = count ($array1), $j = 1; $j &lt;= $c; $j++){ $ann = fann_create(&quot;my.ann&quot;); fann_train($ann, unserialize(file_get_contents( $val)), 1000, 0.001, 100) or exit(&#039;Could not train $ann.&#039;); fann_save($ann, &quot;my.ann&quot;); } ?&gt; </pre> https://visavi.net/topics/31269/544938 Не могу разобраться с teach_php Александр Wed, 25 Apr 2012 20:58:25 +0400 Сообщения https://visavi.net/topics/31269/544938 Набросал второй скрипт. Все ли я правильно понял в плане работы fann_train, fann_save ?<br> <pre class="prettyprint">&lt;? set_time_limit(0); //ini_set(&#039;memory_limit&#039;,&#039;1G&#039;); $j = 1; $my_example = array(); // Китайская переменная $array1 = array(&#039;filename99&#039;, &#039;filename199&#039;, &#039;filename299&#039;, &#039;filename399&#039;, &#039;filename499&#039;, &#039;filename599&#039;, &#039;filename699&#039;, &#039;filename799&#039;, &#039;filename899&#039;, &#039;filename923&#039;); $ann = fann_create(array(40000, 200, 3), 1.0, 0.7); //if ( fann_train($ann, $my_example, 1000, 0.001, 1000) == FALSE) if ( fann_train($ann, ($my_example = unserialize(file_get_contents(&#039;filename99&#039;))), 1000, 0.001, 100) == FALSE) exit(&#039;Could not train $ann.&#039;); fann_save($ann, &quot;my.ann&quot;); unset($my_example); while ( $j &lt;= count ($array1)) { $ann = fann_create(&quot;my.ann&quot;); if ( fann_train($ann, ($my_example = unserialize(file_get_contents($array1&#91;$j]))), 1000, 0.001, 100) == FALSE) exit(&#039;Could not train $ann.&#039;); fann_save($ann, &quot;my.ann&quot;); unset($my_example); $j++; } ?&gt; </pre> <br> Запустил. Предположительно будет выполняться чуть более 100 минут (много времени занимает загрузка в массив данных из файлов filename).<br> В общем завтра посмотрю, что получилось. https://visavi.net/topics/31269/544910 Не могу разобраться с teach_php Валерий Wed, 25 Apr 2012 19:58:43 +0400 Сообщения https://visavi.net/topics/31269/544910 В общем оптимизировать работу с мегамассивом мне не удалось и я решил разбить обучающий скрипт на 2 скрипта. Первый будет обрабатывать все фото, загонять их в <strong>my_example</strong> по сто штук и сохранять массив с сотней фоток в файлы именем filename&quot;НОМЕРпоследнегоЭЛЕМЕНТАмассива&quot;. Нагрузка следующая: проц на 100% одно ядро, память 25-30% (1Gb-1,5Gb). время на почти 1000 фото - 3-4 минуты.<br> Получаю несколько файлов:<br> <div class="hidden-text"> <span class="fw-bold">Скрытый контент:</span> Для выполнения действия необходимо авторизоваться!</div> <br> Вот такой скрипт:<br> <br> <pre class="prettyprint">cat get_array.php &lt;? set_time_limit(0); //ini_set(&#039;memory_limit&#039;,&#039;1G&#039;); $j = 0; $c = 0; $my_example = array(); for ( $i = 0; $i &lt; 3; $i++ ) { $index = array(0, 0, 0); $l = $i; $index&#91;$l] = 1; $d = dir(&quot;/opt/work/new_way/temp/$i&quot;); while($entry = $d-&gt;read()) { if ( strpos($entry, &#039;jpg&#039;)!==false ) { $im = imagecreatefromjpeg(&quot;/opt/work/new_way/temp/$i/$entry&quot;); $cur_array = array(); $cnt = 0; for($y=0; $y&lt;200; $y++) { for($x=0; $x &lt; 200; $x++) { $rgb = imagecolorat($im, $x, $y) / 16777215; $cur_array&#91;$cnt] = $rgb; $cnt++; } } imagedestroy($im); $my_example&#91;$j] = array($cur_array, array($index)); $c++; if ( $c == 100) { file_put_contents(&quot;filename$j&quot;, serialize($my_example)); unset($my_example); $c=0; $j++; } else {$j++;} } } } $j--; file_put_contents(&quot;filename$j&quot;, serialize($my_example)); unset($my_example); ?&gt; </pre> <br> Второй скрипт будет обучать/дообучать сеть на основании этих файлов или же восстановленных из них массивов..... Или даже так! - я могу собрать 1 массив из этих файлов и использовать его для обучения. Нужно подумать, какой вариант лучше (учитывая, что в дообучение я пока еще не вникал<img src="https://visavi.net/uploads/stickers/smile.gif" alt="smile"> ). https://visavi.net/topics/31269/544876 Не могу разобраться с teach_php Валерий Wed, 25 Apr 2012 16:56:50 +0400 Сообщения https://visavi.net/topics/31269/544876 Вроде как доучивать... Сейчас почитаю, попробую. https://visavi.net/topics/31269/544468 Не могу разобраться с teach_php Валерий Tue, 24 Apr 2012 14:14:30 +0400 Сообщения https://visavi.net/topics/31269/544468 Там же вообще можно учить понемногу, &quot;If fann_create is called with a sole string argument, it will attempt to load an ANN created with fann_save from the file at filename.&quot;(http://leenissen.dk/fann/fann_1_2_0/r2555.html ) если у fann_create первый параметр будет строкой, то она откроет файл сети после сохранения из fann_save. пожалуй самый нормальный вариант учить по пару десятков фоток за 1 раз. https://visavi.net/topics/31269/544465 Не могу разобраться с teach_php Александр Tue, 24 Apr 2012 14:04:55 +0400 Сообщения https://visavi.net/topics/31269/544465 Вставил/заменил:<br> <pre class="prettyprint">set_time_limit(0); ini_set(&#039;memory_limit&#039;,&#039;1G&#039;); </pre> <pre class="prettyprint">// if ( preg_match(&quot;/jpg/&quot;, $entry) ) if ( strpos($entry, &#039;jpg&#039;)!==false ) </pre> <pre class="prettyprint"> file_put_contents(&#039;filename&#039;, serialize($my_example)); </pre> <pre class="prettyprint">if ( fann_train($ann, ($my_example = unserialize(file_get_contents(&#039;filename&#039;))), 1000, 0.001, 100) == FALSE)</pre> <br> Результат:<br> От ограничения памяти пока пришлось отказаться - когда файл достигал 136 мегабайт выдавало следующее сообщение:<br> <blockquote class="blockquote">PHP Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 137971915 bytes) in /opt/work/new_way/teach.php on line 36</blockquote> Строка 36<br> <blockquote class="blockquote">file_put_contents(&#039;filename&#039;, serialize($my_example));</blockquote> <br> <br> Без ограничения памяти работает уже более получаса, но ее выделение растет! Думаю, когда файл дорастет до примерно 500 Мб память кончится, а работает так долго сейчас из-за того, что выполнение операции гораздо медленнее, так как постоянно идет загрузка этого файла массива в память и выгрузка. https://visavi.net/topics/31269/544463 Не могу разобраться с teach_php Валерий Tue, 24 Apr 2012 13:51:44 +0400 Сообщения https://visavi.net/topics/31269/544463 для оптимизации процессора можно заменить preg_match(&quot;/jpg/&quot;, $entry) на strpos($entry, &#039;jpg&#039;)!==false т.к во вложеном цикле же находится. попробуй записать полученный массив сначала в file_put_contents(&#039;filename&#039;, serialize($my_example)); а потом в другом отдельном скрипте обучить из ($my_example = unserialize(file_get_contents()) https://visavi.net/topics/31269/544434 Не могу разобраться с teach_php Александр Tue, 24 Apr 2012 12:03:53 +0400 Сообщения https://visavi.net/topics/31269/544434 попробуй в начале написать<br> set_time_limit(0);<br> ini_set(&#039;memory_limit&#039;,&#039;1G&#039;); https://visavi.net/topics/31269/544431 Не могу разобраться с teach_php Александр Tue, 24 Apr 2012 11:52:11 +0400 Сообщения https://visavi.net/topics/31269/544431 Вот заценил выделение ресурсов:<br> <blockquote class="blockquote">PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND <br> 1161 user 20 0 5160m 3.7g 1432 R 28 94.8 0:35.21 php </blockquote> <br> А вот как выглядит при обучении на 20-ти фото:<br> <blockquote class="blockquote">PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND<br> 1266 user 20 0 639m 380m 9480 R 100 9.6 1:05.10 php </blockquote> <br> Отличия: проц при малом к-ве фото загружен на 100% (1 ядро), память 10% (когда было чуть больше (около 100) фото - памяти до 30% выделялось). Теперь же проц на 80-100% загружен только первые секунд 10, пока память растет до 95%, после нагрузка падает до 20-30%. Постоянно растет параметр &quot;VIRT&quot;, где-то когда он доходит до 6000+ выполнение скрипта и прерывается (если я правильно понимаю заканчивается и своп). Предполагаю 2 варианта решения: китайское и нормальное. Первое - сделать побольше своп (у меня 2Гб вроде, не помню). Ну а нормальное решение: это оптимизировать использование ресурсов (пока правда не особо представляю как это реализовать, т.к. с проблемой столкнулся впервые). https://visavi.net/topics/31269/544430 Не могу разобраться с teach_php Валерий Tue, 24 Apr 2012 11:45:08 +0400 Сообщения https://visavi.net/topics/31269/544430 Запускаю второй скрипт, который как обычно перебирает фотки с разложением на пиксели и запихивает в массив.<br> <pre class="prettyprint">&lt;?php $j = 0; $my_example = array(); for ( $i = 0; $i &lt; 3; $i++ ) { $index = array(0, 0, 0); $l = $i; $index&#91;$l] = 1; $d = dir(&quot;/opt/work/new_way/temp/$i&quot;); while($entry = $d-&gt;read()) { if ( preg_match(&quot;/jpg/&quot;, $entry) ) { $im = imagecreatefromjpeg(&quot;/opt/work/new_way/temp/$i/$entry&quot;); $cur_array = array(); $cnt = 0; for($y=0; $y&lt;200; $y++) { for($x=0; $x &lt; 200; $x++) { $rgb = imagecolorat($im, $x, $y) / 16777215; $cur_array&#91;$cnt] = $rgb; $cnt++; } } imagedestroy($im); $my_example&#91;$j] = array($cur_array, array($index)); $j++; } } } $ann = fann_create(array(40000, 200, 3), 1.0, 0.7); if ( fann_train($ann, $my_example, 1000, 0.001, 1000) == FALSE) exit(&#039;Could not train $ann.&#039;); fann_save($ann, &quot;my.ann&quot;); ?&gt; </pre> И тут столкнулся с проблемой - после того как скрипт висит пару минут (всмысле запущен и чего-то делает) выдает следующее:<br> <blockquote class="blockquote">php teach.php <br> Убито<br> </blockquote> Уменьшил к-во фото до 100-150-ти - все работает. Сначала подумал, что может что-то с &quot;железом&quot; (компьютер староват, если честно (х-ки: проц Pentium(R) Dual CPU E2200 @ 2.20GHz, память 4Гб, система Ubuntu 11.10 x64, винт IDE 40Gb)), ЖД, например или память. Решил протестировать, сделал MHDD - все норм. Память не проверял, так как сейчас пришла мысль, что может дело в том, что превышается какое-то значение времени на выполнение операции при выполнении скрипта, или ограничевается выделение ресурсов... В общем сейчас хочу копнуть в эту сторону, а то не могу даже затестить то что сделал теперь <img src="https://visavi.net/uploads/stickers/sad.gif" alt="sad"> . https://visavi.net/topics/31269/544423 Не могу разобраться с teach_php Валерий Tue, 24 Apr 2012 11:20:47 +0400 Сообщения https://visavi.net/topics/31269/544423 Так, сделал 2 скрипта. 1-й берет фотку из папки 0, 1 или 2 и копирует его в папку temp/0, 1, 2. Далее делает 13 копий с различной яркостью. В результате имею ~ 1000 фото в сумме по 3-м папкам.<br> <br> <pre class="prettyprint">&lt;?php for ( $i = 0; $i &lt; 3; $i++ ) { $d = dir(&quot;$i/&quot;); while($entry = $d-&gt;read()) { if ( preg_match(&quot;/jpg/&quot;, $entry) ) { $image = &quot;$i/$entry&quot;; $dir = &quot;/opt/work/new_way/temp&quot;; $new_image = &quot;$dir/$image&quot;; if (!copy($image, $new_image)) { echo &quot;не удалось скопировать $file...\n&quot;; } chdir(&quot;$dir/$i&quot;); $input_image = $new_image; $l = -90; for ($l; $l &lt;= 150; $l = $l+20) { $image = imagecreatefromjpeg($input_image); //третий параметр устанавливает уровень яркости изображения. imagefilter($image, IMG_FILTER_BRIGHTNESS, $l); //imagefilter($image, IMG_FILTER_MEAN_REMOVAL); //imagefilter($image, IMG_FILTER_CONTRAST, -25); imagejpeg($image, rand(10000,999999).&#039;.jpg&#039;, 100); imagedestroy($image); } chdir(&quot;/opt/work/new_way/&quot;); } } } ?&gt; </pre> https://visavi.net/topics/31269/544422 Не могу разобраться с teach_php Валерий Tue, 24 Apr 2012 11:19:37 +0400 Сообщения https://visavi.net/topics/31269/544422 imagejpeg($im, rand(10000,999999).&#039;.jpg&#039;); сохраняет картинку в папку со случайным именем, что бы можно было посмотреть пригодна ли она после фильтров для обучения. <br> <blockquote class="blockquote"> цикл с разложением на пиксели вообще убрать? </blockquote> нет, просто с начало в цикле сделай один раз как в статье(просто в чб), потом увеличь яркость например на 20% и опять в чб, увеличь ещё на 20% и опять как в статье, соедини все результаты, при меньшей яркости будет больше 1 (серый стал 1(потеря полезной инфы)), потом например увеличил яркость получилось(тот серый цвет стал 0), теперь инфы потерялось меньше, вот зачем это надо. кстати а почему бы не отставит грации серого и переводить каждый цвет в двоичную систему, тогда проблемы как запихнуть картинку внутрь отпадают. (256 &gt; 11111111 и в сеть) 256*200*200=10 240 000, многовато, лучше ещё уменьшить количество цветов (хотя тоже должно работать довольно быстро). Если так сделаешь то можно не менять тип сети, но куда лучше будет использовать предназначенную для этого нейросеть(лучше пожалуй сверточную). <br> <blockquote class="blockquote">Кстати я даже не в курсе какая сеть</blockquote> У тебя скорее всего обычная однослойная нейросеть. Ещё пожалуй стоит поменять тип обучения <a href="http://leenissen.dk/fann/fann_1_2_0/r1996.html" target="_blank" rel="nofollow">http://leenissen.dk/fann/fann_1_2_0/r1996.html</a> https://visavi.net/topics/31269/542586 Не могу разобраться с teach_php Александр Thu, 19 Apr 2012 19:38:50 +0400 Сообщения https://visavi.net/topics/31269/542586