+
Это для MLP пример? с Адамом обучение быстрее стало? Помню, эпохи очень долго учились в прошлый раз
Стохастический градиент работает очень долго, конечно
Спасибо за статью.
Планируется ли организовать другие методы расчета функции потерь при обучении?
Dmitriy Gizlyk - у вас кроме голой теории практика предвидится или вы вечный "учитель"?
практика - это когда с помощью ваших методов получается успешная торговля?
![Dmitriy Gizlyk Dmitriy Gizlyk](https://c.mql5.com/36/42/dmitriy-gizlyk.png)
- www.mql5.com
Dmitriy Gizlyk - у вас кроме голой теории практика предвидится или вы вечный "учитель"?
практика - это когда с помощью ваших методов получается успешная торговля?
Вы хотите, что б в статье выложили машинку для печатания денег?
Человек рассказывает об архитектуре сетей и вариациях её организации, что интересно, а что подавать в сеть - дело уже пользователя.
Вопрос. Для каких целей создаются перечисление
enum ENUM_BUFFERS
{
WEIGHTS,
DELTA_WEIGHTS,
OUTPUT,
GRADIENT,
FIRST_MOMENTUM,
SECOND_MOMENTUM
};
и переменные в классе CLayer?
class CLayer: public CArrayObj { private: ... int hWeights; int hDeltaWeights; int hOutput; int hGradient; ... };
Не могу найти их применение в коде.
Вопрос. Для каких целей создаются перечисление
и переменные в классе CLayer?
Не могу найти их применение в коде.
Спасибо, что обратил внимание. Можно удалить, остались от черновых разработок.
Всем привет . кто сталкивался с такой ошибкой при попытке чтения файла ?
OnInit - 198 -> Error of read AUDNZD.......
Данное сообщение лишь информирует, что не была загружена предварительно обученная сеть. Если Вы первый раз запускаете свой советник, то это нормально и не обращайте внимание на сообщение. Если Вы уже обучали нейронную сеть и хотели продолжить её обучение, то тогда надо проверять в каком месте произошла ошибка чтения данных из файла.
К сожалению, вы не указали код ошибки, чтобы можно было сказать больше.Данное сообщение лишь информирует, что не была загружена предварительно обученная сеть. Если Вы первый раз запускаете свой советник, то это нормально и не обращайте внимание на сообщение. Если Вы уже обучали нейронную сеть и хотели продолжить её обучение, то тогда надо проверять в каком месте произошла ошибка чтения данных из файла.
К сожалению, вы не указали код ошибки, чтобы можно было сказать больше.Здравствуйте.
Расскажу подробнее.
при запуске эксперта в первый раз. С такими модификациями в коде:
dError=Net.getRecentAverageError(); if(add_loop) { Net.Save(FileName+".nnw",dError,dUndefine,dForecast,dtStudied,false); printf("Era %d -> error %.2f %% forecast %.2f",count,dError,dForecast); } ChartScreenShot(0,FileName+IntegerToString(count)+".png",750,400); int h=FileOpen(CSV,FILE_READ|FILE_WRITE|FILE_CSV); if(h!=INVALID_HANDLE) { FileSeek(h,0,SEEK_END); FileWrite(h,eta,count,dError,dUndefine,dForecast); FileFlush(h); FileClose(h); Print("Файл должен быть создан ChartScreenShot "); } else Print("Операция FileOpen ChartScreenShot неудачна, ошибка ",GetLastError()); } }
в журнеле пишется это :
KO 0 18:49:15.205 Core 1 NZDUSD: load 27 bytes of history data to synchronize in 0:00:00.001
FI 0 18:49:15.205 Core 1 NZDUSD: history synchronized from 2016.01.04 to 2022.06.28
FF 0 18:49:15.205 Core 1 2019.01.01 00:00:00 OnInit - 202 -> Error of read AUDNZD_PERIOD_D1_ 20Fractal_OCL_Adam 1.nnw prev Net 0
CH 0 18:49:15.205 Core 1 2019.01.01 00:00:00 OpenCL: GPU device 'gfx902' selected
KN 0 18:49:15.205 Core 1 2019.01.01 00:00:00 Era 1 -> error 0.01 % forecast 0.01
QK 0 18:49:15.205 Core 1 2019.01.01 00:00:00 Файл должен быть создан ChartScreenShot
HH 0 18:49:15.205 Core 1 2019.01.01 00:00:00 Era 2 -> error 0.01 % forecast 0.01
CP 0 18:49:15.205 Core 1 2019.01.01 00:00:00 Файл должен быть создан ChartScreenShot
PS 2 18:49:19.829 Core 1 disconnected
OL 0 18:49:19.829 Core 1 connection closed
NF 3 18:49:19.829 Tester stopped by user
И в директории "C:\Users\Borys\AppData\Roaming\MetaQuotes\Tester\BA9DEC643240F2BF3709AAEF5784CBBC\Agent-127.0.0.1-3000\MQL5\Files"
создаеться этот файл :
Fractal_10000000.csv
#define FileName Symb.Name()+"_"+EnumToString((ENUM_TIMEFRAMES)Period())+"_"+IntegerToString(HistoryBars,3)+StringSubstr(__FILE__,0,StringFind(__FILE__,".",0)) #define CSV "Fractal_"+StringSubstr(DoubleToString(eta),2)+".csv"
с таким содержимым :
0.1 1 0.006391065067727753 0.30606698779533065 0.009849141883310947 |
0.1 2 0.01416031275898674 0.320172057079727 0.009671500063084178 |
0.1 1 0.021322935369592233 0.4824709164481285 0.009510368103745911 |
0.1 2 0.03047882579179044 0.4736268224037817 0.009336035129387396 |
0.1 1 0.04096262961921367 0.4747386346906194 0.009164897823757697 |
0.1 2 0.04745129346676422 0.9935630387598718 0.1983981648307233 |
и так далее...
При повторном запуске, выводиться таже ошибка и файл .csv перезаписываеться.
Тойсть Эксперет всегда находиться в обучении потому-что не находит файл.
И второй вопрос . подскажите код (для считывания данных из выходного нейрона ) для открытия ордеров buy sell уже при обученной сети .
Спасибо за статью и за ответ.
Здравствуйте.
Расскажу подробнее.
при запуске эксперта в первый раз. С такими модификациями в коде:
в журнеле пишется это :
KO 0 18:49:15.205 Core 1 NZDUSD: load 27 bytes of history data to synchronize in 0:00:00.001
FI 0 18:49:15.205 Core 1 NZDUSD: history synchronized from 2016.01.04 to 2022.06.28
FF 0 18:49:15.205 Core 1 2019.01.01 00:00:00 OnInit - 202 -> Error of read AUDNZD_PERIOD_D1_ 20Fractal_OCL_Adam 1.nnw prev Net 0
CH 0 18:49:15.205 Core 1 2019.01.01 00:00:00 OpenCL: GPU device 'gfx902' selected
KN 0 18:49:15.205 Core 1 2019.01.01 00:00:00 Era 1 -> error 0.01 % forecast 0.01
QK 0 18:49:15.205 Core 1 2019.01.01 00:00:00 Файл должен быть создан ChartScreenShot
HH 0 18:49:15.205 Core 1 2019.01.01 00:00:00 Era 2 -> error 0.01 % forecast 0.01
CP 0 18:49:15.205 Core 1 2019.01.01 00:00:00 Файл должен быть создан ChartScreenShot
PS 2 18:49:19.829 Core 1 disconnected
OL 0 18:49:19.829 Core 1 connection closed
NF 3 18:49:19.829 Tester stopped by user
И в директории "C:\Users\Borys\AppData\Roaming\MetaQuotes\Tester\BA9DEC643240F2BF3709AAEF5784CBBC\Agent-127.0.0.1-3000\MQL5\Files"
создаеться этот файл :
Fractal_10000000.csv
с таким содержимым :
0.1 1 0.006391065067727753 0.30606698779533065 0.009849141883310947 |
0.1 2 0.01416031275898674 0.320172057079727 0.009671500063084178 |
0.1 1 0.021322935369592233 0.4824709164481285 0.009510368103745911 |
0.1 2 0.03047882579179044 0.4736268224037817 0.009336035129387396 |
0.1 1 0.04096262961921367 0.4747386346906194 0.009164897823757697 |
0.1 2 0.04745129346676422 0.9935630387598718 0.1983981648307233 |
и так далее...
При повторном запуске, выводиться таже ошибка и файл .csv перезаписываеться.
Тойсть Эксперет всегда находиться в обучении потому-что не находит файл.
И второй вопрос . подскажите код (для считывания данных из выходного нейрона ) для открытия ордеров buy sell уже при обученной сети .
Спасибо за статью и за ответ.
Добрый вечер, Борис.
Вы пытаетесь обучить нейронную сеть в тестере стратегий. Я не рекомендую это делать. Я, конечно, не знаю какие вы вносили изменения в логику обучения. В статье было организовано обучение модели в цикле. И итерации цикла повторялись до полного обучения модели или остановки советника. А исторические данные сразу загружались в динамические массивы в полном объеме. Такой подход я использовал для запуска советника в реальном времени. Период обучения устанавливался внешним параметром.
При запуске советника в тестере стратегий период обучения, указанный в параметрах, сдвигается в глубину истории от начала периода тестирования. К тому же, каждый агент в тестере стратегий MT5 работает в своей "песочнице" и сохраняет файлы в ней. Поэтому, при повторном запуске советника в тестере стратегий он не находит файл ранее обученной модели.
Попробуйте запустить советник в режиме реального времени и проверьте создание файла с расширением nnw после прекращения работы советника. Именно в этот файл записывается Ваша обученная модель.
По поводу использования модели в реальной торговле, Вам нужно передать текущую рыночную ситуацию в параметры метода Net.FeedForward. А затем получить результаты работы модели с помощью метода Net.GetResult. В результате работы последнего метода в буфере будут содержаться результаты работы модели.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Нейросети — это просто (Часть 7): Адаптивные методы оптимизации:
В предыдущих статьях для обучения нейронной сети использовался метод стохастического градиентного спуска с применением единого коэффициента обучения для всех нейронов в сети. В данной статье предлагаю посмотреть в сторону адаптивных методов обучения, которые позволяют изменять скорость обучения каждого нейрона. Давайте посмотрим на плюсы и минусы такого подхода.
Тестирование оптимизации методом Adam осуществлялось в тех же условиях, что и все предыдущие тестирования: инструмент EURUSD, таймфрейм H1, на вход подаются данные за 20 последовательных свечей, обучение проводится на истории за 2 последних года. Для тестирования был создан советник Fractal_OCL_Adam. Данный советник был создан из советника Fractal_OCL путем указания метода оптимизации Adam при описании нейронной сети в функции OnInit основной программы.
Количество слоев и нейронов осталось не изменным.
Советник был инициализирован случайными весами в диапазоне от -1 до 1, исключая нулевые значения. В ходе тестирования буквально после 2-й эпохи обучения ошибка нейронной сети стабилизировалась в районе 30%. Напомню, что при обучении методом стохастического градиентного спуска ошибка стабилизировалась в районе 42% после 5-й эпохи обучения.
График пропущенных фракталов демонстрирует плавный рост показателя в ходе всего обучения. При этом после 12 эпох обучения наблюдается постепенное снижение темпов роста показателя. После 14-й эпохи обучения значение данного показателя составила 72,5%. Для сравнения, при обучении аналогичной нейронной сети методом стохастического градиентного спуска после 10 эпох обучения доля пропущенных фракталов составляла 97-100% при различных коэффициентах обучения.
Автор: Dmitriy Gizlyk