Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2010, 16:09   #11
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
По умолчанию

В общем да. я там не до конца все понял. вроде переварил.

забудьте про голые массивы. используйте контейнеры из stl.

не именуйте члены класса так же как большинство из программистов именует локальные переменные (я так понял именно поэтому написано this->kolNeuron). Большинсто все таки пишет int m_kolNeuron.

Избавтесь от утечек.

Про всякую безопасность при исключениях я вас парить не стану.
_Ч_ вне форума Ответить с цитированием
Старый 09.01.2010, 16:17   #12
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Цитата:
Что будет если два раза позвать ф-ию Create? правильно, будет утечка.
Упс... Уже исправил.

Цитата:
А что будет если я скопирую один обьект CNeuronLayer в другой? Если деструктор написан правильно, то потом может случится трындец.
Ммммда... Действительно проблеемка. Ну тут можно лишь переопределить оператор присваивания...

Ну спасибо и на этом. Будут еще идеи - пишите, я постараюсь быть самокритичным))
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Старый 09.01.2010, 16:27   #13
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Цитата:
используйте контейнеры из stl.
STL - это конечно здорово и красиво, но возникает вопрос с быстродействием. Чем больше проверок, тем медленнее будет работать класс (а в обучение нейронных сетей, к сожалению, - это критично).Так что, по мне, лучше проверить все на фазе создания, чем тысячи раз проверять одно и тоже на фазе обучения...

Цитата:
Я так понял именно поэтому написано this->kolNeuron). Большинсто все таки пишет int m_kolNeuron.
Это да. Но от старых привычек трудно избавиться.
Цитата:
Избавтесь от утечек.
Уже работаю.
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Старый 09.01.2010, 16:44   #14
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
По умолчанию

Вам так кажется. чтобы говорить что стл тратит кучу времени на всякие проверки, надо профилировать программу. Я допускаю, что в том же векторе есть какие-то проверки при его создании, но их вклад в снижение производительности ничножен. Если правильно заюзать вектор, потери будут минимальны в сравнении с голыми массивами. В общем, оптимизация - последнее дело. Хотите разогнать прогу, подумайте над тем, чтобы вместо массива указателей на CNeuron использовать вектор обьектов CNeuron. Избавитесь от одного выделения памяти. CNeuron в таком случае должны уметь копироваться. Копирование CNeuronLayer тоже станет более тяжелым, но скорее всего оно будет таким же, каким вы его напишите вручную. Зато вы избавитесь от геморроя с управлением памятью. Имхо, в таком случае плюшек будет больше.
_Ч_ вне форума Ответить с цитированием
Старый 09.01.2010, 17:10   #15
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Цитата:
Сообщение от _Ч_ Посмотреть сообщение
Вам так кажется. чтобы говорить что стл тратит кучу времени на всякие проверки, надо профилировать программу. Я допускаю, что в том же векторе есть какие-то проверки при его создании, но их вклад в снижение производительности ничтожен...
Я полностью с вами согласен, я избавлюсь от большого геморроя с памятью.
Но так ли мал будет вклад проверок? Я конечно не большой знаток stl, но меня все же смущает хотя бы проверка на верные границы.
Допустим у меня будет довольно большая сеть: 100 нейронов во входном слое, 2 слоя по 100..150 нейронов в промежуточных слоях, 20 выходных нейронов. Нейроны соединены каждый с каждым, а значит: 100(входной слой)+100*100(соединение промежуточных слоев)+20(выходной слой)=20020*2 = 40040 (операций чтение/запись за один проход сети). И это если я буду обращаться к каждому элементу лишь один раз. Вот и получается 40000 лишних if-ов прикрутят к моим массивам лишнее время.
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Старый 09.01.2010, 17:19   #16
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Impuls1989 Посмотреть сообщение
Я полностью с вами согласен, я избавлюсь от большого геморроя с памятью.
Но так ли мал будет вклад проверок? Я конечно не большой знаток stl, но меня все же смущает хотя бы проверка на верные границы.
Допустим у меня будет довольно большая сеть: 100 нейронов во входном слое, 2 слоя по 100..150 нейронов в промежуточных слоях, 20 выходных нейронов. Нейроны соединены каждый с каждым, а значит: 100(входной слой)+100*100(соединение промежуточных слоев)+20(выходной слой)=20020*2 = 40040 (операций чтение/запись за один проход сети). И это если я буду обращаться к каждому элементу лишь один раз. Вот и получается 40000 лишних if-ов прикрутят к моим массивам лишнее время.
Проверка на границы не происходит при обращении через operator[]. Она происходит только при обращении через метод at().
Для начала сделайте рабочую программу, а уже потом занимайтесь оптимизацией, тем более технической
netrino вне форума Ответить с цитированием
Старый 09.01.2010, 17:20   #17
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
По умолчанию

operator [] у вектора не проверяет правильность границ. Если вы зададите неверный индекс, то вектор и полезет по этому неверному индексу без всяких проверок. За правильностью границ должена следить вызывающая сторона. А вот для обращения к элементу с проверкой на правильность границы у вектора есть ф-ия at(), которая кидает исключение, если индекс неверный. Так что ваши опасения на счет таких проверок напрасны.
_Ч_ вне форума Ответить с цитированием
Старый 09.01.2010, 17:21   #18
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
Проверка на границы не происходит при обращении через operator[]. Она происходит только при обращении через метод at().
Для начала сделайте рабочую программу, а уже потом занимайтесь оптимизацией, тем более технической
Отличное предложение. Так и поступлю)
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенос данных из класса в класс zexak Общие вопросы по Java, Java SE, Kotlin 2 27.02.2010 20:03
Си++. Передача массива в функцию. Diamond2107 Помощь студентам 7 03.12.2009 20:15
Передача массива в функцию D[I]K Общие вопросы C/C++ 4 13.09.2009 21:31
передача массива в функцию JOFRIF Общие вопросы C/C++ 8 02.08.2009 12:46
Передача массива в функцию Vistar Общие вопросы C/C++ 1 27.04.2009 08:08