Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Este es el proyecto OnInit() que utilice:
{ // ========================= // ENTRADAS // ========================= matrix X = {{4,2},{6,3}}; // (2 x 2) matrix Y = {{0.75,-0.5}}; // (1 x 2) // ========================= // PESOS + BIAS // ========================= matrix W1 = {{2,5},{3,6},{4,7}}; // (3 x 2) vector B1 = {5,4,2}; // (3) matrix W2 = {{4,2,3}}; // (1 x 3) double B2 = 3; // ================================================= // FORWARD PASS // ================================================= // Z1 = W1·X + B1 matrix Z1 = W1 @ X; // (3 x 2) for(int i=0;i<3;i++) for(int j=0;j<2;j++) Z1[i,j] += B1[i]; /* Z1 [[43,24] [52,28] [60,31]] */ Print("Z1 ",Z1); // A1 = tanh(Z1) matrix A1; Z1.Activation(A1,AF_TANH); // (3 x 2) Print("A1 ",A1); // Z2 = W2·A1 + B2 matrix Z2 = W2 @ A1; // (1 x 2) Z2[0,0] += B2; Z2[0,1] += B2; Print("Z2 ",Z2); // Y_pred = tanh(Z2) matrix Y_pred; Z2.Activation(Y_pred,AF_TANH); // (1 x 2) Print("Y_pred ",Y_pred); // ========================= // LOSS // ========================= double loss = Y_pred.Loss(Y,LOSS_MSE); Print("Loss = ",loss); // ================================================= // BACKPROPAGATION // ================================================= // ---------- SALIDA ---------- // dL/dY matrix dL_dY = 2 * (Y_pred - Y); // (1 x 2) Print("Derivada error ",dL_dY); // dY/dZ2 matrix dY_dZ2; Y_pred.Derivative(dY_dZ2,AF_TANH); // (1 x 2) Print("Derivada Y_pred ",dY_dZ2); // dL/dZ2 matrix dL_dZ2 = dL_dY * dY_dZ2; // Hadamard (1 x 2) // dL/dW2 = dL/dZ2 · A1ᵀ matrix dW2 = dL_dZ2 @ A1.Transpose(); // (1 x 3) // dL/dB2 double dB2 = dL_dZ2.Sum(); // ---------- CAPA OCULTA ---------- // dL/dA1 = W2ᵀ · dL/dZ2 matrix dL_dA1 = W2.Transpose() @ dL_dZ2; // (3 x 2) // dA1/dZ1 matrix dA1_dZ1; A1.Derivative(dA1_dZ1,AF_TANH); // (3 x 2) // dL/dZ1 matrix dL_dZ1 = dL_dA1 * dA1_dZ1; // (3 x 2) // dL/dW1 = dL/dZ1 · Xᵀ matrix dW1 = dL_dZ1 @ X.Transpose(); // (3 x 2) // dL/dB1 vector dB1(3); for(int i=0;i<3;i++) dB1[i] = dL_dZ1.Row(i).Sum(); // ========================= // IMPRESIÓN // ========================= Print("dW2 = ",dW2); Print("dB2 = ",dB2); Print("dW1 = ",dW1); Print("dB1 = ",dB1); return(INIT_SUCCEEDED); }