Documente Academic
Documente Profesional
Documente Cultură
cs
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Text;
namespace RedNeuronalUPC
{
#region Transferencia de funciones y capa de derivadas
public enum TransferFunction
{
None,
Sigmoid
}
/* definicion de transferfunctions
{
}
{
}
*/
#endregion
public class RedBackpropagation
{
#region Constructor
public RedBackpropagation(int[] layersizes, TransferFunction[] transferFunctions)
{
/* validando datos */
C:\Users\jmallqui.NTCIP\Google Drive\201601\IA\proyecto\RedNeuronalUPC\RedNeuronalUPC\RedBackpropagation.cs
layercount = layersizes.Length - 1;
inputsize = layersizes[0];
layersize= new int[layercount];
C:\Users\jmallqui.NTCIP\Google Drive\201601\IA\proyecto\RedNeuronalUPC\RedNeuronalUPC\RedBackpropagation.cs
#endregion
#region Metodos
//
if (input.Length != inputsize)
throw new ArgumentException("Datos de entrada no tiene la correcta diemensin");
//dimesion
output = new double[layersize[layercount-1]];
/* ejecutando la red*/
layeroutput[l][j]= TransferFunctions.Evaluar(transferFunction[l],sum );
// Copiar output
public double Train(ref double[] input, ref double[] desired, double TrainingRate, double Momentum)
{
if (input.Length != inputsize)
throw new ArgumentException("Parametros de entrada invalidos","input");
if (desired.Length != layersize[layercount-1])
throw new ArgumentException("Parametros de entrada invalidos", "desired");
//variable locales
double error = 0.0, sum = 0.0, weghtDelta = 0.0, biasDelta = 0.0;
double[] output = new double[layersize[layercount - 1]];
// ejecutar la red
Run(ref input, out output);
// Backpropagation error
for (int l = layercount
{
//capa de salida
if (l == layercount
{
for (int k = 0;
{
delta[l][k]
- 1; l >= 0; l--)
- 1)
= output[k] - desired[k];
C:\Users\jmallqui.NTCIP\Google Drive\201601\IA\proyecto\RedNeuronalUPC\RedNeuronalUPC\RedBackpropagation.cs
}
}
else // Capa oculta
{
for (int i = 0; i < layersize[l]; i++)
{
sum = 0.0;
for (int j = 0; j < layersize[l+1]; j++)
{
sum += weight[l + 1][i][j] * delta[l][j];
}
sum *= TransferFunctions.EvaluarDerivada(transferFunction[l], layerinput[l][i]);
delta[l][i] = sum;
}
}
return error;
#endregion
#region
private
private
private
private
private
private
private
private
private
Variables privadas
int layercount;
int inputsize;
int[] layersize;
TransferFunction[] transferFunction;
double[][]
double[][]
double[][]
double[][]
double[][]
layerinput;
layeroutput;
bias;
delta;
previousBiasDelta;
#endregion
C:\Users\jmallqui.NTCIP\Google Drive\201601\IA\proyecto\RedNeuronalUPC\RedNeuronalUPC\RedBackpropagation.cs
public static double GetRandomGaussian()
{
}
return GetRandomGaussian(0.0,1.0);
void GetRandomGaussian(double mean, double stddev, out double val1, out double val2)
v, s, t;
* gen.NextDouble() - 1;
* gen.NextDouble() - 1;