grydra 0.1.4 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/gr/core.rb +102 -89
  3. data/lib/gr/version.rb +2 -2
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 37dd8b10192bf544515650cdfa80a827412a157cab145b7fade5f83bacfa1b62
4
- data.tar.gz: f6732dd3b23cdde33299c5507fd25899266d768aceb057f495306edfe727bf3a
3
+ metadata.gz: 38aaecb86df2c74c04d634e4591f60332b56cf66054cc5b2a3fd9061c9d50908
4
+ data.tar.gz: 2616015ee7528c6d3b19af4f01bcc101134aa741ea4599b22df2dbe83308c8f1
5
5
  SHA512:
6
- metadata.gz: 506d94b9db23945c3dbf28bb8b7cfd26bb0aff454cd6e2ebdf1cdddfc88751ce2dd25bbd72960cf79f8ca63b88eb31f7195c2be6fec886a987d16b4baa52cc20
7
- data.tar.gz: 1a229b7c8d7d59f68418e953a99e75852dc4156fd9cb70ea874943a2dbfbf7601e4e2e54ce09e85325f16d6496fd3462e0facf71a9c3c99966485c7582ebd48a
6
+ metadata.gz: a169a960e53bc33a2686ca1657b65c30a1b19a273d190c5e9100dce109f9ddba50a2c6d35c0883a026bb476e4c91768002b7b53f44f33b5a27cfe01850b5e925
7
+ data.tar.gz: 27668728857d9ad96f7d375b022c0f39f51fcf0cbb4e7daf145036029d34d052fbe51b669264a332caaac692ac134310193b44c2ea199c533321139156fabd50
data/lib/gr/core.rb CHANGED
@@ -1,4 +1,4 @@
1
- module GR
1
+ module GRYDRA
2
2
  require 'set'
3
3
 
4
4
  ### FUNCIONES DE ACTIVACIÓN ###
@@ -91,8 +91,8 @@ module GR
91
91
 
92
92
  def initialize(entradas, activacion=:tanh)
93
93
  raise ArgumentError, "El número de entradas debe ser un entero positivo" unless entradas.is_a?(Integer) && entradas > 0
94
- @pesos = Array.new(entradas) { GR.xavier_init(entradas) }
95
- @sesgo = GR.xavier_init(entradas)
94
+ @pesos = Array.new(entradas) { GRYDRA.xavier_init(entradas) }
95
+ @sesgo = GRYDRA.xavier_init(entradas)
96
96
  @salida = 0
97
97
  @delta = 0
98
98
  @activacion = activacion
@@ -106,9 +106,9 @@ module GR
106
106
  end
107
107
  @suma = @pesos.zip(entradas).map { |peso, entrada| peso * entrada }.sum + @sesgo
108
108
  @salida = case @activacion
109
- when :tanh then GR.tanh(@suma)
110
- when :relu then GR.relu(@suma)
111
- when :sigmoid then GR.sigmoid(@suma)
109
+ when :tanh then GRYDRA.tanh(@suma)
110
+ when :relu then GRYDRA.relu(@suma)
111
+ when :sigmoid then GRYDRA.sigmoid(@suma)
112
112
  else @suma
113
113
  end
114
114
  @salida
@@ -116,9 +116,9 @@ module GR
116
116
 
117
117
  def derivada_activacion
118
118
  case @activacion
119
- when :tanh then GR.derivada_tanh(@salida)
120
- when :relu then GR.derivada_relu(@salida)
121
- when :sigmoid then GR.derivada_sigmoid(@suma)
119
+ when :tanh then GRYDRA.derivada_tanh(@salida)
120
+ when :relu then GRYDRA.derivada_relu(@salida)
121
+ when :sigmoid then GRYDRA.derivada_sigmoid(@suma)
122
122
  else 1
123
123
  end
124
124
  end
@@ -291,31 +291,44 @@ module GR
291
291
  end
292
292
 
293
293
  ### GUARDAR Y CARGAR MODELO Y VOCABULARIO ###
294
- def self.guardar_modelo(modelo, nombre, path = File.dirname(__FILE__), vocabulario=nil)
295
- File.open("#{nombre}.red", "wb") { |f| Marshal.dump(modelo, f) }
296
- puts "\e[33mModelo guardado en '#{path}'\e[0m"
294
+ def self.guardar_modelo(modelo, nombre, path = Dir.pwd, vocabulario = nil)
295
+ ruta_archivo = File.join(path, "#{nombre}.red")
296
+
297
+ # Abre el archivo en modo escritura binaria y guarda el objeto serializado
298
+ File.open(ruta_archivo, "wb") { |f| Marshal.dump(modelo, f) }
299
+
300
+ puts "\e[33mModelo guardado en '#{ruta_archivo}'\e[0m"
301
+
302
+ # Si se pasa vocabulario, se delega guardarlo en otra función
297
303
  if vocabulario
298
304
  guardar_vocabulario(vocabulario, nombre, path)
299
305
  end
300
306
  end
301
307
 
302
- def self.cargar_modelo(nombre, path = File.dirname(__FILE__))
308
+
309
+ def self.cargar_modelo(nombre, path = Dir.pwd)
303
310
  modelo = nil
304
- File.open("#{nombre}.red", "rb") { |f| modelo = Marshal.load(f) }
311
+ ruta_archivo = File.join(path, "#{nombre}.red")
312
+ File.open(ruta_archivo, "rb") { |f| modelo = Marshal.load(f) }
305
313
  modelo
306
314
  end
307
315
 
308
- def self.guardar_vocabulario(vocabulario, nombre, path = File.dirname(__FILE__))
309
- File.open("#{nombre}_vocab.bin", "wb") { |f| Marshal.dump(vocabulario, f) }
310
- puts "\e[33mVocabulario guardado en '#{path}'\e[0m"
316
+
317
+ def self.guardar_vocabulario(vocabulario, nombre, path = Dir.pwd)
318
+ ruta_archivo = File.join(path, "#{nombre}_vocab.bin")
319
+ File.open(ruta_archivo, "wb") { |f| Marshal.dump(vocabulario, f) }
320
+ puts "\e[33mVocabulario guardado en '#{ruta_archivo}'\e[0m"
311
321
  end
312
322
 
313
- def self.cargar_vocabulario(nombre, path = File.dirname(__FILE__))
323
+
324
+ def self.cargar_vocabulario(nombre, path = Dir.pwd)
314
325
  vocabulario = nil
315
- File.open("#{nombre}_vocab.bin", "rb") { |f| vocabulario = Marshal.load(f) }
326
+ ruta_archivo = File.join(path, "#{nombre}_vocab.bin")
327
+ File.open(ruta_archivo, "rb") { |f| vocabulario = Marshal.load(f) }
316
328
  vocabulario
317
329
  end
318
330
 
331
+
319
332
  ### PREPROCESAMIENTO ACTUALIZADO ###
320
333
  def self.normalizar_varios(datos, maximos, metodo=:max)
321
334
  case metodo
@@ -387,7 +400,7 @@ module GR
387
400
  attr_accessor :red, :vocabulario, :max_valores, :max_valores_salida
388
401
 
389
402
  def initialize(imprimir_epocas = false)
390
- @red = GR::RedPrincipal.new(imprimir_epocas)
403
+ @red = GRYDRA::RedPrincipal.new(imprimir_epocas)
391
404
  @vocabulario = nil
392
405
  @max_valores = {}
393
406
  @max_valores_salida = {}
@@ -404,14 +417,14 @@ module GR
404
417
  end
405
418
  end
406
419
 
407
- @max_valores = GR.calcular_maximos(entradas, normalizacion)
420
+ @max_valores = GRYDRA.calcular_maximos(entradas, normalizacion)
408
421
 
409
- datos_normalizados = GR.normalizar_varios(entradas, @max_valores, normalizacion)
422
+ datos_normalizados = GRYDRA.normalizar_varios(entradas, @max_valores, normalizacion)
410
423
 
411
424
  etiquetas = datos_hash.map { |item| [item[clave_etiqueta].to_f] }
412
425
 
413
- @max_valores_salida = GR.calcular_maximos(etiquetas, normalizacion)
414
- etiquetas_no = GR.normalizar_varios(etiquetas, @max_valores_salida, normalizacion)
426
+ @max_valores_salida = GRYDRA.calcular_maximos(etiquetas, normalizacion)
427
+ etiquetas_no = GRYDRA.normalizar_varios(etiquetas, @max_valores_salida, normalizacion)
415
428
 
416
429
  estructuras.each do |estructura|
417
430
  @red.agregar_subred([claves_entrada.size, *estructura])
@@ -432,7 +445,7 @@ module GR
432
445
  end
433
446
  end
434
447
 
435
- datos_normalizados = GR.normalizar_varios(entradas, @max_valores, normalizacion)
448
+ datos_normalizados = GRYDRA.normalizar_varios(entradas, @max_valores, normalizacion)
436
449
 
437
450
  datos_normalizados.map do |entrada|
438
451
  pred_norm = @red.combinar_resultados(entrada)
@@ -451,11 +464,11 @@ module GR
451
464
  def entrenar_numericos(datos_entrada, datos_salida, estructuras, tasa, epocas, normalizacion=:max)
452
465
  @red.subredes.clear # limpiar subredes previas
453
466
 
454
- @max_valores = GR.calcular_maximos(datos_entrada, normalizacion)
455
- @max_valores_salida = GR.calcular_maximos(datos_salida, normalizacion)
467
+ @max_valores = GRYDRA.calcular_maximos(datos_entrada, normalizacion)
468
+ @max_valores_salida = GRYDRA.calcular_maximos(datos_salida, normalizacion)
456
469
 
457
- datos_entrada_no = GR.normalizar_varios(datos_entrada, @max_valores, normalizacion)
458
- datos_salida_no = GR.normalizar_varios(datos_salida, @max_valores_salida, normalizacion)
470
+ datos_entrada_no = GRYDRA.normalizar_varios(datos_entrada, @max_valores, normalizacion)
471
+ datos_salida_no = GRYDRA.normalizar_varios(datos_salida, @max_valores_salida, normalizacion)
459
472
 
460
473
  estructuras.each do |estructura|
461
474
  @red.agregar_subred([datos_entrada.first.size, *estructura])
@@ -469,7 +482,7 @@ module GR
469
482
  end
470
483
 
471
484
  def predecir_numericos(nuevos_datos, normalizacion=:max)
472
- datos_normalizados = GR.normalizar_varios(nuevos_datos, @max_valores, normalizacion)
485
+ datos_normalizados = GRYDRA.normalizar_varios(nuevos_datos, @max_valores, normalizacion)
473
486
  datos_normalizados.map do |entrada|
474
487
  pred_norm = @red.combinar_resultados(entrada)
475
488
  if normalizacion == :zscore && @max_valores_salida.is_a?(Hash)
@@ -486,14 +499,14 @@ module GR
486
499
  def entrenar_texto(textos, etiquetas, estructuras, tasa, epocas, normalizacion=:max)
487
500
  @red.subredes.clear # limpiar subredes previas
488
501
 
489
- @vocabulario = GR.crear_vocabulario(textos)
490
- entradas = textos.map { |texto| GR.vectorizar_texto(texto, @vocabulario) }
502
+ @vocabulario = GRYDRA.crear_vocabulario(textos)
503
+ entradas = textos.map { |texto| GRYDRA.vectorizar_texto(texto, @vocabulario) }
491
504
  @max_valores = { 0 => @vocabulario.size } # Solo tamaño vocabulario para texto
492
505
 
493
- datos_normalizados = GR.normalizar_varios(entradas, @max_valores, normalizacion)
506
+ datos_normalizados = GRYDRA.normalizar_varios(entradas, @max_valores, normalizacion)
494
507
 
495
- @max_valores_salida = GR.calcular_maximos(etiquetas, normalizacion)
496
- etiquetas_no = GR.normalizar_varios(etiquetas, @max_valores_salida, normalizacion)
508
+ @max_valores_salida = GRYDRA.calcular_maximos(etiquetas, normalizacion)
509
+ etiquetas_no = GRYDRA.normalizar_varios(etiquetas, @max_valores_salida, normalizacion)
497
510
 
498
511
  estructuras.each do |estructura|
499
512
  @red.agregar_subred([@vocabulario.size, *estructura])
@@ -507,8 +520,8 @@ module GR
507
520
  end
508
521
 
509
522
  def predecir_texto(nuevos_textos, normalizacion=:max)
510
- entradas = nuevos_textos.map { |texto| GR.vectorizar_texto(texto, @vocabulario) }
511
- datos_normalizados = GR.normalizar_varios(entradas, @max_valores, normalizacion)
523
+ entradas = nuevos_textos.map { |texto| GRYDRA.vectorizar_texto(texto, @vocabulario) }
524
+ datos_normalizados = GRYDRA.normalizar_varios(entradas, @max_valores, normalizacion)
512
525
 
513
526
  datos_normalizados.map do |entrada|
514
527
  pred_norm = @red.combinar_resultados(entrada)
@@ -527,7 +540,7 @@ module GR
527
540
  'RedPrincipal.agregar_subred' => {
528
541
  descripcion: "Agrega una subred a la red principal con la estructura dada. La estructura define el número de neuronas por capa (incluyendo entradas).",
529
542
  ejemplo: <<~EX
530
- red = GR::RedPrincipal.new
543
+ red = GRYDRA::RedPrincipal.new
531
544
  red.agregar_subred([2, 4, 1]) # 2 entradas, 4 neuronas capa oculta, 1 salida
532
545
  EX
533
546
  }, #34,36
@@ -538,7 +551,7 @@ module GR
538
551
  {entrada: [[0.1, 0.2]], salida: [[0.3]]},
539
552
  {entrada: [[0.5, 0.6]], salida: [[0.7]]}
540
553
  ]
541
- red = GR::RedPrincipal.new(true) <-- (true) es para que imprima el umbral de error
554
+ red = GRYDRA::RedPrincipal.new(true) <-- (true) es para que imprima el umbral de error
542
555
  red.agregar_subred([2, 3, 1])
543
556
  red.agregar_subred([2, 2, 1])
544
557
  red.entrenar_subredes(datos, 0.01, 1000, paciencia: 5)
@@ -558,7 +571,7 @@ module GR
558
571
  datos_entrada = [[170, 25], [160, 30], [180, 22]]
559
572
  datos_salida = [[65], [60], [75]]
560
573
  estructuras = [[4, 1], [3, 1]]
561
- red = GR::FacilRed.new(true)
574
+ red = GRYDRA::FacilRed.new(true)
562
575
  red.entrenar_numericos(datos_entrada, datos_salida, estructuras, 0.05, 15000, :max)
563
576
  EX
564
577
  },
@@ -576,7 +589,7 @@ module GR
576
589
  {altura: 170, edad: 25, peso: 65},
577
590
  {altura: 160, edad: 30, peso: 60}
578
591
  ]
579
- red = GR::FacilRed.new(true) <-- (true) es para que imprima el umbral de error
592
+ red = GRYDRA::FacilRed.new(true) <-- (true) es para que imprima el umbral de error
580
593
  red.entrenar_hashes(datos_hash, [:altura, :edad], :peso, [[4, 1]], 0.05, 15000, :max)
581
594
  EX
582
595
  },
@@ -593,7 +606,7 @@ module GR
593
606
  textos = ["hola mundo", "buen día"]
594
607
  etiquetas = [[1], [0]]
595
608
  estructuras = [[5, 1]]
596
- red = GR::FacilRed.new(true)
609
+ red = GRYDRA::FacilRed.new(true)
597
610
  red.entrenar_texto(textos, etiquetas, estructuras, 0.01, 5000)
598
611
  EX
599
612
  },
@@ -606,71 +619,71 @@ module GR
606
619
  },
607
620
 
608
621
  # Guardar y cargar modelos y vocabularios
609
- 'GR.guardar_modelo' => {
622
+ 'GRYDRA.guardar_modelo' => {
610
623
  descripcion: 'Guarda el modelo entrenado en un archivo binario para poder cargarlo después. Opcionalmente guarda también el vocabulario.',
611
624
  ejemplo: <<~EX
612
- GR.guardar_modelo(modelo, "mi_modelo", "./modelos", vocabulario) El path por defecto es la carpeta donde se este ejecunatdo
625
+ GRYDRA.guardar_modelo(modelo, "mi_modelo", "./modelos", vocabulario) El path por defecto es la carpeta donde se este ejecutando
613
626
  EX
614
627
  },
615
- 'GR.cargar_modelo' => {
628
+ 'GRYDRA.cargar_modelo' => {
616
629
  descripcion: 'Carga un modelo guardado desde un archivo binario para usarlo sin entrenar de nuevo.',
617
630
  ejemplo: <<~EX
618
- modelo = GR.cargar_modelo("mi_modelo", "./modelos") El path por defecto es la carpeta donde se este ejecunatdo
631
+ modelo = GRYDRA.cargar_modelo("mi_modelo", "./modelos") El path por defecto es la carpeta donde se este ejecutando
619
632
  EX
620
633
  },
621
- 'GR.guardar_vocabulario' => {
634
+ 'GRYDRA.guardar_vocabulario' => {
622
635
  descripcion: 'Guarda el vocabulario en un archivo binario para su posterior carga.',
623
636
  ejemplo: <<~EX
624
- GR.guardar_vocabulario(vocabulario, "mi_modelo", "./modelos") El path por defecto es la carpeta donde se este ejecunatdo
637
+ GRYDRA.guardar_vocabulario(vocabulario, "mi_modelo", "./modelos") El path por defecto es la carpeta donde se este ejecutando
625
638
  EX
626
639
  },
627
- 'GR.cargar_vocabulario' => {
640
+ 'GRYDRA.cargar_vocabulario' => {
628
641
  descripcion: 'Carga el vocabulario desde un archivo binario guardado.',
629
642
  ejemplo: <<~EX
630
- vocabulario = GR.cargar_vocabulario("mi_modelo", "./modelos") El path por defecto es la carpeta donde se este ejecunatdo
643
+ vocabulario = GRYDRA.cargar_vocabulario("mi_modelo", "./modelos") El path por defecto es la carpeta donde se este ejecutando
631
644
  EX
632
645
  },
633
646
 
634
647
  # Normalización y preprocesamiento
635
- 'GR.normalizar_varios' => {
648
+ 'GRYDRA.normalizar_varios' => {
636
649
  descripcion: 'Normaliza un conjunto de datos según el método especificado (:max o :zscore).',
637
650
  ejemplo: <<~EX
638
- maximos = GR.calcular_maximos(datos, :max)
639
- datos_norm = GR.normalizar_varios(datos, maximos, :max)
651
+ maximos = GRYDRA.calcular_maximos(datos, :max)
652
+ datos_norm = GRYDRA.normalizar_varios(datos, maximos, :max)
640
653
  EX
641
654
  },
642
- 'GR.calcular_maximos' => {
655
+ 'GRYDRA.calcular_maximos' => {
643
656
  descripcion: 'Calcula valores máximos o medias y desviaciones según el método para normalizar datos.',
644
657
  ejemplo: <<~EX
645
- maximos = GR.calcular_maximos(datos, :max)
646
- estadisticas = GR.calcular_maximos(datos, :zscore)
658
+ maximos = GRYDRA.calcular_maximos(datos, :max)
659
+ estadisticas = GRYDRA.calcular_maximos(datos, :zscore)
647
660
  EX
648
661
  },
649
662
 
650
663
  # Funciones de texto
651
- 'GR.crear_vocabulario' => {
664
+ 'GRYDRA.crear_vocabulario' => {
652
665
  descripcion: 'Crea un vocabulario único a partir de una lista de textos, separando palabras.',
653
666
  ejemplo: <<~EX
654
667
  textos = ["hola mundo", "buen día"]
655
- vocabulario = GR.crear_vocabulario(textos)
668
+ vocabulario = GRYDRA.crear_vocabulario(textos)
656
669
  EX
657
670
  },
658
- 'GR.vectorizar_texto' => {
671
+ 'GRYDRA.vectorizar_texto' => {
659
672
  descripcion: 'Convierte un texto en un vector binario basado en la presencia de palabras en el vocabulario.',
660
673
  ejemplo: <<~EX
661
- vector = GR.vectorizar_texto("hola mundo", vocabulario)
674
+ vector = GRYDRA.vectorizar_texto("hola mundo", vocabulario)
662
675
  EX
663
676
  },
664
- 'GR.normalizar_con_vocabulario' => {
677
+ 'GRYDRA.normalizar_con_vocabulario' => {
665
678
  descripcion: 'Normaliza vectores generados con el vocabulario dividiendo entre el tamaño del vocabulario.',
666
679
  ejemplo: <<~EX
667
- vectores_norm = GR.normalizar_con_vocabulario(vectores, vocabulario)
680
+ vectores_norm = GRYDRA.normalizar_con_vocabulario(vectores, vocabulario)
668
681
  EX
669
682
  },
670
- 'GR.generar_ejemplo' => {
683
+ 'GRYDRA.generar_ejemplo' => {
671
684
  descripcion: 'Genera un ejemplo con código funcioanl con la libreria, con ejemplos del 1 al 9.',
672
685
  ejemplo: <<~EX
673
- GR.generar_ejemplo(1)
686
+ GRYDRA.generar_ejemplo(1)
674
687
  EX
675
688
  }
676
689
  }
@@ -703,7 +716,7 @@ module GR
703
716
  end
704
717
 
705
718
  #Función para generar ejemplos de uso con la libreria
706
- def self.generar_ejemplo(num_ejemplo, nombre_archivo = "ejemplo", extension = "rb", path = File.dirname(__FILE__))
719
+ def self.generar_ejemplo(num_ejemplo, nombre_archivo = "ejemplo", extension = "rb", path = Dir.pwd)
707
720
  case num_ejemplo
708
721
  when 1
709
722
  contenido = <<-RUBY
@@ -731,7 +744,7 @@ datos_entrenamiento = [
731
744
  ]
732
745
 
733
746
  # Creamos el modelo
734
- modelo = GR::FacilRed.new(true) # true para que imprima el error cada 1000 épocas
747
+ modelo = GRYDRA::FacilRed.new(true) # true para que imprima el error cada 1000 épocas
735
748
 
736
749
  # Entrenamos directamente usando datos tipo hash
737
750
  modelo.entrenar_hashes(
@@ -745,7 +758,7 @@ modelo.entrenar_hashes(
745
758
 
746
759
 
747
760
  # Guardamos el modelo entrenado
748
- GR.guardar_modelo(modelo, "modelo_empresas")
761
+ GRYDRA.guardar_modelo(modelo, "modelo_empresas")
749
762
 
750
763
  puts "Entrenamiento completado y modelo guardado exitosamente." #Mensaje de depuración para comprobar la ejecución adecuada
751
764
  RUBY
@@ -753,7 +766,7 @@ puts "Entrenamiento completado y modelo guardado exitosamente." #Mensaje de depu
753
766
  contenido = <<-RUBY
754
767
  require 'grydra'
755
768
  modelo = nil
756
- modelo = GR.cargar_modelo("modelo_empresas")
769
+ modelo = GRYDRA.cargar_modelo("modelo_empresas")
757
770
 
758
771
  # Nuevos datos de empresas a evaluar
759
772
  nuevos_datos = [
@@ -778,7 +791,7 @@ end
778
791
  require 'grydra'
779
792
 
780
793
  # Crear red principal
781
- red = GR::RedPrincipal.new #Sin el true, simplemente no se imprimen las epocas
794
+ red = GRYDRA::RedPrincipal.new #Sin el true, simplemente no se imprimen las epocas
782
795
 
783
796
  # Agregar una subred con estructura [2 entradas, 2 ocultas, 1 salida]
784
797
  red.agregar_subred([2, 3, 1], [:tanh, :tanh])
@@ -832,15 +845,15 @@ datos_in = [[0], [10], [20], [30], [40], [50], [-10], [-20], [100], [-30], [-5],
832
845
  datos_ou = [[32], [50], [68], [86], [104], [122], [14], [-4], [212], [-22], [23], [-40]]
833
846
 
834
847
  # Encontrar valores máximos para normalizar (método :max)
835
- max_in = GR.calcular_maximos(datos_in, :max) # {0 => valor}
836
- max_ou = GR.calcular_maximos(datos_ou, :max) # {0 => valor}
848
+ max_in = GRYDRA.calcular_maximos(datos_in, :max) # {0 => valor}
849
+ max_ou = GRYDRA.calcular_maximos(datos_ou, :max) # {0 => valor}
837
850
 
838
851
  # Normalizar datos
839
- datos_in_no = GR.normalizar_varios(datos_in, max_in, :max)
840
- datos_ou_no = GR.normalizar_varios(datos_ou, max_ou, :max)
852
+ datos_in_no = GRYDRA.normalizar_varios(datos_in, max_in, :max)
853
+ datos_ou_no = GRYDRA.normalizar_varios(datos_ou, max_ou, :max)
841
854
 
842
855
  # Crear red principal
843
- red_principal = GR::RedPrincipal.new
856
+ red_principal = GRYDRA::RedPrincipal.new
844
857
 
845
858
  # Agregar subredes
846
859
  red_principal.agregar_subred([1, 4, 1], [:sigmoid, :tanh])
@@ -867,7 +880,7 @@ entrada_usuario = gets.chomp.split.map(&:to_f)
867
880
 
868
881
  # Normalizar entradas
869
882
  entrada_usuario_no = entrada_usuario.map { |e| [e] }
870
- entrada_usuario_no = GR.normalizar_varios(entrada_usuario_no, max_in, :max)
883
+ entrada_usuario_no = GRYDRA.normalizar_varios(entrada_usuario_no, max_in, :max)
871
884
 
872
885
  puts "\\nResultados combinados:"
873
886
  entrada_usuario_no.each_with_index do |entrada_norm, i|
@@ -888,7 +901,7 @@ tanto como uno quiera, ejemplo:
888
901
  0.003, 0.3, 0.9, 0.2, 0.223, 0.00008
889
902
  =end
890
903
  # Crear instancia de la clase FacilRed
891
- red = GR::FacilRed.new(true) # true para imprimir las épocas y errores
904
+ red = GRYDRA::FacilRed.new(true) # true para imprimir las épocas y errores
892
905
 
893
906
  # Datos originales (temperatura Celsius y Fahrenheit)
894
907
  datos_in = [[0], [10], [20], [30], [40], [50], [-10], [-20], [100], [-30], [-5], [-40]]
@@ -948,7 +961,7 @@ estructuras = [
948
961
  ]
949
962
 
950
963
  # Crear red usando la interfaz fácil
951
- red = GR::FacilRed.new(true) # true para que imprima error por época
964
+ red = GRYDRA::FacilRed.new(true) # true para que imprima error por época
952
965
 
953
966
  # Entrenar la red
954
967
  red.entrenar_numericos(
@@ -1003,7 +1016,7 @@ estructuras = [
1003
1016
  ]
1004
1017
 
1005
1018
  # Crear red Fácil
1006
- red = GR::FacilRed.new # true para ver el progreso de entrenamiento
1019
+ red = GRYDRA::FacilRed.new # true para ver el progreso de entrenamiento
1007
1020
 
1008
1021
  # Vamos a asignar activación 'sigmoid' en la última capa para limitar la salida entre 0 y 1
1009
1022
  # Ajustamos internamente en el método agregar_subred
@@ -1026,7 +1039,7 @@ predicciones = red.predecir_numericos(nuevos_datos, :max)
1026
1039
  # Las predicciones ya están desnormalizadas por FacilRed, solo redondeamos
1027
1040
  puts "Predicción peso (kg) para altura \#{nuevos_datos[0][0]} cm y edad \#{nuevos_datos[0][1]} años:"
1028
1041
  print predicciones.map { |p| p[0].round(2) }
1029
- GR.guardar_modelo(red, "peso_promedio")
1042
+ GRYDRA.guardar_modelo(red, "peso_promedio")
1030
1043
  RUBY
1031
1044
  when 8
1032
1045
  contenido = <<-RUBY
@@ -1034,7 +1047,7 @@ GR.guardar_modelo(red, "peso_promedio")
1034
1047
  require 'grydra'
1035
1048
 
1036
1049
  # Cargar el modelo previamente guardado
1037
- modelo = GR.cargar_modelo("peso_promedio")
1050
+ modelo = GRYDRA.cargar_modelo("peso_promedio")
1038
1051
 
1039
1052
  # Datos de entrada para predecir: altura=172 cm, edad=26 años
1040
1053
  nuevos_datos = [[172, 26]]
@@ -1082,14 +1095,14 @@ datos_salida = [
1082
1095
  ]
1083
1096
 
1084
1097
  #Normalziación de datos (dato común --> Dato vectorial)
1085
- max_en = GR.calcular_maximos(datos_entrada, :max) #Usaremos la normalizacion con max, aunque se puede con zscore
1086
- max_sal = GR.calcular_maximos(datos_salida, :max)
1098
+ max_en = GRYDRA.calcular_maximos(datos_entrada, :max) #Usaremos la normalizacion con max, aunque se puede con zscore
1099
+ max_sal = GRYDRA.calcular_maximos(datos_salida, :max)
1087
1100
 
1088
- datos_en_no = GR.normalizar_varios(datos_entrada, max_en, :max) #Por defecto usa max, entonces es opcional usar el :max
1089
- datos_sal_no = GR.normalizar_varios(datos_salida, max_sal)
1101
+ datos_en_no = GRYDRA.normalizar_varios(datos_entrada, max_en, :max) #Por defecto usa max, entonces es opcional usar el :max
1102
+ datos_sal_no = GRYDRA.normalizar_varios(datos_salida, max_sal)
1090
1103
 
1091
1104
  #Creamos la red
1092
- red = GR::RedPrincipal.new
1105
+ red = GRYDRA::RedPrincipal.new
1093
1106
 
1094
1107
  #Necesitamos agregar subredes a nuestra red
1095
1108
  red.agregar_subred([2, 4, 1], [:relu, :tanh])
@@ -1114,7 +1127,7 @@ puts "Introduce los nuevos valores para predecir el precio del producto ej: (12
1114
1127
 
1115
1128
  valores = gets.chomp.strip.split.map(&:to_f)
1116
1129
 
1117
- entrada_nor = GR.normalizar_varios([valores], max_en, :max)[0]
1130
+ entrada_nor = GRYDRA.normalizar_varios([valores], max_en, :max)[0]
1118
1131
  prediccion = red.combinar_resultados(entrada_nor)
1119
1132
  prediccion_desnorm = prediccion[0] * max_sal[0]
1120
1133
  puts "Precio aproximado en dolares es de $\#{prediccion_desnorm.round(2)}"
@@ -1122,9 +1135,9 @@ puts "Precio aproximado en dolares es de $\#{prediccion_desnorm.round(2)}"
1122
1135
  else
1123
1136
  puts "\e[1;35mLos ejemplos posibles son del 1 al 9\e[0m"
1124
1137
  end
1125
- if num_ejemplo <= 9 && num_ejemplo >= 1
1126
- File.write("#{nombre_archivo}.#{extension}", contenido)
1127
- puts "Ejemplo generado y guardado en \e[33m#{path}/#{nombre_archivo}\e[0m"
1138
+ if num_ejemplo.between?(1, 9)
1139
+ File.write(File.join(path, "#{nombre_archivo}.#{extension}"), contenido)
1140
+ puts "Ejemplo generado y guardado en \e[33m#{File.join(path, nombre_archivo)}\e[0m"
1128
1141
  end
1129
1142
  end
1130
1143
  end
data/lib/gr/version.rb CHANGED
@@ -1,3 +1,3 @@
1
- module Gr
2
- VERSION = "0.1.4"
1
+ module GR
2
+ VERSION = "0.1.8"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grydra
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Razo
@@ -38,7 +38,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
38
38
  - !ruby/object:Gem::Version
39
39
  version: '0'
40
40
  requirements: []
41
- rubygems_version: 3.6.9
41
+ rubygems_version: 3.7.1
42
42
  specification_version: 4
43
43
  summary: Librería para redes neuronales en Ruby
44
44
  test_files: []