elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el ttwitter! de elhacker.NET


  Mostrar Mensajes
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 40
1  Programación / Programación General / Neftis - Redes Neuronales Artificiales en: 18 Septiembre 2020, 20:47
Neftis
Artificial Neural Network Framework


Hola, buen día.
Hacía mucho que no ingresaba a la comunidad porque estaba trabajando en un proyecto muy importante para mí, tanto a nivel personal como profesional. Y hoy es un enorme gusto para mí el poder mostrárselos. Aún queda mucho por hacer, pero es lo suficientemente maduro para ser utilizado sin muchos inconvenientes (espero), pues no he tenido los recursos para probarlo en hardware distinto al de mi propia máquina. Dejo este post aquí porque, aún cuando el proyecto actualmente está hecho para funcionar únicamente en .NET Framework, mi idea es poder adaptarlo a otros lenguajes de programación y otros SOs distintos a Windows. Espero que a más de uno le sea de utilidad, pues ese es el propósito de lo que hacemos nosotros como programadores, crear algo que sea útil.
Neftis, como dice el título del post, es un marco de trabajo para la creación, entrenamiento y ejecución de redes neuronales artificiales. El objetivo de Neftis es proporcionar un entorno de trabajo que sea rápido y fácil de utilizar, pero que al mismo tiempo sea flexible y sencillo de aprender, con reglas bien definidas, una programación intuitiva y objetos concretos para llevar a cabo cada una de las tareas necesarias en cada etapa del desarrollo de un sistema que implemente una o múltiples redes neuronales artificiales.
Con Neftis primero construimos un modelo neuronal en base a una descripción formal de la red neuronal. Ejemplo: Si la red neuronal tiene 3 capas y su respectivo número de neuronas es, 2 neuronas en la capa de entrada, 3 neuronas en la capa oculta y 1 neurona en la capa de salida [2, 3, 1] y conectadas en una estructura Madaline, entonces la creamos de la siguiente manera:

Código
  1. NeuralNetwork redNeuronal = new NeuralNetwork();
  2. NeuralNetwork redNeuronal.CreateMadaline(new int[] {2, 3, 1);

El siguiente paso es cargar los datos de entrenamiento en una estructura de datos con dos campos, inputs y outputs que son cada uno un arreglo unidimensional de enteros del mismo tamaño que la primera (inputs) y última (outputs) capa de la red neuronal. Después se carga otro conjunto de datos con la misma estructura, que será utilizado por la red neuronal para validar el entrenamiento de la misma.

Código
  1. public struct STRUCT_InputOutputValuePairs
  2. {
  3. public string Id;
  4. public float[] InputValues;
  5. public float[] OutputValues;
  6. }

Después se definen los parámetros de entrenamiento y se entrena la red neuronal. Los parámetros a definir son los siguientes:

AutoSaveFilestringFile name and path for the auto save file.
BatchSizeInt32Training values evaluated before weights change.
LearningReasonfloatIncrement at which neural network learns.
MaxAgeInt32Max age every generation should reach if the neural network doesn’t reach the NetworkErrorMargin value.
MaxGenerationInt32Max generation the training process will reach if the neural network doesn’t reach the NetworkErrorMargin value.
NetworkErrorMarginfloatThe error that the neural network must reach before the training process stops.
RandomWeightsboolTells if the weights must be randomized. If the training is continuing with a previous training this should be set to false, otherwise training progress will be erased.
SaveEveryNAgesInt32Interval between every autosave the training process made of the neural network if is > 0.
TestCasesInputsAndOuputsSTRUCT_InputOutputValuePairs[]Data sets to test training progress between ages.
TestOutputMarginfloatMargin at the output neurons value.
TrainingInputsAndOutputsSTRUCT_InputOutputValuePairs[]Training values array.
UseGPUboolUse GPU device for training. If is true and there is no GPU device training wont start.

Una vez que la red neuronal ha sido entrenada se guarda en un archivo de red neuronal.

Código
  1. // Training.
  2.    NeuralNetworkTrainer trainer = new NeuralNetworkTrainer();
  3. STRUCT_TrainingParameters trainingParameters = new STRUCT_TrainingParameters {
  4.        BatchSize = Convert.ToInt32(Txt_BatchSize.Text),
  5.        TrainingInputsAndOutputs = Inputs,
  6.        LearningReason = learnningReazon,
  7.        MaxAge = maxAges,
  8.        SaveEveryNAges = 0,
  9.        AutoSaveFile = "",
  10.        MaxGeneration = maxGeneration,
  11.        NetworkErrorMargin = 0.01f,
  12.        RandomWeights = true,
  13.        TestCasesInputsAndOuputs = testInputs,
  14.        TestOutputMargin = 0.1f,
  15.        UseGPU = false
  16.    };
  17. // Write the results.
  18.    Neftis.ENUM_StartTrainingResult result = trainer.StartTraining(RedNeuronal, trainingParameters);

En la aplicación que va hacer uso de la red neuronal se carga la estructura de la red neuronal ya entrenada, se establecen los valores de entrada y se procede a evaluar los valores de salida.

En el sitio web pueden ver códigos de ejemplo, incluyendo código generado con una función de Neftis que genera código para Arduino a partir de un modelo entrenado.
Neftis es de uso libre (no código abierto). Y cualquiera puede usarlo, ya sea en un proyecto personal o comercial. Si desean apoyar o contribuir al proyecto, en el sitio web vienen las formas de hacerlo, también si tienen dudas, preguntas o desean aportar al proyecto de otra manera, pueden escribirme al correo  neftisprojectcontact@gmail.com.

Muchas gracias a todos. Sigamos programando.

2  Programación / .NET (C#, VB.NET, ASP) / Re: Compilador JIT en .NET en: 15 Septiembre 2020, 19:44
Saludos. No, cuando una aplicación .NET se carga en memoria ya no está en lenguaje intermedio sino en el código nativo del microprocesador.

https://www.geeksforgeeks.org/what-is-just-in-time-jit-compiler-in-dot-net/
3  Informática / Electrónica / DuinO'Clock - Tarjeta de desarrollo DIY en: 7 Noviembre 2018, 03:04
https://www.pcbway.com/project/shareproject/DuinO_Clock.html

Hola a todos los entusiastas de la electrónica.

Les dejo el enlace a un proyecto que realicé hace unas semanas. La idea original era únicamente la de realizar un sencillo reloj que mostrara la hora mediante 12 diodos led para indicar la hora y cada 5 minutos, y otros 4 leds para los minutos del 1 al 4. Es decir, que para mostrar las 12:10, parpadea el reloj situado a las 12, después parpadea el led de las 2. Luego, para mostrar las 12:12, parpadea el led de las 12, después parpadea el led de las 2 y después el segundo led del grupo de 4 leds.



Pero el diseño original fue modificado para que no sólo pudiera mostrar la hora o hacer las funciones de un reloj, sino que puede ser usado como tarjeta de desarrollo y agregar sensores y otras salidas, así como comunicación SPI y USB.

El circuito está basado en el Atmega328P, y el proyecto original fue hecho con un Arduino Nano. Si les gusta el proyecto, les agradecería mucho, en verdad mucho, su like y compartan el enlace del proyecto que dejé al inicio del post. Ahí podrán encontrar toda la información y el código. Después intentaré añadir otras funciones al código original. También pueden descargar el PCB u ordenar la fabricación del mismo desde el enlace por sólo $5 USD.

Importante: Si encuentran algún error en los diagramas por favor avísenme para hacer las correcciones necesarias. Si tienen alguna duda, por favor pregúntenme.
4  Programación / .NET (C#, VB.NET, ASP) / Re: Ayuda, Diagrama en C# en: 30 Julio 2018, 17:30
Muestranos tu código fuente y dinos la parte en la que tienes problemas.
5  Programación / Programación General / Re: Duda sobre expresiones condicionales. en: 29 Junio 2018, 05:51
Citar
Igual te faltó responder algo:
¿Cualquier relación puede expresarse sin necesidad de paréntesis, y se interpretaría bien?

La respuesta rápida es:

La respuesta extendida es: Sí, debido a las propiedades asociativa, distributiva y conmutativa de los operadores lógicos. Puedes encontrar mucha información al respecto en wikipedia. En la parte que dice axiomas en el enlace que te dejo más abajo.

https://es.wikipedia.org/wiki/L%C3%B3gica_binaria
6  Programación / Programación General / Re: Duda sobre expresiones condicionales. en: 29 Junio 2018, 03:30
Hola, que tal. Te lo voy a explicar así a ver si me doy a entender. Y si estoy equivocado, que alguien me diga, por favor.

Una condición está dada por la relación entre dos o más valores y uno o más operadores. Es decir, que una condición, quedaría de la siguiente manera:

valor operador valor ----> Ejemplo: a = b

Los operadores son relaciones, es decir, nos indican la relación entre un valor y otro. Igualdad, desigualdad, etc. Pero todos estos operadores tienen algo en común, que devuelven un valor booleano, al igual que los operadores booleanos AND, OR. Por eso es que pueden trabajar juntos y siguen las mismas reglas de los operadores aritméticos: primero paréntesis y de derecha a izquierda según el orden de evaluación. Debes revisar el orden de evaluación del lenguaje que utilizas para comprobar que operadores se evalúan primero en tu expresión condicional. En el ejemplo que das (C1 o C2) y (C3 o C4) se evalúa así:

Paso 1 (C1 o C2) --> Si C1 o C2 son verdaderos.
Paso 2 (C3 o C4) --> Si C3 o C4 son verdaderos.
Paso 3 ( (Paso 1) y (Paso 2) ) --> Si el paso 1 y el paso 2 son verdaderos

Si ejecutamos de manera simbólica (a modo de ejemplo), reemplazando los valores por verdadero o falso:

         Paso 1                              Paso 2
(verdadero OR falso) AND (falso OR verdadero)

       (verdadero)       AND       (verdadero

                           verdadero

Resumen: Sigue las reglas del orden de evaluación de los operadores y no tienes pierde.
7  Programación / .NET (C#, VB.NET, ASP) / Re: Cerrar todos mis formularios en C# en: 14 Junio 2018, 19:43
Lo que debes hacer es llamar a la función Application.Exit(), la cual cierra todos los formularios de la aplicación (en caso de que necesites mantener abierto el Form en el que llamas a Hide()). Si no necesitas tener en memoria el Form, entonces reemplaza Hide() por Close().
8  Programación / .NET (C#, VB.NET, ASP) / Re: Sobre controles creados de forma dinamica en: 25 Abril 2018, 03:03
Hola, creo que tu problema es precisamente por lo que comentas. Lo que puedes intentar es crear una lista de PictureBox y agregar cada PictureBox que creas. Ejemplo:

Código
  1. public partial class MainForm : Form
  2. {
  3. // Lista de picture box.
  4. List<PictureBox> listaPictureBox = new List<PictureBox>();
  5.  
  6. public MainForm()
  7. {
  8. //
  9. // The InitializeComponent() call is required for Windows Forms designer support.
  10. //
  11. InitializeComponent();
  12.  
  13. //
  14. // TODO: Add constructor code after the InitializeComponent() call.
  15. //
  16. }
  17.  
  18. void MainFormLoad(object sender, EventArgs e)
  19. {
  20. PictureBox newPicture = new PictureBox();
  21. // Agregar controlador de evento.
  22. listaPictureBox.Add(newPicture); // Agrego el picturebox a la lista.
  23. }
  24. }
  25.  

Pero debes recordar eliminar cada PictureBox que ya no necesites, para no saturar la memoria. También, deberías mostrar la manera en que creas la instancia de los PictureBox y cómo agregas el manejador del evento.
9  Programación / .NET (C#, VB.NET, ASP) / Re: Añadir items a un array sin usar List, ni crear nuevos arrays en C# en: 24 Mayo 2017, 20:14
Buen día.

Si has leído un poquito los conceptos de la programación te habrás topado con algún texto que dice que un array es una variable de referencia, es decir, que apunta a una posición de memoria. En .NET es igual, lo que tienes que hacer es precisamente crear un nuevo array, copiar los elementos, agregar el nuevo elemento al final y después hacer que tu viejo array apunte al nuevo.

Otra cosa, no has dicho si estás programando en C# o en VisualBasic. VisualBasic utiliza la función ReDim para redimensionar arreglos sin alterar los elementos que contiene. Pero internamente utiliza el mismo procedimiento que te acabo de describir.
10  Programación / Programación General / Re: Programación funcional en: 9 Mayo 2017, 04:08

Yo tengo poca experiencia en el uso de lenguajes funcionales, pero te puedo comentar la diferencia entre los dos que has nombrado.

Haskell es un lenguaje puramente funcional, miesntras que F# es un lenguaje híbrido. Es decir que si bien la estructura del código de F# es funcional, permite el uso de sentencias que pertenecen a POO.

Yo siempre recomiendo el siguiente sitio cuando se trata de material de programación:

https://openlibra.com/es/collection

O la dirección:

http://www.tryfsharp.org/

Para una breve introducción al lenguaje mediante un sistema de escritura y ejecución de código en línea.
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 40
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines