Frage für Kenner - Seite 3

 
Chris_Brown писал(а) >>

Und wenn Sie ein zweidimensionales Array, eine 4-mal-9-Matrix, haben und jedem Element einen Wert von 0,1 zuweisen, würde es dann etwa so aussehen?

Wie Talex richtig bemerkte, können (und sollten) Sie Arrays mit der Funktion ArrayInitialize initialisieren

 

Hilfe!

Ich kann nicht verstehen, wie der NS-Lernalgorithmus funktioniert (mit einem Lehrer).

Ich nehme meinen NS als Beispiel (bitte schimpfen Sie nicht zu sehr mit mir, ich bin noch ziemlich neu auf diesem Gebiet).

Hilf mir beim Zeichnen des NS-Lernalgorithmus


//Размеры матрицы
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);}
//+------------------------------------------------------------------+
 

Zählt der hyperbolische Tangens auch richtig?


return((MathExp( A* x)-MathExp(- A* x))/(MathExp( A* x)+MathExp(- A* x)));
 
Gibt es eine Möglichkeit, den Bereich des Arrays dynamisch festzulegen?
 
Chris_Brown >> :

Und was die hyperbolische Tangente betrifft, zählt sie richtig?

tanh(x) = sinh(x)/cosh(x) = (e^x - e^-x)/(e^x + e^-x)


Übrigens, die Funktion e^x scheint nicht schnell zu sein.

Es ist also besser so:

double var = A* x;

double expVar = MathExp( var);
double revExpVar = 1/ expVar;

double tanh = ( expVar - revExpVar)/( expVar + revExpVar)

Es sollte schneller gehen.

Chris_Brown >> :
Gibt es eine Möglichkeit, den Bereich des Arrays dynamisch festzulegen?

Wie groß ist der Wertebereich, der von -1 bis 1 reicht? Wenn ich das richtig verstanden habe:

double ScaledTanh = Scale*tanh - Shift;
 

Wie groß ist der Wertebereich, ist er -1 bis 1? Wenn ich es richtig verstehe:

double ScaledTanh = Scale*tanh - Shift;

Nein. Das ist nicht das, was ich meine.

Die Standard-Array-Deklaration:

int Mas[50]; // Hier wird das Feld durch den Bereich von 0 bis 49 definiert


Ich meinte dynamisch, d.h. ich ändere diesen Bereich, wenn ich einige Berechnungen durchführe.

 
ArrayResize() - ändert die Größe des Arrays.
 
Mathemat >> :
ArrayResize() - ändert die Größe des Arrays.

Aha, hier ist ein Beispiel:

double W[3][4];

ArrayResize(W,2)


Das Ergebnis wird von 3 auf 2 geändert. Wie ändern wir die zweite von 4 auf 6?

--------

Ich habe eine andere Idee: (Zum Beispiel.)

#define Input 4 //Anzahl der Neuronen in der Eingabeschicht
#define Out 1 //Anzahl der Neuronen in der Ausgabeschicht
double W[Input][Out+1];//Gewichtsmatrix

aber hier tritt der Fehler auf, dass 1 zu Out addiert wird

 

Guten Tag, liebe Kolleginnen und Kollegen.

Nicht wirklich zu diesem Thema. Bitte um Rat -

Wie kann ich den Text im PDF-Format in Word übersetzen?

(Die Datei ist groß, - "Twilight", D. Glukhovsky 65 mb)

 
rid писал(а) >>

Guten Tag, liebe Kolleginnen und Kollegen.

Nicht wirklich zu diesem Thema. Bitte um Rat -

Wie kann ich den Text im PDF-Format in Word übersetzen?

(Die Datei ist groß, - "Twilight", D. Glukhovsky 65 mb)

Normalerweise erkenne ich sie in FineReader und konvertiere sie in Word. Aber es gibt vielleicht noch andere Möglichkeiten.

Aber die Frage ist definitiv off topic.