Хоть 2 нейрона, хоть 100, - вид файла один и тот же
Ну, а кому графически, так никто не мешает - пишем GUI и пользуем
Хорошо, не будем с плеча рубить, давай по полочкам всё разложим. Не факт что для других так же, но для меня способ загрузки что я выше выложил очевиден в плане алгоритма загрузки:
прочитал строку, инициализировал 3 объекта типа слой,
считываем первую строку, далее вызываем первый объект слой, конструируем тип слоя input, инициализируем массив нейронов в количестве 2.
считываем вторую строку, далее вызываем второй объект слой, конструируем тип слоя mlp, инициализируем массив нейронов в количестве 2.
считываем третью строку, далее вызываем второй объект слой, конструируем тип слоя mlp, инициализируем массив нейронов в количестве 1.
так как количество слоёв 3 то на третьей строке конструирование заканчиваем далее присваиваем связи.
для чего проходим по таблице и вызываем нужные нейроны сообщаем им связи если в таблице стоит 1.
А как алгоритм будет работать в xml ?
ЗЫ и главное преимущество поскольку таблица связей бинарная она прекрасно жмётся. таблица для 8 нейронов умещается в одном ulong. Правда чем дальше в лес тем толще партизаны вообще размер при большом количестве нейронов высчитывается как
Размер XML-документа существенно больше бинарного представления тех же данных. В грубых оценках величину этого фактора принимают за 1 порядок (в 10 раз).
Размер XML-документа существенно больше, чем документа в альтернативных текстовых форматах передачи данных (например JSON[4], YAML, Protocol Buffers) и особенно в форматах данных, оптимизированных для конкретного случая использования.
Избыточность XML может повлиять на эффективность приложения. Возрастает стоимость хранения, обработки и передачи данных.
XML содержит метаданные (об именах полей, классов, вложенности структур), и одновременно XML позиционируется как язык взаимодействия открытых систем. При передаче между системами большого количества объектов одного типа (одной структуры), передавать метаданные повторно нет смысла, хотя они содержатся в каждом экземпляре XML описания.
Для большого количества задач не нужна вся мощь синтаксиса XML и можно использовать значительно более простые и производительные решения.
Я предлагаю XML в качестве стандарта хранения конфигураций, сетей, настроек, ...
И нужен он только на этапах инициализации/сохранения
В процессе рабочего хода, и тем более - обучения, ни о каком XML'e речь не идет
her.human: Извиняюсь за плагиат.
Угу, но почему-то такие монстры как Oracle, Microsoft, ... скрипя зубами засовывают свои "бинарные" (как правило коммерческие) стандарты подальше и разворачиваются лицом к открытым стандартам
Вычитать 10 МБайт XML - это не проблема для современных компьютеров
Документ .docx MS Word размером 100 МБайт не пугает ?
Если проблемой будет загрузить сеть из XML-файла, то обучить ее на таком оборудовании будет просто нереально - это задачи несравнимые по сложности
Чтобы открыть эту страницу форума, я прокачиваю через инет не меньше сотни килобайт
На носу 2012 год и такой единицей измерения как байт я уже давно не пользуюсь ))
P.S.
Я лишь предложил свой вариант - решать общественности
Давайте поставим експеримент, создайте xml загрузчик сетки на 1000 нейронов по 100 связей на нейрон, и опубликуйте размер файла, структура какая вам угодно.
Просто я могу на коленках посчитать сколько займёт места мой вариант 1000*1000/8=~125 Кб, а ваш не смогу поэтому для сравнения...
Если ваш вариант будет иметь приемлемые размеры почему бы и нет.
Не в том суть, память памятью, а на GPU будет сложно реализовать выкрутасы объектной логики, я вполне прекрасно представляю как реализовать НС, как сложное взаимодействие объектов внутри которых имеются функции GPU расчётов(это про микро уровни), но я не представляю как этот сложный объектный код те всю НС подсунуть GPU как несколько ФФ с разными наборами весов (макроуровень) ???
Вопрос риторический, хотя если кто представляет непрочь послушать.
Вот именно поэтому был сделан выбор в пользу CUDA, а не более распространенного OpenCL
Код на CUDA объектно-ориентированный и можно побитово передать сформированный на CPU объект
PreProcessor именно для этого
Хоть 2 нейрона, хоть 100, - вид файла один и тот же
Ну, а кому графически, так никто не мешает - пишем GUI и пользуем
Хорошо, не будем с плеча рубить, давай по полочкам всё разложим. Не факт что для других так же, но для меня способ загрузки что я выше выложил очевиден в плане алгоритма загрузки:
прочитал строку, инициализировал 3 объекта типа слой,
считываем первую строку, далее вызываем первый объект слой, конструируем тип слоя input, инициализируем массив нейронов в количестве 2.
считываем вторую строку, далее вызываем второй объект слой, конструируем тип слоя mlp, инициализируем массив нейронов в количестве 2.
считываем третью строку, далее вызываем второй объект слой, конструируем тип слоя mlp, инициализируем массив нейронов в количестве 1.
так как количество слоёв 3 то на третьей строке конструирование заканчиваем далее присваиваем связи.
для чего проходим по таблице и вызываем нужные нейроны сообщаем им связи если в таблице стоит 1.
А как алгоритм будет работать в xml ?
ЗЫ и главное преимущество поскольку таблица связей бинарная она прекрасно жмётся. таблица для 8 нейронов умещается в одном ulong. Правда чем дальше в лес тем толще партизаны вообще размер при большом количестве нейронов высчитывается как
X=N*N/8
где N количество нейронов,
X это количество байт.
Недостатки
Я предлагаю XML в качестве стандарта хранения конфигураций, сетей, настроек, ...
И нужен он только на этапах инициализации/сохранения
В процессе рабочего хода, и тем более - обучения, ни о каком XML'e речь не идет
Извиняюсь за плагиат.
Угу, но почему-то такие монстры как Oracle, Microsoft, ... скрипя зубами засовывают свои "бинарные" (как правило коммерческие) стандарты подальше и разворачиваются лицом к открытым стандартам
Вычитать 10 МБайт XML - это не проблема для современных компьютеров
Документ .docx MS Word размером 100 МБайт не пугает ?
Если проблемой будет загрузить сеть из XML-файла, то обучить ее на таком оборудовании будет просто нереально - это задачи несравнимые по сложности
Я предлагаю XML в качестве стандарта хранения конфигураций, сетей, настроек, ...
И нужен он только на этапах инициализации/сохранения
В процессе рабочего хода, и тем более - обучения, ни о каком XML'e речь не идет
Вот смотри твой файлик в xml имеет размер 916 байт, а в бинарном представлении даже если не жать шапку 64 байта
7 переменных шапки + 1 на таблицу = 8 ulong * 8 байт= 64
Вот смотри твой файлик в xml имеет размер 916 байт, а в бинарном представлении даже если не жать шапку 64 байта
7 переменных шапки + 1 на таблицу = 8 ulong * 8 байт= 64
Чтобы открыть эту страницу форума, я прокачиваю через инет не меньше сотни килобайт
На носу 2012 год и такой единицей измерения как байт я уже давно не пользуюсь ))
P.S.
Я лишь предложил свой вариант - решать общественности
Я предлагаю XML в качестве стандарта хранения конфигураций, сетей, настроек, ...
И нужен он только на этапах инициализации/сохранения
В процессе рабочего хода, и тем более - обучения, ни о каком XML'e речь не идет
Для оптимизации структуры сети необходимо (налету) менять количество нейронов и связи.
Можно ли это сделать?
Если несложно, комментируйте ваши коды, сами знаете, в чужих кодах долго разбираться без комментов. Спасибо.
Для оптимизации структуры сети необходимо (налету) менять количество нейронов и связи.
Можно ли это сделать?
Если несложно, комментируйте ваши коды, сами знаете, в чужих кодах долго разбираться без комментов. Спасибо.
Это уже вопросы обучения. Потенциально - есть такая возможность, на практике ею не пользовался
Обычно в процессе обучения структура сети не меняется - меняются лишь адаптивные параметры
Ваша постановка задачи - это уже мета-уровень: обучить архитектора менять структуру сети так, чтобы полученная сеть обучалась успешнее других
Коды выложил "как есть" - делал для себя и, как обычно, на скорую руку, так что извините
По-хорошему, там надо все заново перебирать по косточкам после того, как будет проработан весь проект
Чтобы открыть эту страницу форума, я прокачиваю через инет не меньше сотни килобайт
На носу 2012 год и такой единицей измерения как байт я уже давно не пользуюсь ))
P.S.
Я лишь предложил свой вариант - решать общественности
Давайте поставим експеримент, создайте xml загрузчик сетки на 1000 нейронов по 100 связей на нейрон, и опубликуйте размер файла, структура какая вам угодно.
Просто я могу на коленках посчитать сколько займёт места мой вариант 1000*1000/8=~125 Кб, а ваш не смогу поэтому для сравнения...
Если ваш вариант будет иметь приемлемые размеры почему бы и нет.
Не в том суть, память памятью, а на GPU будет сложно реализовать выкрутасы объектной логики, я вполне прекрасно представляю как реализовать НС, как сложное взаимодействие объектов внутри которых имеются функции GPU расчётов(это про микро уровни), но я не представляю как этот сложный объектный код те всю НС подсунуть GPU как несколько ФФ с разными наборами весов (макроуровень) ???
Вопрос риторический, хотя если кто представляет непрочь послушать.
Вот именно поэтому был сделан выбор в пользу CUDA, а не более распространенного OpenCL
Код на CUDA объектно-ориентированный и можно побитово передать сформированный на CPU объект
Есть нюансы, но все они решаются
Вот именно поэтому был сделан выбор в пользу CUDA, а не более распространенного OpenCL
Код на CUDA объектно-ориентированный и можно побитово передать сформированный на CPU объект
Есть нюансы, но все они решаются