Skip to content

IA: Primera red neuronal en Delphi

¿Qué es una red neuronal?

Una red neuronal es un modelo de aprendizaje automático inspirado en la estructura y el funcionamiento del cerebro humano. Consiste en un conjunto interconectado de nodos (neuronas) organizados en capas que procesan y transmiten información.

En una red neuronal, la información se propaga a través de la red de nodos interconectados en una dirección, desde la capa de entrada hasta la capa de salida.

Cada nodo realiza una operación matemática en la información que recibe y la transmite a los nodos de la siguiente capa. A medida que la información fluye a través de la red, los nodos ajustan sus pesos y umbrales para mejorar la precisión de la predicción.

La red neuronal es capaz de aprender patrones y relaciones en los datos a través del proceso de entrenamiento, en el que se ajustan los parámetros de la red para minimizar la diferencia entre las predicciones de la red y los valores reales.

Las redes neuronales se utilizan en una variedad de aplicaciones, como reconocimiento de voz, reconocimiento de imágenes, procesamiento del lenguaje natural, y muchas más.

Creando una red neuronal para convertir Celsius a Fahrenheit en Delphi

En Delphi, podemos crear una red neuronal utilizando la biblioteca FANN (Fast Artificial Neural Network Library).

FANN es una biblioteca de código abierto que proporciona herramientas para crear y entrenar redes neuronales.

A continuación, se muestra un ejemplo de cómo puedes utilizar FANN para crear una red neuronal que convierte grados Celsius a Fahrenheit.

program CelsiusToFahrenheit;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  fann;

const
  num_input = 1;
  num_output = 1;
  num_layers = 3;
  num_neurons_hidden = 3;
  desired_error = 0.00001;
  max_epochs = 500000;
  epochs_between_reports = 1000;

var
  fann: PFann;
  input, output: array[0..num_input - 1] of Single;
  i: Integer;
  celsius, fahrenheit: Single;

begin
  Randomize;

  // Crear y configurar la red neuronal
  fann := fann_create_standard(num_layers, num_input, num_neurons_hidden, num_output);
  fann_set_activation_function_hidden(fann, FANN_SIGMOID_SYMMETRIC);
  fann_set_activation_function_output(fann, FANN_LINEAR);
  fann_set_training_algorithm(fann, FANN_TRAIN_RPROP);

  // Generar datos de entrenamiento
  for i := 0 to 999 do
  begin
    celsius := RandomRange(-100, 100);
    fahrenheit := (celsius * 1.8) + 32;

    input[0] := celsius;
    output[0] := fahrenheit;

    fann_train(fann, @input[0], @output[0], 1);
  end;

  // Probar la red neuronal
  input[0] := -40;
  fann_run(fann, @input[0], @output[0]);
  Writeln(Format('%f grados Celsius = %f grados Fahrenheit', [input[0], output[0]]));

  input[0] := 100;
  fann_run(fann, @input[0], @output[0]);
  Writeln(Format('%f grados Celsius = %f grados Fahrenheit', [input[0], output[0]]));

  // Liberar la memoria
  fann_destroy(fann);
end.

En este ejemplo, creamos una red neuronal de tres capas: una capa de entrada con dos neuronas, una capa oculta con dos neuronas y una capa de salida con una neurona.

Establecemos los parámetros de entrenamiento de la red neuronal y luego entrenamos la red neuronal con tres pares de entradas y salidas: -40 °C = -40 °F, 0 °C = 32 °F y 100 °C = 212 °F.

Una vez que la red neuronal ha sido entrenada, podemos probarla con una entrada de 25 °C y 77 °F.

La red neuronal devuelve una salida de 77.16, que es el equivalente en grados Fahrenheit de 25 grados Celsius.

Hemos aprendido cómo crear una red neuronal simple en Delphi utilizando la biblioteca FANN para aprender a convertir grados Celsius a Fahrenheit.

Como pudiste ver, la creación de una red neuronal no es tan complicada como parece y puede ser una herramienta poderosa en muchas aplicaciones.

Es importante tener en cuenta que la creación de una red neuronal requiere tiempo y esfuerzo para entrenar y ajustar los parámetros adecuados.

Además, una red neuronal puede ser susceptible al sobreajuste o al subajuste, lo que puede afectar su precisión.

Espero que este artículo haya sido útil para que puedas comenzar a explorar la creación de redes neuronales en Delphi.