pyerualjetwork 5.52__py3-none-any.whl → 5.54a0__py3-none-any.whl

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.
@@ -42,7 +42,7 @@ PyerualJetwork document: https://github.com/HCB06/PyerualJetwork/blob/main/Welco
42
42
  - Contact: tchasancan@gmail.com
43
43
  """
44
44
 
45
- __version__ = "5.52"
45
+ __version__ = "5.54a0"
46
46
  __update__ = """* Changes: https://github.com/HCB06/PyerualJetwork/blob/main/CHANGES
47
47
  * PyerualJetwork Homepage: https://github.com/HCB06/PyerualJetwork/tree/main
48
48
  * PyerualJetwork document: https://github.com/HCB06/PyerualJetwork/blob/main/Welcome_to_PyerualJetwork/PYERUALJETWORK_USER_MANUEL_AND_LEGAL_INFORMATION(EN).pdf
@@ -54,8 +54,11 @@ def print_version(version):
54
54
  def print_update_notes(update):
55
55
  print(f"Notes:\n{update}")
56
56
 
57
- print_version(__version__)
58
- print_update_notes(__update__)
57
+ #print_version(__version__)
58
+ #print_update_notes(__update__)
59
+
60
+ import warnings
61
+ warnings.filterwarnings('ignore')
59
62
 
60
63
  required_modules = ["scipy", "tqdm", "pandas", "networkx", "seaborn", "numpy", "matplotlib", "colorama", "cupy", "psutil"]
61
64
 
@@ -71,7 +74,7 @@ if missing_modules:
71
74
  f"Missing modules detected: {', '.join(missing_modules)}\n"
72
75
  "Please run the following command to install the missing packages:\n\n"
73
76
  f" pip install {' '.join(missing_modules)}\n\n"
74
- "NOTE: needed numpy version --> numpy==1.26.4 and if you have cuda toolkit version 12 you need to install with pip --> pip install cupy-cuda12x. If you have not cuda gpu or toolkit and you want a CPU training doesnt matter. You need to install random cupy version. This is NECESSARY module."
77
+ "NOTE: needed numpy version --> numpy==1.26.4 and if you have cuda toolkit version 12 you need to install with pip --> pip install cupy-cuda12x. If you have not cuda gpu or toolkit and you want to use a CPU for training doesnt matter. You need to install random cupy version. This is NECESSARY module."
75
78
  "For more information, visit the PyerualJetwork GitHub README.md file:\n"
76
79
  "https://github.com/HCB06/PyerualJetwork/blob/main/README.md"
77
80
 
pyerualjetwork/nn.py CHANGED
@@ -51,6 +51,8 @@ import numpy as np
51
51
  import cupy as cp
52
52
  import copy
53
53
  import random
54
+ import multiprocessing
55
+ from multiprocessing import Pool, cpu_count
54
56
 
55
57
  ### LIBRARY IMPORTS ###
56
58
  from .ui import loading_bars, initialize_loading_bar
@@ -125,7 +127,7 @@ def learn(x_train, y_train, optimizer, gen, pop_size, fit_start=True, batch_size
125
127
  weight_evolve=True, neural_web_history=False, show_current_activations=False, auto_normalization=False,
126
128
  neurons_history=False, early_stop=False, show_history=False, target_loss=None,
127
129
  interval=33.33, target_acc=None, loss='categorical_crossentropy', acc_impact=0.9, loss_impact=0.1,
128
- start_this_act=None, start_this_W=None, neurons=[], activation_functions=[], decision_boundary_history=False, cuda=False, dtype=np.float32):
130
+ start_this_act=None, start_this_W=None, neurons=[], activation_functions=[], parallel_training=True, decision_boundary_history=False, cuda=False, dtype=np.float32):
129
131
  """
130
132
  Optimizes the activation functions for a neural network by leveraging train data to find
131
133
  the most accurate combination of activation potentiation(or activation function) & weight values for the labeled classificaiton dataset.
@@ -191,6 +193,7 @@ def learn(x_train, y_train, optimizer, gen, pop_size, fit_start=True, batch_size
191
193
  :param decision_boundary_history: (bool, optional): At the end of the training, the decision boundary history is shown in animation form. Note: If you are sure of your memory, set it to True. Default: False
192
194
  :param activation_functions: (list[str], optional): If you dont want train PLAN model this parameter represents activation function of each hidden layer for MLP or PTNN. if neurons is not [] --> uses default: ['linear'] * len(neurons). if neurons is [] --> uses [].
193
195
  :param dtype: (numpy.dtype): Data type for the Weight matrices. np.float32 by default. Example: np.float64 or np.float16.
196
+ :param parallel_training: (bool, optional): Parallel training process ? (automaticly selects maximum thread count of your system) Default = True.
194
197
  :param cuda: (bool, optional): CUDA GPU acceleration ? Default = False.
195
198
 
196
199
  Returns:
@@ -221,6 +224,9 @@ def learn(x_train, y_train, optimizer, gen, pop_size, fit_start=True, batch_size
221
224
  initialize_visualization_for_learner,
222
225
  update_neuron_history_for_learner)
223
226
 
227
+
228
+ if parallel_training: multiprocessing.set_start_method('spawn', force=True)
229
+
224
230
  data = 'Train'
225
231
 
226
232
  template_model = get_model_template()
@@ -359,156 +365,212 @@ def learn(x_train, y_train, optimizer, gen, pop_size, fit_start=True, batch_size
359
365
  progress.last_print_n = 0
360
366
  progress.update(0)
361
367
 
362
- for j in range(pop_size):
363
-
364
- x_train_batch, y_train_batch = batcher(x_train, y_train, batch_size=batch_size)
368
+ if parallel_training:
365
369
 
366
- if fit_start is True and i == 0:
367
- if start_this_act is not None and j == 0:
368
- pass
369
- else:
370
-
371
- act_pop[j] = activations[j]
372
- W = plan_fit(x_train_batch, y_train_batch, activations=act_pop[j], cuda=cuda, auto_normalization=auto_normalization, dtype=dtype)
373
- weight_pop[j] = W
370
+ params = [
371
+ (*batcher(x_train, y_train), None, model_type, weight_pop[j], act_pop[j], activation_potentiations[j], auto_normalization, None, cuda)
372
+ for j in range(pop_size)
373
+ ]
374
+
375
+ with Pool(processes=cpu_count()) as pool:
376
+ models = pool.map(evaluate, params)
374
377
 
378
+ target_pop = []
379
+ losses = []
375
380
 
376
- if weight_evolve is False:
377
- weight_pop[j] = plan_fit(x_train_batch, y_train_batch, activations=act_pop[j], cuda=cuda, auto_normalization=auto_normalization, dtype=dtype)
381
+ for f in range(pop_size):
378
382
 
383
+ if loss == 'categorical_crossentropy':
384
+ train_loss = categorical_crossentropy(y_true_batch=params[f][1],
385
+ y_pred_batch=models[f][get_preds_softmax()])
386
+ else:
387
+ train_loss = binary_crossentropy(y_true_batch=params[f][1],
388
+ y_pred_batch=models[f][get_preds_softmax()])
389
+
390
+ losses.append(train_loss)
379
391
 
380
- model = evaluate(x_train_batch, y_train_batch, W=weight_pop[j], activations=act_pop[j], activation_potentiations=activation_potentiations[j], auto_normalization=auto_normalization, cuda=cuda, model_type=model_type)
381
- acc = model[get_acc()]
392
+ fitness = wals(models[f][get_acc()], train_loss, acc_impact, loss_impact)
393
+ target_pop.append(fitness if not cuda else fitness.get())
382
394
 
383
- if loss == 'categorical_crossentropy':
384
- train_loss = categorical_crossentropy(y_true_batch=y_train_batch,
385
- y_pred_batch=model[get_preds_softmax()])
395
+ best_idx = np.argmax(target_pop)
396
+ best_fitness = target_pop[best_idx]
397
+ best_weight = models[best_idx][0]
398
+ best_loss = losses[best_idx]
399
+ best_acc = models[best_idx][get_acc()]
400
+
401
+ x_train_batch = params[best_idx][0]
402
+ y_train_batch = params[best_idx][1]
403
+
404
+ if isinstance(params[best_idx][5], list) and model_type == 'PLAN':
405
+ final_activations = params[best_idx][5].copy()
406
+ elif isinstance(params[best_idx][5], str):
407
+ final_activations = params[best_idx][5]
386
408
  else:
387
- train_loss = binary_crossentropy(y_true_batch=y_train_batch,
388
- y_pred_batch=model[get_preds_softmax()])
409
+ final_activations = copy.deepcopy(params[best_idx][5])
410
+
411
+ if model_type == 'PLAN': final_activations = [final_activations[0]] if len(set(final_activations)) == 1 else final_activations # removing if all same
389
412
 
390
- fitness = wals(acc, train_loss, acc_impact, loss_impact)
391
- target_pop.append(fitness if not cuda else fitness.get())
392
-
393
- if fitness >= best_fitness:
394
-
395
- best_fitness = fitness
396
- best_acc = acc
397
- best_loss = train_loss
398
- best_weight = np.copy(weight_pop[j]) if model_type == 'PLAN' else copy.deepcopy(weight_pop[j])
399
- best_model = model
400
-
401
- if isinstance(act_pop[j], list) and model_type == 'PLAN':
402
- final_activations = act_pop[j].copy()
403
- elif isinstance(act_pop[j], str):
404
- final_activations = act_pop[j]
405
- else:
406
- final_activations = copy.deepcopy(act_pop[j])
407
-
408
- if model_type == 'PLAN': final_activations = [final_activations[0]] if len(set(final_activations)) == 1 else final_activations # removing if all same
409
-
410
- if batch_size == 1:
411
- postfix_dict[f"{data} Accuracy"] = format_number(best_acc)
412
- postfix_dict[f"{data} Loss"] = format_number(train_loss)
413
- progress.set_postfix(postfix_dict)
414
-
415
- if show_current_activations:
416
- print(f", Current Activations={final_activations}", end='')
417
-
418
- # Update visualizations during training
419
- if show_history:
420
- gen_list = range(1, len(best_acc_per_gen_list) + 2)
421
- update_history_plots_for_learner(viz_objects, gen_list, loss_list + [train_loss],
422
- best_acc_per_gen_list + [best_acc], x_train, final_activations)
423
-
424
- if neurons_history:
425
- viz_objects['neurons']['artists'] = (
426
- update_neuron_history_for_learner(np.copy(best_weight), viz_objects['neurons']['ax'],
427
- viz_objects['neurons']['row'], viz_objects['neurons']['col'],
428
- y_train[0], viz_objects['neurons']['artists'],
429
- data=data, fig1=viz_objects['neurons']['fig'],
430
- acc=best_acc, loss=train_loss)
431
- )
432
-
433
- if neural_web_history:
434
- art5_1, art5_2, art5_3 = draw_neural_web(W=best_weight, ax=viz_objects['web']['ax'],
435
- G=viz_objects['web']['G'], return_objs=True)
436
- art5_list = [art5_1] + [art5_2] + list(art5_3.values())
437
- viz_objects['web']['artists'].append(art5_list)
438
-
439
- # Check target accuracy
440
- if target_acc is not None and best_acc >= target_acc:
441
- progress.close()
442
- train_model = evaluate(x_train, y_train, W=best_weight,
443
- activations=final_activations, activation_potentiations=activation_potentiation, auto_normalization=auto_normalization, cuda=cuda, model_type=model_type)
444
- if loss == 'categorical_crossentropy':
445
- train_loss = categorical_crossentropy(y_true_batch=y_train,
446
- y_pred_batch=train_model[get_preds_softmax()])
447
- else:
448
- train_loss = binary_crossentropy(y_true_batch=y_train,
449
- y_pred_batch=train_model[get_preds_softmax()])
450
-
451
- print('\nActivations: ', final_activations)
452
- print('Activation Potentiation: ', activation_potentiation)
453
- print('Train Accuracy:', train_model[get_acc()])
454
- print('Train Loss: ', train_loss, '\n')
455
- print('Model Type:', model_type)
456
-
457
- if decision_boundary_history: display_decision_boundary_history(fig, artist, interval=interval)
413
+ losses = []
458
414
 
459
- display_visualizations_for_learner(viz_objects, best_weight, data, best_acc,
460
- best_loss, y_train, interval)
461
-
462
- model = template_model._replace(weights=best_weight,
463
- predictions=best_model[get_preds()],
464
- accuracy=best_acc,
465
- activations=final_activations,
466
- softmax_predictions=best_model[get_preds_softmax()],
467
- model_type=model_type,
468
- activation_potentiation=activation_potentiation)
469
-
470
- return model
471
-
472
- # Check target loss
473
- if target_loss is not None and best_loss <= target_loss:
474
- progress.close()
475
- train_model = evaluate(x_train, y_train, W=best_weight,
476
- activations=final_activations, activation_potentiations=activation_potentiation, auto_normalization=auto_normalization, cuda=cuda, model_type=model_type)
477
-
478
- if loss == 'categorical_crossentropy':
479
- train_loss = categorical_crossentropy(y_true_batch=y_train,
480
- y_pred_batch=train_model[get_preds_softmax()])
481
- else:
482
- train_loss = binary_crossentropy(y_true_batch=y_train,
483
- y_pred_batch=train_model[get_preds_softmax()])
415
+ if batch_size == 1:
416
+ postfix_dict[f"{data} Accuracy"] = format_number(best_acc)
417
+ postfix_dict[f"{data} Loss"] = format_number(best_loss)
418
+ progress.set_postfix(postfix_dict)
484
419
 
485
- print('\nActivations: ', final_activations)
486
- print('Activation Potentiation: ', activation_potentiation)
487
- print('Train Accuracy:', train_model[get_acc()])
488
- print('Train Loss: ', train_loss, '\n')
489
- print('Model Type:', model_type)
420
+ progress.update(1)
490
421
 
491
- if decision_boundary_history: display_decision_boundary_history(fig, artist, interval=interval)
422
+ else:
492
423
 
493
- # Display final visualizations
494
- display_visualizations_for_learner(viz_objects, best_weight, data, best_acc,
495
- train_loss, y_train, interval)
496
-
497
- model = template_model._replace(weights=best_weight,
498
- predictions=best_model[get_preds()],
499
- accuracy=best_acc,
500
- activations=final_activations,
501
- softmax_predictions=best_model[get_preds_softmax()],
502
- model_type=model_type,
503
- activation_potentiation=activation_potentiation)
504
-
505
- return model
424
+ for j in range(pop_size):
425
+
426
+ x_train_batch, y_train_batch = batcher(x_train, y_train, batch_size=batch_size)
506
427
 
428
+ if fit_start is True and i == 0:
429
+ if start_this_act is not None and j == 0:
430
+ pass
431
+ else:
507
432
 
508
- progress.update(1)
433
+ act_pop[j] = activations[j]
434
+ W = plan_fit(x_train_batch, y_train_batch, activations=act_pop[j], cuda=cuda, auto_normalization=auto_normalization, dtype=dtype)
435
+ weight_pop[j] = W
436
+
437
+
438
+ if weight_evolve is False:
439
+ weight_pop[j] = plan_fit(x_train_batch, y_train_batch, activations=act_pop[j], cuda=cuda, auto_normalization=auto_normalization, dtype=dtype)
440
+
441
+
442
+ model = evaluate(x_train_batch, y_train_batch, W=weight_pop[j], activations=act_pop[j], activation_potentiations=activation_potentiations[j], auto_normalization=auto_normalization, cuda=cuda, model_type=model_type)
443
+ acc = model[get_acc()]
444
+
445
+ if loss == 'categorical_crossentropy':
446
+ train_loss = categorical_crossentropy(y_true_batch=y_train_batch,
447
+ y_pred_batch=model[get_preds_softmax()])
448
+ else:
449
+ train_loss = binary_crossentropy(y_true_batch=y_train_batch,
450
+ y_pred_batch=model[get_preds_softmax()])
451
+
452
+ fitness = wals(acc, train_loss, acc_impact, loss_impact)
453
+ target_pop.append(fitness if not cuda else fitness.get())
454
+
455
+ if fitness >= best_fitness:
456
+
457
+ best_fitness = fitness
458
+ best_acc = acc
459
+ best_loss = train_loss
460
+ best_weight = np.copy(weight_pop[j]) if model_type == 'PLAN' else copy.deepcopy(weight_pop[j])
461
+ best_model = model
462
+
463
+ if isinstance(act_pop[j], list) and model_type == 'PLAN':
464
+ final_activations = act_pop[j].copy()
465
+ elif isinstance(act_pop[j], str):
466
+ final_activations = act_pop[j]
467
+ else:
468
+ final_activations = copy.deepcopy(act_pop[j])
469
+
470
+ if model_type == 'PLAN': final_activations = [final_activations[0]] if len(set(final_activations)) == 1 else final_activations # removing if all same
471
+
472
+ if batch_size == 1:
473
+ postfix_dict[f"{data} Accuracy"] = format_number(best_acc)
474
+ postfix_dict[f"{data} Loss"] = format_number(train_loss)
475
+ progress.set_postfix(postfix_dict)
476
+
477
+ if show_current_activations:
478
+ print(f", Current Activations={final_activations}", end='')
479
+
480
+ # Update visualizations during training
481
+ if show_history:
482
+ gen_list = range(1, len(best_acc_per_gen_list) + 2)
483
+ update_history_plots_for_learner(viz_objects, gen_list, loss_list + [train_loss],
484
+ best_acc_per_gen_list + [best_acc], x_train, final_activations)
485
+
486
+ if neurons_history:
487
+ viz_objects['neurons']['artists'] = (
488
+ update_neuron_history_for_learner(np.copy(best_weight), viz_objects['neurons']['ax'],
489
+ viz_objects['neurons']['row'], viz_objects['neurons']['col'],
490
+ y_train[0], viz_objects['neurons']['artists'],
491
+ data=data, fig1=viz_objects['neurons']['fig'],
492
+ acc=best_acc, loss=train_loss)
493
+ )
494
+
495
+ if neural_web_history:
496
+ art5_1, art5_2, art5_3 = draw_neural_web(W=best_weight, ax=viz_objects['web']['ax'],
497
+ G=viz_objects['web']['G'], return_objs=True)
498
+ art5_list = [art5_1] + [art5_2] + list(art5_3.values())
499
+ viz_objects['web']['artists'].append(art5_list)
500
+
501
+ # Check target accuracy
502
+ if target_acc is not None and best_acc >= target_acc:
503
+ progress.close()
504
+ train_model = evaluate(x_train, y_train, W=best_weight,
505
+ activations=final_activations, activation_potentiations=activation_potentiation, auto_normalization=auto_normalization, cuda=cuda, model_type=model_type)
506
+ if loss == 'categorical_crossentropy':
507
+ train_loss = categorical_crossentropy(y_true_batch=y_train,
508
+ y_pred_batch=train_model[get_preds_softmax()])
509
+ else:
510
+ train_loss = binary_crossentropy(y_true_batch=y_train,
511
+ y_pred_batch=train_model[get_preds_softmax()])
512
+
513
+ print('\nActivations: ', final_activations)
514
+ print('Activation Potentiation: ', activation_potentiation)
515
+ print('Train Accuracy:', train_model[get_acc()])
516
+ print('Train Loss: ', train_loss, '\n')
517
+ print('Model Type:', model_type)
518
+
519
+ if decision_boundary_history: display_decision_boundary_history(fig, artist, interval=interval)
520
+
521
+ display_visualizations_for_learner(viz_objects, best_weight, data, best_acc,
522
+ best_loss, y_train, interval)
523
+
524
+ model = template_model._replace(weights=best_weight,
525
+ predictions=best_model[get_preds()],
526
+ accuracy=best_acc,
527
+ activations=final_activations,
528
+ softmax_predictions=best_model[get_preds_softmax()],
529
+ model_type=model_type,
530
+ activation_potentiation=activation_potentiation)
531
+
532
+ return model
533
+
534
+ # Check target loss
535
+ if target_loss is not None and best_loss <= target_loss:
536
+ progress.close()
537
+ train_model = evaluate(x_train, y_train, W=best_weight,
538
+ activations=final_activations, activation_potentiations=activation_potentiation, auto_normalization=auto_normalization, cuda=cuda, model_type=model_type)
539
+
540
+ if loss == 'categorical_crossentropy':
541
+ train_loss = categorical_crossentropy(y_true_batch=y_train,
542
+ y_pred_batch=train_model[get_preds_softmax()])
543
+ else:
544
+ train_loss = binary_crossentropy(y_true_batch=y_train,
545
+ y_pred_batch=train_model[get_preds_softmax()])
546
+
547
+ print('\nActivations: ', final_activations)
548
+ print('Activation Potentiation: ', activation_potentiation)
549
+ print('Train Accuracy:', train_model[get_acc()])
550
+ print('Train Loss: ', train_loss, '\n')
551
+ print('Model Type:', model_type)
552
+
553
+ if decision_boundary_history: display_decision_boundary_history(fig, artist, interval=interval)
554
+
555
+ # Display final visualizations
556
+ display_visualizations_for_learner(viz_objects, best_weight, data, best_acc,
557
+ train_loss, y_train, interval)
558
+
559
+ model = template_model._replace(weights=best_weight,
560
+ predictions=best_model[get_preds()],
561
+ accuracy=best_acc,
562
+ activations=final_activations,
563
+ softmax_predictions=best_model[get_preds_softmax()],
564
+ model_type=model_type,
565
+ activation_potentiation=activation_potentiation)
566
+
567
+ return model
568
+
569
+
570
+ progress.update(1)
509
571
 
510
572
  if decision_boundary_history:
511
- if i == 0:
573
+ if i == 0:
512
574
  fig, ax = create_decision_boundary_hist()
513
575
  artist = []
514
576
  artist = plot_decision_boundary(x_train_batch, y_train_batch, activations=act_pop[np.argmax(target_pop)], W=weight_pop[np.argmax(target_pop)], cuda=cuda, model_type=model_type, ax=ax, artist=artist)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyerualjetwork
3
- Version: 5.52
3
+ Version: 5.54a0
4
4
  Summary: PyereualJetwork is a GPU-accelerated machine learning library in Python for professionals and researchers. It features PLAN, MLP, Deep Learning training, and ENE (Eugenic NeuroEvolution) for genetic optimization, applicable to genetic algorithms or Reinforcement Learning (RL). The library includes data pre-processing, visualizations, model saving/loading, prediction, evaluation, training, and detailed or simplified memory management.
5
5
  Author: Hasan Can Beydili
6
6
  Author-email: tchasancan@gmail.com
@@ -1,11 +1,11 @@
1
- pyerualjetwork/__init__.py,sha256=93JmJyIRyPAJBuagvrhiQ_h1HA33WUreKf1yODb71ro,3020
1
+ pyerualjetwork/__init__.py,sha256=N_cbeybjGF-Rkt59eqjxcWNz4Rc7RSSFpkW8UbEcUDk,3089
2
2
  pyerualjetwork/ene.py,sha256=luTvspHRTose6s3uRas40pNXyKoxU9siaHiMBNI5yoc,42136
3
3
  pyerualjetwork/fitness_functions.py,sha256=D9JVCr9DFid_xXgBD4uCKxdW2k10MVDE5HZRSOK4Igg,1237
4
4
  pyerualjetwork/help.py,sha256=sn9jBzXkQsTZvdgsUXUpSs_BbYYIgY3whofg6dj8peI,848
5
5
  pyerualjetwork/issue_solver.py,sha256=uay_9XK6xWnLmK2P_BeyDQlyNXzg_zYffnXYd228wZk,4102
6
6
  pyerualjetwork/memory_ops.py,sha256=TUFh9SYWCKL6N-vNdWId_EwU313TuZomQCHOrltrD-4,14280
7
7
  pyerualjetwork/model_ops.py,sha256=WaP1XwKqXMfZl4Yop8a1Bg0xtmLYgap9JFOWHaLr7S4,25143
8
- pyerualjetwork/nn.py,sha256=nKOgAE0k9sFKB-r69V1cMwW6-4Yv8z98o9Ys1Cvhpdo,36810
8
+ pyerualjetwork/nn.py,sha256=6MyHMIN5wNBISfGSpQtR1tt-DU_eYK0Iz5M2dWqzgWg,39931
9
9
  pyerualjetwork/old_cpu_model_ops.py,sha256=1KNgjUeYCO_TsA5RtbNiuIiBJzq8-rL2dE6jxKqCBU0,21481
10
10
  pyerualjetwork/old_cuda_model_ops.py,sha256=KAscAd8e_I8Vqdd9BJaHd6-IG6fhxFglAFxys0sqmEo,23079
11
11
  pyerualjetwork/ui.py,sha256=JBTFYz5R24XwNKhA3GSW-oYAoiIBxAE3kFGXkvm5gqw,656
@@ -21,7 +21,7 @@ pyerualjetwork/cuda/data_ops.py,sha256=BEXh4M7BWXaTpYlVS9D2i3CGgOmL5131vy7FZyuTQ
21
21
  pyerualjetwork/cuda/loss_functions.py,sha256=C93IZJcrOpT6HMK9x1O4AHJWXYTkN5WZiqdssPbvAPk,617
22
22
  pyerualjetwork/cuda/metrics.py,sha256=PjDBoRvr6va8vRvDIJJGBO4-I4uumrk3NCM1Vz4NJTo,5054
23
23
  pyerualjetwork/cuda/visualizations.py,sha256=2mHE7iqqsN3K6xtCnemS4o_YWGS0bIV2IxF4cG6Ur9k,20090
24
- pyerualjetwork-5.52.dist-info/METADATA,sha256=hqIRHmExMs8Umnw2hmYQp-Te87cxJV0IjCHOHcqln6Y,7988
25
- pyerualjetwork-5.52.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
26
- pyerualjetwork-5.52.dist-info/top_level.txt,sha256=BRyt62U_r3ZmJpj-wXNOoA345Bzamrj6RbaWsyW4tRg,15
27
- pyerualjetwork-5.52.dist-info/RECORD,,
24
+ pyerualjetwork-5.54a0.dist-info/METADATA,sha256=LnHR2Ocf8ZSM2mmZj2lbia7tQvPM4bpzafxe5M-Kw10,7990
25
+ pyerualjetwork-5.54a0.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
26
+ pyerualjetwork-5.54a0.dist-info/top_level.txt,sha256=BRyt62U_r3ZmJpj-wXNOoA345Bzamrj6RbaWsyW4tRg,15
27
+ pyerualjetwork-5.54a0.dist-info/RECORD,,