Проблема с крупными массивами

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Re: Проблема с крупными массивами

Сообщение Logo » 04.01.2009 20:30:56

Mantius писал(а):
Распознать образ, - необязательно иметь такого объёма массив.

Предложите какой объем будет меньшим, но приемлемым.

Да я Вам и предложил, "Поищите в гуле технологию octree,..". Подходит, - хорошо, не подходит - извините.
"octree", это не линейный массив, а деревоподобная структура.
Обратите внимание на то, что мозг человека имея чрезвычайную избыточность, НЕ ОПЕРИРУЕТ ОДНОВРЕМЕННО СО ВСЕМИ НЕЙРОНАМИ (даже со всеми активными), но в конкретный момент времени работает конкретный участок из заполненых данными. Почему Вы избрали путь обработки всего масива? Может переосмыслить алгоритм?
На даный момент, либо стройте массив в файле, то, что коллеги предлагали выше,либо в 10 раз увеличивайте мощь компёютера, но мне кажется, что нужно менять алгоритм, так, как практическое применение выбраного Вами пути, в ближайшее время не реализуемо. Если нужно просто создать прототип и доказать свою методику, - отработайте на меньшей матрице и если это вызовет заинтересованость, то Вам предоставят все необходимое для дальнейшего развития идеи.

Хотя задачи я вашей полностью не знаю и могу наговорить глупостей - извините :oops:
Logo
постоялец
 
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Re: Проблема с крупными массивами

Сообщение Mantius » 04.01.2009 21:05:54

Обратите внимание на то, что мозг человека имея чрезвычайную избыточность, НЕ ОПЕРИРУЕТ ОДНОВРЕМЕННО СО ВСЕМИ НЕЙРОНАМИ (даже со всеми активными)

а на то, что программе этой до мозга человека как раком до Китая значения уже не имеет?
Почему Вы избрали путь обработки всего масива?

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

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

Любой совет лучше, чем его отсутствие и игнорирование вопроса, так что спасибо уже за то, что откликнулись =)
Mantius
новенький
 
Сообщения: 21
Зарегистрирован: 30.12.2008 23:44:51

Re: Проблема с крупными массивами

Сообщение shade » 04.01.2009 21:53:22

Mantius писал(а):К сожалению, нейронная сеть работает как одно целое, т.е. обрабатывать нужно все нейроны сразу, иначе она просто "тупеет" и смысл многослойности и т.п. теряется.

"Тупость" нейроной сети зависит от числа нейронов (или как там у вас называется, персептронов?..) и от связей между ними, а не от того, как именно эти связи реализуются/моделируются.

Для меня, как математика-программиста, нейронная сеть - это черный ящик вычисляющий функцию Y = F(X), где X - входные данные (запрос, например фотография), Y - выходные данные (ответ, например "корова"), F - это функция нейронной сети, а процесс обучения НС - это поиск и уточнение соответствующей функции F. А раз так, то мой разум нескован рамками персептронов, слоёв и т.п. (я их вообще не замечаю и не думаю о них), я вижу функцию и думаю как написать алгоритм реализующий эту функцию. Я хотел предложить алгоритм этой функции F. Жаль, что он был не понят.

Дальнеший спор, без уточнения задачи, я считаю бесполезным.
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Re: Проблема с крупными массивами

Сообщение Mantius » 04.01.2009 22:04:30

"Тупость" нейроной сети зависит от числа нейронов (или как там у вас называется, персептронов?..) и от связей между ними, а не от того, как именно эти связи реализуются/моделируются.

Разумеется, но когда работает только половина нейронов-это разве не другое число?
Я хотел предложить алгоритм этой функции F.

Проблема в том, что этот алгоритм функции F давно известен, но труднореализуем при имеющихся вычислительных мощностях. Его не нужно искать второй раз, нужно решить что делать с нехваткой мощностей, я решил просто пожертвовать количеством нейронов и, как следствие, разумностью сети ради её работоспособности.

Добавлено спустя 1 минуту 14 секунд:
Надрать бы уши Биллу Гейтсу с его "640 килобайт должно хватить всем" :evil:
Mantius
новенький
 
Сообщения: 21
Зарегистрирован: 30.12.2008 23:44:51

Re: Проблема с крупными массивами

Сообщение shade » 04.01.2009 22:37:20

Mantius писал(а):Разумеется, но когда работает только половина нейронов-это разве не другое число?

Почему половина?

Mantius писал(а):Проблема в том, что этот алгоритм функции F давно известен, но труднореализуем при имеющихся вычислительных мощностях. Его не нужно искать второй раз, нужно решить что делать с нехваткой мощностей, я решил просто пожертвовать количеством нейронов и, как следствие, разумностью сети ради её работоспособности.

Знаешь, некоторые тоже думают, что для перемножения больших чисел применим только алгоритм перемножения в столбик имеющий сложность O(n^2), даже не догадываясь, что если привлечь быстрое преобразование Фурье, можно сложность уменьшить до O( n * ln(n) ) (точно на память не помню).

Вообще, на сколько я знаю, до сих пор нету метода определения нижних оценок вычислитьельной сложности функций (не путать со сложностью алгоритма)... так что искать можно. Так например, в приведёных мой выше алгоритмах сложность O(n), где n - число элементов в исходной матрице. Пожалуй это наилучший результат, т.к. теже O(n) требуются только на чтение матрицы (и пусть тебя не смущает, что O(n) + O(n) = O(n), если ты не знаком с такой натацией).
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Re: Проблема с крупными массивами

Сообщение Mantius » 04.01.2009 22:46:06

Почему половина?

Ну если обрабатывать за раз только часть. Скажем, если обрабатывать в два захода, я бы брал каждый раз по половине, как-то так логичнее вроде бы...
Знаешь, некоторые тоже думают, что для перемножения больших чисел применим только алгоритм перемножения в столбик имеющий сложность O(n^2), даже не догадываясь, что если привлечь быстрое преобразование Фурье, можно сложность уменьшить до O( n * ln(n) ) (точно на память не помню).

Готов с радостью выслушать итерационный(или какой-нить еще экономичный с точки зрения вычислительных мощностей) аналог для метода обучения нейронной сети обратным распространением ошибки.
Mantius
новенький
 
Сообщения: 21
Зарегистрирован: 30.12.2008 23:44:51

Re: Проблема с крупными массивами

Сообщение shade » 04.01.2009 22:57:30

Mantius писал(а):Ну если обрабатывать за раз только часть. Скажем, если обрабатывать в два захода, я бы брал каждый раз по половине, как-то так логичнее вроде бы...

Приведенные выше алгоритмы обрабатывают матрицу по частям (по строкам), но в конечном счёте обрабатывается матрица целиком, т.е. вычисляется вся функция, не кусок.

Mantius писал(а):Готов с радостью выслушать итерационный(или какой-нить еще экономичный с точки зрения вычислительных мощностей) аналог для метода обучения нейронной сети обратным распространением ошибки.

Ну я и оригинального не знаю :roll:
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Re: Проблема с крупными массивами

Сообщение Mantius » 04.01.2009 23:03:47

Приведенные выше алгоритмы обрабатывают матрицу по частям (по строкам), но в конечном счёте обрабатывается матрица целиком, т.е. вычисляется вся функция, не кусок.

Каждый элемент последующей матрицы зависит от ВСЕХ элементов предыдущего слоя.
Ну я и оригинального не знаю

Я склонен верить этой методичке моего университета(там есть формула): http://www.lib.vsu.ru/elib/texts/method ... p05020.pdf
Mantius
новенький
 
Сообщения: 21
Зарегистрирован: 30.12.2008 23:44:51

Re: Проблема с крупными массивами

Сообщение carrots » 04.01.2009 23:27:46

поставленная задача пока что еще никем не была решена.

Так почему-ж не решена? Есть много подобных разработок которые используют намного больше памяти и обходятся одним гигабайтом оперативки (к примеру расчет поведения води, воздуха, дыма и т.д.).
Конечно если у вас большинство элементов будут одинаковыми - вы можете легко обойтись принципом octree, его ничего не помешает вам оперативно изменять(по крайней мере это скорее всего будет быстрее чем работать напрямую с жестким диском), ведь вы будете переупаковывать только те участки на которых были произведены изменения.

Если у вас большинство элементов разные - вам ни в коем случае нельзя использовать стандартные массивы, особенно под windows, windows никогда не умел правильно распоряжаться памятью. В таком случае для вас будет оптимальнее всего создать свой массив который будет работать напрямую с файлом и в оперативную память вы будите загружають только те элементы над которыми производится данный этап расчета(в данном случае вы можете хорошо оптимизировать скорость, ведь вы лучше знаете какие элементы нужно загрузить для определенного расчета чем какая-то база данных или операционная система.).
Просто создайте один файл или несколько файлов(если у вас операционная система не терпит больших файлов) общим размером равным общему количеству элементов в массиве.
к примеру массив [1..250,1..250,1..20000] = 7 500 000 000 (для того чтоб было понятнее будем использовать байты) в результате создаем файл или несколько файлов размером 7,5 гб.
первые 250 байт будут к примеру первым по X и Z столбцом элементов Y, через каждые 250 следующий столбец по X, а через каждые 62 500 следующий слой по Z.
По ходу расчета вы загружаете нужные для данного этапа элементы в память и выгружаете ненужные.
Это будет для вас самый оптимальный вариант так как вы сами оптимизируете работу с памятью, никакая уже готовая система не оптимизирует ее под ваши нужды так как это сделаете вы.
.......................................
Вы можете держать первую половину массива в оперативной памяти, а вторую половину в файле, на жестком диске, в результате увеличить скорость до двух раз.
Аватара пользователя
carrots
постоялец
 
Сообщения: 138
Зарегистрирован: 28.03.2008 02:13:02

Re: Проблема с крупными массивами

Сообщение Mantius » 05.01.2009 00:28:56

Так почему-ж не решена? Есть много подобных разработок которые используют намного больше памяти и обходятся одним гигабайтом оперативки (к примеру расчет поведения води, воздуха, дыма и т.д.).

Потому что нужда в ней появилась не так давно и не так велика как, скажем, нужда в программе локализации и распознания автомобильных номеров.
Да, задача-распознание по фотографии опор моста(обычные фотографии, различные ракурсы и цвета). Для начала, хотя бы одной опоры моста, скажем, ближайшей к центру картинки.
Это будет для вас самый оптимальный вариант так как вы сами оптимизируете работу с памятью, никакая уже готовая система не оптимизирует ее под ваши нужды так как это сделаете вы.

Сложно слишком... Всё-таки я решил просто пойти путем наименьшего сопротивления-уменьшить количество нейронов в сети до приемлемого.
Вы можете держать первую половину массива в оперативной памяти, а вторую половину в файле, на жестком диске, в результате увеличить скорость до двух раз.

Вот это было бы отличным ходом оптимизации уже работающей программы!
Mantius
новенький
 
Сообщения: 21
Зарегистрирован: 30.12.2008 23:44:51

Re: Проблема с крупными массивами

Сообщение carrots » 05.01.2009 01:03:10

Дело твое.
Я имел ввиду что решена проблема с большими массивами, но с распознанием тоже...
Есть системы которые распознают человека на изображении, находят у него глаза, и по сетчатке глаза идентифицируют личность.
Трехмерных систем правда еще не встречал, была-бы наверное хорошая система для медицины, при 3D сканировании, можно было-бы автоматически диагностировать некоторые стороны организма и т.п.
Вообще идея интересная и я думаю будет полезной, правда с маленьким расширением далеко не зайдешь.

кстати, я там немного с цифрами напутал. Количество байтов в столбцах и слоях нужно помножить на шесть(забыл...).

А зачем вам такие большие, и тем более трехмерные массивы если вы хотите распознавать фотографию?
Аватара пользователя
carrots
постоялец
 
Сообщения: 138
Зарегистрирован: 28.03.2008 02:13:02

Re: Проблема с крупными массивами

Сообщение Vadim » 05.01.2009 10:03:43

carrots писал(а):А зачем вам такие большие, и тем более трехмерные массивы если вы хотите распознавать фотографию?

По интенсивности цвета будет моделироваться 3D объект. :)

Добавлено спустя 3 минуты 3 секунды:
Mantius
Предложение хорошее: каждый слой - один файл. Или каждое измерение массива - один файл. Подумайте над ним...
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Проблема с крупными массивами

Сообщение Mantius » 05.01.2009 18:59:09

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

На самом деле, они куда примитивнее, чем может показаться. В принципе, решив задачу распознания лица человека в толпе, особенно, по сетчатке(когда он с накладными усами и т.п.) десяток-другой миллиардов долларов от интерпола и сопутствующих служб получишь как минимум.
Другое дело, что пока что мощностей ну никак не хватает, благо, что при текущих темпах развития электроники использование нейронных сетей становится всё более доступным и потому их ждет ох какое светлое будущее.
А зачем вам такие большие, и тем более трехмерные массивы если вы хотите распознавать фотографию?

Каждый нейрон первого скрытого слоя содержит в себе информацию о каждом пикселе фотографии. Можно обойтись и двумерным массивом, если рассматривать фотографию не как массив 250*250, а как строку из 62500 точек.
Предложение хорошее: каждый слой - один файл. Или каждое измерение массива - один файл. Подумайте над ним...

время уже поджимает, а практика показывает, что даже при небольшой нагрузке(фотография 100*100=10 000, только черно-белые пиксели и всего один слой из 10 нейронов) и без использования жесткого диска программа становится относительно задумчивой, соответственно, в моей задаче уже тысячекратно более высокие нагрузки гарантируют, что даже при работе только с оперативной памятью программа будет в лучшем случае, на грани работоспособности из-за нехватки мощностей опять же.
Mantius
новенький
 
Сообщения: 21
Зарегистрирован: 30.12.2008 23:44:51

Re: Проблема с крупными массивами

Сообщение carrots » 05.01.2009 22:11:42

Как это вы распознаете опоры моста? Перебираете все возможные варианты картинок и сравниваете?
Может лучше использовать какой-то более логичный метод.

Определяете сначала на фотографии все контура (контура собираются поиском отличающихся в одном и том-же направлении, рядом стоящих пикселей расположенных по поперечной прямой). По контурам определяете все возможные объекты, их расположение, форму и профиль, дальше описываете саму логику.

Если поперек моста(определенного длинного объекта) идут одинаковые(относительно) длинные объекты - это мост с прямыми опорами и опоры у него те объекты которые повторяются.
Если объект зеркально отражается от центра и имеет соответствующую форму - это мост с круглыми опорами по бокам.
В общем описываем функции распознания таким образом только более подробно. Для этого понадобится 5-50 мб памяти, и картинки без проблем сможешь использовать с хорошим качеством, и быстрее работать будет(правда это уже от твоего мастерства зависит)...
Аватара пользователя
carrots
постоялец
 
Сообщения: 138
Зарегистрирован: 28.03.2008 02:13:02

Re: Проблема с крупными массивами

Сообщение Mantius » 05.01.2009 22:17:13

Как это вы распознаете опоры моста? Перебираете все возможные варианты картинок и сравниваете?
Может лучше использовать какой-то более логичный метод.

Нет, учим сеть и затем она сама распознает.
Определяете сначала на фотографии все контура (контура собираются поиском отличающихся в одном и том-же направлении, рядом стоящих пикселей расположенных по поперечной прямой).

Может всё-таки уделим больше внимания решению проблемы нехватки мощностей, а не попыткам переосмыслить общепринятое понимание принципов работы нейронных сетей?
Mantius
новенький
 
Сообщения: 21
Зарегистрирован: 30.12.2008 23:44:51

Пред.След.

Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

Рейтинг@Mail.ru