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.
- pyerualjetwork/__init__.py +7 -4
- pyerualjetwork/nn.py +197 -135
- {pyerualjetwork-5.52.dist-info → pyerualjetwork-5.54a0.dist-info}/METADATA +1 -1
- {pyerualjetwork-5.52.dist-info → pyerualjetwork-5.54a0.dist-info}/RECORD +6 -6
- {pyerualjetwork-5.52.dist-info → pyerualjetwork-5.54a0.dist-info}/WHEEL +0 -0
- {pyerualjetwork-5.52.dist-info → pyerualjetwork-5.54a0.dist-info}/top_level.txt +0 -0
pyerualjetwork/__init__.py
CHANGED
@@ -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.
|
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
|
-
|
363
|
-
|
364
|
-
x_train_batch, y_train_batch = batcher(x_train, y_train, batch_size=batch_size)
|
368
|
+
if parallel_training:
|
365
369
|
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
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
|
-
|
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
|
-
|
381
|
-
|
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
|
-
|
384
|
-
|
385
|
-
|
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
|
-
|
388
|
-
|
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
|
-
|
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
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
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
|
-
|
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
|
-
|
422
|
+
else:
|
492
423
|
|
493
|
-
|
494
|
-
|
495
|
-
|
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
|
-
|
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.
|
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=
|
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=
|
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.
|
25
|
-
pyerualjetwork-5.
|
26
|
-
pyerualjetwork-5.
|
27
|
-
pyerualjetwork-5.
|
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,,
|
File without changes
|
File without changes
|