Вопрос к знатокам - страница 3 12345678910...21 Новый комментарий PapaYozh 2008.11.11 07:51 #21 Chris_Brown писал(а) >> А если будет двумерный массив, матрица 4 на 9 и каждому элементу присвоить значение 0.1, это будет примерно так? Как Вам правильно указал Talex, инициализировать массивы можно (и нужно) при помощи функции ArrayInitialize Артём 2008.11.11 14:40 #22 Помогите! Не могу понять как работает алгоритм обучения НС (с учителем). Для примера возьму конкретно свою НС (Плиз сильно не ругайте меня я как бы новичок в этом деле) Помогите с составлением алгоритма обучения НС //Размеры матрицы double W[4][9];//Матрица весов размером 4 на 8 // W // W31 -0,52 -0,01 -0,08 0,35 Выходной слой // W21 1,52 1,35 1,12 -1,38 // W22 7,05 4,75 3,25 1,45 // W23 7,36 4,42 3,90 2,26 Скрытый слой 2 // W24 6,79 5,54 3,74 2,81 // W11 -4,65 13,06 7,00 4,67 0,07 // W12 -3,25 11,92 2,66 5,98 2,41 Скрытый слой 1 // W13 -3,31 8,93 3,32 5,57 4,20 // W14 4,33 4,86 9,84 8,96 1,52 //Функции активации нейронов double NormDate(double Date,int Type,int A) { double x; if (Type==0){ x=Date; return(MathTan(MathExp(A*x)-MathExp(-A*x)/MathExp(A*x)+MathExp(-A*x)));//гиперболический тангенс } if (Type==1){ x=Date; return(1/(1+MathExp(-A*x)));// сигмоид } } //+------------------------------------------------------------------+ //| Многослойная нейронная сеть. | //| Параметры сети: | //| Входные параметры подаются во входном массиве - X | //| Веса задаются в весовой матрице - W | //| Число скрытых слоёв = V | //| | //+------------------------------------------------------------------+ double neuronet1(double W[][],double X[], int V){ int N=ArraySize(X); int i,j,I; double sum=0.0; double Out[99][99]; double summ=0.0; //Расчёты скрытых слоёв NC for (I=0; I<=V-1; I++){ for(i=I*N; i<=(N-1+N*I); i++){ for(j=0; j<=N-1; j++){ if(I==0) summ+=(W[j][i]*X[j]);else summ+=(W[j][i]*Out[I-1][j]); } Out[I][i-I*N]=NormDate(summ,0,1); summ=0; } } //Расчёт выходного слоя NC for(j=0; j<=N-1; j++){ sum+=W[j][8]*Out[V-1][j]; } sum=NormDate(sum,0,1); return(sum); } int init(){ //+------------------------------------------------------------------+ //| Инциализирование весовой матрицы случайными числами | //+------------------------------------------------------------------+ MathSrand(TimeLocal()); double Dia=1;//диапазон случайных чисел ArrayInitialize(W,(MathRand()/32767.0*Dia)); } int start(){ //+------------------------------------------------------------------+ //| Создание массива с входными данными | //+------------------------------------------------------------------+ double X[4]; X[0]=1.2447;// На первых порах пусть будут сами котировки X[1]=1.2458; X[2]=1.2364; X[3]=1.2377; double Out[1]; Out[1]=0.8;// например в процессе обучения должно получиться значение больше 0.8 //Пример обращения к функции нейросети Comment(neuronet1(W,X,2)); return(0);} //+------------------------------------------------------------------+ Артём 2008.11.12 11:22 #23 И ещё на счёт гиперболического тангенса, он правильно считается ? return((MathExp(A*x)-MathExp(-A*x))/(MathExp(A*x)+MathExp(-A*x))); Артём 2008.12.02 17:24 #24 А можно ли как то динамически задать диапазон массива? TheXpert 2008.12.02 17:55 #25 Chris_Brown >>: И ещё на счёт гиперболического тангенса, он правильно считается ? tanh(x) = sinh(x)/cosh(x) = (e^x - e^-x)/(e^x + e^-x) Кстати функция e^x вроде не быстрая. Так что лучше так: double var = A*x; double expVar = MathExp(var); double revExpVar = 1/expVar; double tanh = (expVar - revExpVar)/(expVar + revExpVar) Должно получиться побыстрее. Chris_Brown >>: А можно ли как то динамически задать диапазон массива? Область значений? она от -1 до 1 . Если я правильно понял то: double ScaledTanh = Scale*tanh - Shift; Артём 2008.12.02 18:26 #26 Область значений? она от -1 до 1 . Если я правильно понял то: double ScaledTanh = Scale*tanh - Shift; Нет. Я о другом. Стандартное объявление массива: int Mas[50]; // Вот тут массив задан диапазоном от 0 до 49 А я имел ввиду динамически, тоесть при каких то вычислений изменять этот диапазон Надёжные реализации экспертов Любой вопрос новичка, чтоб [АРХИВ] Любой вопрос новичка, Sceptic Philozoff 2008.12.02 19:10 #27 ArrayResize() - изменяет размер массива. Артём 2008.12.02 19:19 #28 Mathemat >>: ArrayResize() - изменяет размер массива. Аха, вот Вам пример: double W[3][4]; ArrayResize(W,2) В результате мы изменем 3 на 2, а как изменить второе ? Допустим с 4 на 6 -------- У меня возникла другая идея: (К примеру) #define Input 4 //Число нейронов в входном слое #define Out 1 //Число нейронов в выходном слое double W[Input][Out+1];//Весовая матрица но тут возникает ошибка к Out нельзя добовлять 1 Рыночный этикет или правила Машинное обучение в трейдинге: Обсуждение статьи "Нейронные сети Rid 2008.12.21 12:33 #29 Добрый день всем. Не совсем по теме вопрос. Пож. подскажите - Как перевести текст в формате PDF в Word? (Файл большой, - "Сумерки", Д.Глуховский 65 мб) Victor Nikolaev 2008.12.21 13:15 #30 rid писал(а) >> Добрый день всем. Не совсем по теме вопрос. Пож. подскажите - Как перевести текст в формате PDF в Word? (Файл большой, - "Сумерки", Д.Глуховский 65 мб) Я обычно распознаю в FineReader и перегоняю в Word. Хотя может есть и другие варианты. Но вопрос точно не в тему. 12345678910...21 Новый комментарий
А если будет двумерный массив, матрица 4 на 9 и каждому элементу присвоить значение 0.1, это будет примерно так?
Как Вам правильно указал Talex, инициализировать массивы можно (и нужно) при помощи функции ArrayInitialize
Помогите!
Не могу понять как работает алгоритм обучения НС (с учителем).
Для примера возьму конкретно свою НС (Плиз сильно не ругайте меня я как бы новичок в этом деле)
Помогите с составлением алгоритма обучения НС
И ещё на счёт гиперболического тангенса, он правильно считается ?
И ещё на счёт гиперболического тангенса, он правильно считается ?
tanh(x) = sinh(x)/cosh(x) = (e^x - e^-x)/(e^x + e^-x)
Кстати функция e^x вроде не быстрая.
Так что лучше так:
Должно получиться побыстрее.
А можно ли как то динамически задать диапазон массива?
Область значений? она от -1 до 1 . Если я правильно понял то:
Область значений? она от -1 до 1 . Если я правильно понял то:
Нет. Я о другом.
Стандартное объявление массива:
int Mas[50]; // Вот тут массив задан диапазоном от 0 до 49
А я имел ввиду динамически, тоесть при каких то вычислений изменять этот диапазон
ArrayResize() - изменяет размер массива.
Аха, вот Вам пример:
double W[3][4];
ArrayResize(W,2)
В результате мы изменем 3 на 2, а как изменить второе ? Допустим с 4 на 6
--------
У меня возникла другая идея: (К примеру)
#define Input 4 //Число нейронов в входном слое
#define Out 1 //Число нейронов в выходном слое
double W[Input][Out+1];//Весовая матрица
но тут возникает ошибка к Out нельзя добовлять 1
Добрый день всем.
Не совсем по теме вопрос. Пож. подскажите -
Как перевести текст в формате PDF в Word?
(Файл большой, - "Сумерки", Д.Глуховский 65 мб)
Добрый день всем.
Не совсем по теме вопрос. Пож. подскажите -
Как перевести текст в формате PDF в Word?
(Файл большой, - "Сумерки", Д.Глуховский 65 мб)
Я обычно распознаю в FineReader и перегоняю в Word. Хотя может есть и другие варианты.
Но вопрос точно не в тему.