Genetic Neural Networks:
ABSTRACT— This paper focuses on the training procedure of artificial neural networks for portfolio management. More specifically, it investigates a neural network -with weights derived from a genetic algorithm embedded in the training process, that automates a buy/sell/hold procedure by learning from the direction of a stock within a “diversified portfolio” (in this case a portfolio of the Dow Jones Industrial Index; hence the loose usage of the term). The binary indicators are generated using a function that observes the daily percentage changes of the index and assigns the corresponding operator if the change is a more than 5% gain, more than a 5% loss, or anything in between. Further development of the project can incorporate a diversified portfolio of securities and reallocate the portfolio weights and/or target beta and then execute the appropriate transactions or complete liquidation of the portfolio depending on its performance. While genetic algorithms are not the end-all of metaheuristic methods, the healthy skepticism that machine learning in a panacea for quantitative finance warrants a rethinking of neural networks. Embedding more traditional techniques could provide better alternatives to the sometimes unnecessarily -and even fatally, complex methods developed in the field.
KEYWORDS— Algorithms, Artificial, Evolutionary, Genetic, Liquidation, Networks, Neural, Portfolio Management, Training
I. FEEDFORWARD NEURAL NETWORKS
A deep feedforward network is a function of the form,
\begin{equation} \boxed{\hat{Y}(X):=F_{W,b}(X)=(f^{(L)}_{W^{(L)},b^{(L)}}...◦f^{(1)}_{W^{(1)},b^{(1)}})(X)} \end{equation}
\(\overline{f^{(l)}_{W^{(l)},b^{(l)}}(X):=\sigma^{l}(W^{(l)}X+b^{(l)})}\) is a semi-affine function with \(\sigma^{(l)}\) as a univariate, continuous, non-linear activation function such as \(tanh(●)\), \(sigmoid\) or \(max(●,0)\),
\(W=(W^{(1)},...,W^{(L)})\) are the weight matrices (which will be substituted by the optimal weights generated by the genetic algorithm described below),
\(b=(b^{(1)},...,b^{(L)})\) are the offsets.
II. GENETIC ALGORITHMS
A. Survival of the Fittest
Genetic algorithms search for the optimal solution in a solution space. While Darwinian evolution maintains a population of specimens, genetic algorithms work through a population of candidate solutions, called individuals. The candidate solutions are evaluated and transformed into a novel generation of solutions. In a “survival of the fittest” contest, the more suitable solutions have an increased probability of being selected and passing their qualities to the next generation of candidate solutions.
B. Population
Since each individual solution is usually represented by a series of binary strings, the population of individuals can be viewed as a collection of solutions. The population represents the current population and evolves with each iteration.
C. Fitness Function
At each iteration of the algorithm, the individuals are evaluated using a fitness or target function, which is the function under optimization. Individuals with a higher fitness score are more likely candidates to create “off-spring” in the next generation of solutions. Over time, the quality of the solutions improves, the fitness values increase, and the process can stop once a solution is found with a satisfactory fitness value.
D. Crossover
For the next generation, two parents are chosen from the current generation and are recombined to create children weights in a specific fashion. In this project, a quasirandom matrix multiplication between the different weights is implemented.
E. Mutation
A mutation works as a seed to refresh the population and expand the areas under search in the solution space. Mutations in this project were implemented as a multiplication with an integer drawn from a random uniform distribution.
The main advantages of genetic algorithms that make them suitable for a neural network hybrid are the following:
- Potential to find a global optimum
- Ability to handle problems with a complex mathematical definition
- Adversity to noise
III. DATA
The data was generated using a built-in percent change function and a custom if/elif/else function that assigns the binary operators to each datapoint. The daily adjusted close price across 7 years for the Dow Jones Industrial index is also suitable for the discovery of a fundamental beta upon the expansion of the engine source code to include a real diversified portfolio of securities. However, the user is in the position to adjust the duration of the time span of their data to meet their needs.
Date |
^DJI |
Daily Change |
Liquidate |
2007-01-03 |
12474.519531 |
0.000000 |
0 |
2007-01-04 |
12480.690430 |
0.000495 |
0 |
2007-01-05 |
12398.009766 |
-0.006625 |
-1 |
2007-01-08 |
12423.490234 |
0.002055 |
0 |
2007-01-09 |
12416.599609 |
-0.000555 |
0 |
... |
... |
... |
... |
2020-01-06 |
28703.380859 |
0.002392 |
0 |
2020-01-07 |
28583.679688 |
-0.004170 |
0 |
2020-01-08 |
28745.089844 |
0.005647 |
1 |
2020-01-09 |
28956.900391 |
0.007369 |
1 |
2020-01-10 |
28823.769531 |
-0.004598 |
0 |
IV. GENETIC NEURAL NETWORKS
A genetic neural network can be defined as the same function for a neural network,
\begin{equation} \boxed{\hat{Y}(X):=F_{🧬,b}(X)=(f^{(L)}_{🧬^{(L)},b^{(L)}}...◦f^{(1)}_{🧬^{(1)},b^{(1)}})(X)} \end{equation}
\(\overline{f^{(l)}_{🧬^{(l)},b^{(l)}}(X):=\sigma^{l}(🧬^{(l)}X+b^{(l)})}\) is a semi-affine function with \(\sigma^{(l)}\) as a univariate, continuous, non-linear activation function such as \(tanh(●)\), \(sigmoid\) or \(max(●,0)\),
\(🧬=(🧬^{(1)},...,🧬^{(L)})\) are the weight matrices (which will be substituted by the optimal weights generated by the genetic algorithm described below),
\(b=(b^{(1)},...,b^{(L)})\) are the offsets.
IV. RESULTS & DISCUSSION
The parameters and essential metrics of the Feedforward Neural Network construct are the following:
- 500 Epochs
- Initial Fitness Score: 0.26
- Fitness Score at the end of Epoch 500: 0.57
WARNING:tensorflow:From /tensorflow-1.15.2/python3.6/tensorflow_core/python/ops/math_grad.py:1424: where (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.
Instructions for updating:
Use tf.where in 2.0, which has the same broadcast rule as np.where
Epoch 1/500
2459/2459 [==============================] - 0s 195us/step - loss: 0.9783 - accuracy: 0.2554
Epoch 2/500
2459/2459 [==============================] - 0s 55us/step - loss: 0.9774 - accuracy: 0.2554
Epoch 3/500
2459/2459 [==============================] - 0s 51us/step - loss: 0.9765 - accuracy: 0.2554
Epoch 4/500
2459/2459 [==============================] - 0s 49us/step - loss: 0.9756 - accuracy: 0.2554
Epoch 5/500
2459/2459 [==============================] - 0s 49us/step - loss: 0.9747 - accuracy: 0.2554
Epoch 6/500
2459/2459 [==============================] - 0s 48us/step - loss: 0.9738 - accuracy: 0.2554
Epoch 7/500
2459/2459 [==============================] - 0s 49us/step - loss: 0.9730 - accuracy: 0.2554
Epoch 8/500
2459/2459 [==============================] - 0s 49us/step - loss: 0.9721 - accuracy: 0.2554
Epoch 9/500
2459/2459 [==============================] - 0s 49us/step - loss: 0.9712 - accuracy: 0.2554
Epoch 10/500
2459/2459 [==============================] - 0s 50us/step - loss: 0.9703 - accuracy: 0.2554
Epoch 11/500
2459/2459 [==============================] - 0s 50us/step - loss: 0.9695 - accuracy: 0.2554
Epoch 12/500
2459/2459 [==============================] - 0s 50us/step - loss: 0.9687 - accuracy: 0.2554
Epoch 13/500
2459/2459 [==============================] - 0s 48us/step - loss: 0.9679 - accuracy: 0.2554
Epoch 14/500
2459/2459 [==============================] - 0s 49us/step - loss: 0.9670 - accuracy: 0.2554
Epoch 15/500
2459/2459 [==============================] - 0s 49us/step - loss: 0.9662 - accuracy: 0.2554
Epoch 16/500
2459/2459 [==============================] - 0s 49us/step - loss: 0.9653 - accuracy: 0.2554
Epoch 17/500
2459/2459 [==============================] - 0s 50us/step - loss: 0.9645 - accuracy: 0.2554
Epoch 18/500
2459/2459 [==============================] - 0s 49us/step - loss: 0.9636 - accuracy: 0.2554
Epoch 19/500
2459/2459 [==============================] - 0s 51us/step - loss: 0.9697 - accuracy: 0.2554
Epoch 20/500
2459/2459 [==============================] - 0s 50us/step - loss: 0.9616 - accuracy: 0.2554
Epoch 21/500
2459/2459 [==============================] - 0s 49us/step - loss: 0.9605 - accuracy: 0.2554
Epoch 22/500
2459/2459 [==============================] - 0s 49us/step - loss: 0.9591 - accuracy: 0.2554
Epoch 23/500
2459/2459 [==============================] - 0s 49us/step - loss: 0.9577 - accuracy: 0.2554
Epoch 24/500
2459/2459 [==============================] - 0s 49us/step - loss: 0.9559 - accuracy: 0.2554
Epoch 25/500
2459/2459 [==============================] - 0s 49us/step - loss: 0.9539 - accuracy: 0.2554
Epoch 26/500
2459/2459 [==============================] - 0s 49us/step - loss: 0.9515 - accuracy: 0.2554
Epoch 27/500
2459/2459 [==============================] - 0s 51us/step - loss: 0.9487 - accuracy: 0.2554
Epoch 28/500
2459/2459 [==============================] - 0s 49us/step - loss: 0.9456 - accuracy: 0.2554
Epoch 29/500
2459/2459 [==============================] - 0s 49us/step - loss: 0.9418 - accuracy: 0.2554
Epoch 30/500
2459/2459 [==============================] - 0s 46us/step - loss: 0.9370 - accuracy: 0.2554
Epoch 31/500
2459/2459 [==============================] - 0s 47us/step - loss: 0.9319 - accuracy: 0.2554
Epoch 32/500
2459/2459 [==============================] - 0s 47us/step - loss: 0.9264 - accuracy: 0.2554
Epoch 33/500
2459/2459 [==============================] - 0s 47us/step - loss: 0.9197 - accuracy: 0.2554
Epoch 34/500
2459/2459 [==============================] - 0s 47us/step - loss: 0.9126 - accuracy: 0.2554
Epoch 35/500
2459/2459 [==============================] - 0s 47us/step - loss: 0.9049 - accuracy: 0.2554
Epoch 36/500
2459/2459 [==============================] - 0s 46us/step - loss: 0.8964 - accuracy: 0.2554
Epoch 37/500
2459/2459 [==============================] - 0s 46us/step - loss: 0.8872 - accuracy: 0.2651
Epoch 38/500
2459/2459 [==============================] - 0s 46us/step - loss: 0.8778 - accuracy: 0.3257
Epoch 39/500
2459/2459 [==============================] - 0s 46us/step - loss: 0.8683 - accuracy: 0.3729
Epoch 40/500
2459/2459 [==============================] - 0s 46us/step - loss: 0.8587 - accuracy: 0.4099
Epoch 41/500
2459/2459 [==============================] - 0s 47us/step - loss: 0.8489 - accuracy: 0.4319
Epoch 42/500
2459/2459 [==============================] - 0s 47us/step - loss: 0.8398 - accuracy: 0.4522
Epoch 43/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.8307 - accuracy: 0.4595
Epoch 44/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.8219 - accuracy: 0.4693
Epoch 45/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.8137 - accuracy: 0.4843
Epoch 46/500
2459/2459 [==============================] - 0s 47us/step - loss: 0.8059 - accuracy: 0.4900
Epoch 47/500
2459/2459 [==============================] - 0s 48us/step - loss: 0.7991 - accuracy: 0.4965
Epoch 48/500
2459/2459 [==============================] - 0s 47us/step - loss: 0.7928 - accuracy: 0.5031
Epoch 49/500
2459/2459 [==============================] - 0s 47us/step - loss: 0.7871 - accuracy: 0.5063
Epoch 50/500
2459/2459 [==============================] - 0s 46us/step - loss: 0.7820 - accuracy: 0.5096
Epoch 51/500
2459/2459 [==============================] - 0s 47us/step - loss: 0.7776 - accuracy: 0.5108
Epoch 52/500
2459/2459 [==============================] - 0s 47us/step - loss: 0.7735 - accuracy: 0.5132
Epoch 53/500
2459/2459 [==============================] - 0s 47us/step - loss: 0.7700 - accuracy: 0.5148
Epoch 54/500
2459/2459 [==============================] - 0s 47us/step - loss: 0.7669 - accuracy: 0.5153
Epoch 55/500
2459/2459 [==============================] - 0s 47us/step - loss: 0.7642 - accuracy: 0.5169
Epoch 56/500
2459/2459 [==============================] - 0s 47us/step - loss: 0.7668 - accuracy: 0.5197
Epoch 57/500
2459/2459 [==============================] - 0s 46us/step - loss: 0.7600 - accuracy: 0.5214
Epoch 58/500
2459/2459 [==============================] - 0s 46us/step - loss: 0.7582 - accuracy: 0.5246
Epoch 59/500
2459/2459 [==============================] - 0s 47us/step - loss: 0.7566 - accuracy: 0.5270
Epoch 60/500
2459/2459 [==============================] - 0s 46us/step - loss: 0.7552 - accuracy: 0.5262
Epoch 61/500
2459/2459 [==============================] - 0s 48us/step - loss: 0.7539 - accuracy: 0.5287
Epoch 62/500
2459/2459 [==============================] - 0s 47us/step - loss: 0.7529 - accuracy: 0.5299
Epoch 63/500
2459/2459 [==============================] - 0s 47us/step - loss: 0.7519 - accuracy: 0.5327
Epoch 64/500
2459/2459 [==============================] - 0s 48us/step - loss: 0.7511 - accuracy: 0.5340
Epoch 65/500
2459/2459 [==============================] - 0s 46us/step - loss: 0.7503 - accuracy: 0.5348
Epoch 66/500
2459/2459 [==============================] - 0s 47us/step - loss: 0.7497 - accuracy: 0.5356
Epoch 67/500
2459/2459 [==============================] - 0s 47us/step - loss: 0.7491 - accuracy: 0.5356
Epoch 68/500
2459/2459 [==============================] - 0s 47us/step - loss: 0.7486 - accuracy: 0.5384
Epoch 69/500
2459/2459 [==============================] - 0s 48us/step - loss: 0.7481 - accuracy: 0.5380
Epoch 70/500
2459/2459 [==============================] - 0s 46us/step - loss: 0.7477 - accuracy: 0.5392
Epoch 71/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7474 - accuracy: 0.5397
Epoch 72/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7471 - accuracy: 0.5397
Epoch 73/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7468 - accuracy: 0.5413
Epoch 74/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7514 - accuracy: 0.5421
Epoch 75/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7464 - accuracy: 0.5433
Epoch 76/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7462 - accuracy: 0.5449
Epoch 77/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7460 - accuracy: 0.5449
Epoch 78/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7459 - accuracy: 0.5449
Epoch 79/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7457 - accuracy: 0.5449
Epoch 80/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7456 - accuracy: 0.5449
Epoch 81/500
2459/2459 [==============================] - 0s 46us/step - loss: 0.7455 - accuracy: 0.5449
Epoch 82/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7454 - accuracy: 0.5449
Epoch 83/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7453 - accuracy: 0.5453
Epoch 84/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7452 - accuracy: 0.5453
Epoch 85/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7452 - accuracy: 0.5453
Epoch 86/500
2459/2459 [==============================] - 0s 51us/step - loss: 0.7451 - accuracy: 0.5453
Epoch 87/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7451 - accuracy: 0.5453
Epoch 88/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7450 - accuracy: 0.5453
Epoch 89/500
2459/2459 [==============================] - 0s 46us/step - loss: 0.7450 - accuracy: 0.5453
Epoch 90/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7449 - accuracy: 0.5458
Epoch 91/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7449 - accuracy: 0.5458
Epoch 92/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7449 - accuracy: 0.5458
Epoch 93/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7448 - accuracy: 0.5458
Epoch 94/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7448 - accuracy: 0.5453
Epoch 95/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7448 - accuracy: 0.5458
Epoch 96/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7448 - accuracy: 0.5453
Epoch 97/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7448 - accuracy: 0.5453
Epoch 98/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7447 - accuracy: 0.5453
Epoch 99/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7447 - accuracy: 0.5453
Epoch 100/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7447 - accuracy: 0.5453
Epoch 101/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7447 - accuracy: 0.5453
Epoch 102/500
2459/2459 [==============================] - 0s 47us/step - loss: 0.7447 - accuracy: 0.5453
Epoch 103/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7447 - accuracy: 0.5453
Epoch 104/500
2459/2459 [==============================] - 0s 47us/step - loss: 0.7447 - accuracy: 0.5453
Epoch 105/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7447 - accuracy: 0.5453
Epoch 106/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7447 - accuracy: 0.5453
Epoch 107/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7447 - accuracy: 0.5453
Epoch 108/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7447 - accuracy: 0.5453
Epoch 109/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5458
Epoch 110/500
2459/2459 [==============================] - 0s 47us/step - loss: 0.7446 - accuracy: 0.5458
Epoch 111/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5458
Epoch 112/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5462
Epoch 113/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5462
Epoch 114/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5462
Epoch 115/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5466
Epoch 116/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5466
Epoch 117/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5466
Epoch 118/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5466
Epoch 119/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5470
Epoch 120/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5470
Epoch 121/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5470
Epoch 122/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5470
Epoch 123/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 124/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 125/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 126/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 127/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 128/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 129/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 130/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 131/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 132/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 133/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 134/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 135/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 136/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7479 - accuracy: 0.5474
Epoch 137/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 138/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 139/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 140/500
2459/2459 [==============================] - 0s 46us/step - loss: 0.7471 - accuracy: 0.5474
Epoch 141/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 142/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 143/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 144/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 145/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 146/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 147/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 148/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 149/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 150/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 151/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 152/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 153/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 154/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 155/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 156/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 157/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 158/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 159/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 160/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 161/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 162/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 163/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 164/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 165/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 166/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 167/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 168/500
2459/2459 [==============================] - 0s 46us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 169/500
2459/2459 [==============================] - 0s 46us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 170/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 171/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 172/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 173/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 174/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 175/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 176/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 177/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7475 - accuracy: 0.5474
Epoch 178/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 179/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 180/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5474
Epoch 181/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7511 - accuracy: 0.5486
Epoch 182/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5490
Epoch 183/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5490
Epoch 184/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5490
Epoch 185/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5490
Epoch 186/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7536 - accuracy: 0.5494
Epoch 187/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5498
Epoch 188/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5498
Epoch 189/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5498
Epoch 190/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5498
Epoch 191/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5498
Epoch 192/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5498
Epoch 193/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5498
Epoch 194/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5498
Epoch 195/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5498
Epoch 196/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5498
Epoch 197/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5498
Epoch 198/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5498
Epoch 199/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5498
Epoch 200/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7487 - accuracy: 0.5506
Epoch 201/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 202/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 203/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 204/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 205/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 206/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 207/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 208/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 209/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 210/500
2459/2459 [==============================] - 0s 46us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 211/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 212/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 213/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 214/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 215/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 216/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 217/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 218/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 219/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 220/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 221/500
2459/2459 [==============================] - 0s 46us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 222/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 223/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 224/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 225/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 226/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 227/500
2459/2459 [==============================] - 0s 41us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 228/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 229/500
2459/2459 [==============================] - 0s 42us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 230/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 231/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 232/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 233/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 234/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 235/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 236/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 237/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 238/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 239/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 240/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 241/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 242/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5506
Epoch 243/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7491 - accuracy: 0.5514
Epoch 244/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 245/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 246/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 247/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 248/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 249/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 250/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 251/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 252/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 253/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 254/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 255/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 256/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 257/500
2459/2459 [==============================] - 0s 46us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 258/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 259/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 260/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 261/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 262/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 263/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 264/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 265/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 266/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 267/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 268/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 269/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 270/500
2459/2459 [==============================] - 0s 42us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 271/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 272/500
2459/2459 [==============================] - 0s 42us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 273/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 274/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 275/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 276/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 277/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 278/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5514
Epoch 279/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7487 - accuracy: 0.5514
Epoch 280/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5523
Epoch 281/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5523
Epoch 282/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5523
Epoch 283/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7499 - accuracy: 0.5531
Epoch 284/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 285/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 286/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 287/500
2459/2459 [==============================] - 0s 46us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 288/500
2459/2459 [==============================] - 0s 46us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 289/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 290/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 291/500
2459/2459 [==============================] - 0s 46us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 292/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 293/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 294/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 295/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 296/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 297/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 298/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 299/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 300/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 301/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 302/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 303/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 304/500
2459/2459 [==============================] - 0s 42us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 305/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 306/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 307/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 308/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 309/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 310/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 311/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 312/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 313/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 314/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 315/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 316/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 317/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 318/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 319/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5531
Epoch 320/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5535
Epoch 321/500
2459/2459 [==============================] - 0s 42us/step - loss: 0.7446 - accuracy: 0.5535
Epoch 322/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5535
Epoch 323/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5535
Epoch 324/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5535
Epoch 325/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5535
Epoch 326/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5535
Epoch 327/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5535
Epoch 328/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5535
Epoch 329/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5535
Epoch 330/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5535
Epoch 331/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5535
Epoch 332/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5535
Epoch 333/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 334/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 335/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 336/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 337/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 338/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 339/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 340/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 341/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 342/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 343/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 344/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 345/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 346/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 347/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 348/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 349/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 350/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 351/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 352/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 353/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 354/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 355/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 356/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 357/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 358/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 359/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 360/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 361/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 362/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 363/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 364/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 365/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 366/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 367/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 368/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 369/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 370/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 371/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 372/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 373/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 374/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 375/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 376/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 377/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 378/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 379/500
2459/2459 [==============================] - 0s 46us/step - loss: 0.7446 - accuracy: 0.5539
Epoch 380/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7475 - accuracy: 0.5547
Epoch 381/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5555
Epoch 382/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5555
Epoch 383/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5555
Epoch 384/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5555
Epoch 385/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5555
Epoch 386/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5555
Epoch 387/500
2459/2459 [==============================] - 0s 46us/step - loss: 0.7446 - accuracy: 0.5555
Epoch 388/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5555
Epoch 389/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5555
Epoch 390/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5555
Epoch 391/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5555
Epoch 392/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5555
Epoch 393/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5555
Epoch 394/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5555
Epoch 395/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5555
Epoch 396/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5555
Epoch 397/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5555
Epoch 398/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5555
Epoch 399/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5555
Epoch 400/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5555
Epoch 401/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5555
Epoch 402/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5555
Epoch 403/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5555
Epoch 404/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5555
Epoch 405/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5555
Epoch 406/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5555
Epoch 407/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5555
Epoch 408/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7479 - accuracy: 0.5555
Epoch 409/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5563
Epoch 410/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5563
Epoch 411/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5563
Epoch 412/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7487 - accuracy: 0.5571
Epoch 413/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7466 - accuracy: 0.5571
Epoch 414/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5575
Epoch 415/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5575
Epoch 416/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5575
Epoch 417/500
2459/2459 [==============================] - 0s 42us/step - loss: 0.7490 - accuracy: 0.5575
Epoch 418/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5588
Epoch 419/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5588
Epoch 420/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5588
Epoch 421/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5588
Epoch 422/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5588
Epoch 423/500
2459/2459 [==============================] - 0s 42us/step - loss: 0.7446 - accuracy: 0.5588
Epoch 424/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5588
Epoch 425/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5588
Epoch 426/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5588
Epoch 427/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5588
Epoch 428/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5588
Epoch 429/500
2459/2459 [==============================] - 0s 42us/step - loss: 0.7446 - accuracy: 0.5588
Epoch 430/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5588
Epoch 431/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5588
Epoch 432/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5588
Epoch 433/500
2459/2459 [==============================] - 0s 42us/step - loss: 0.7446 - accuracy: 0.5588
Epoch 434/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5588
Epoch 435/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5588
Epoch 436/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5588
Epoch 437/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5588
Epoch 438/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5588
Epoch 439/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5588
Epoch 440/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7495 - accuracy: 0.5588
Epoch 441/500
2459/2459 [==============================] - 0s 42us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 442/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 443/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 444/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 445/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 446/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 447/500
2459/2459 [==============================] - 0s 46us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 448/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 449/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 450/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 451/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 452/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 453/500
2459/2459 [==============================] - 0s 46us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 454/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 455/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 456/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 457/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 458/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 459/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 460/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 461/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 462/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 463/500
2459/2459 [==============================] - 0s 42us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 464/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 465/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 466/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 467/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 468/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 469/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 470/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 471/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 472/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 473/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 474/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 475/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 476/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 477/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 478/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 479/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 480/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 481/500
2459/2459 [==============================] - 0s 42us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 482/500
2459/2459 [==============================] - 0s 42us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 483/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 484/500
2459/2459 [==============================] - 0s 42us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 485/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 486/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 487/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 488/500
2459/2459 [==============================] - 0s 45us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 489/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 490/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 491/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 492/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 493/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 494/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 495/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 496/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 497/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 498/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 499/500
2459/2459 [==============================] - 0s 43us/step - loss: 0.7446 - accuracy: 0.5592
Epoch 500/500
2459/2459 [==============================] - 0s 44us/step - loss: 0.7446 - accuracy: 0.5592
Test Accuracy: 0.57
- 10 Epochs
- Initial Fitness Score: 0.52
- Fitness Score at Generation 160: 0.81
Generation 1
Fitness Score: 0.5282635217568117
[array([[1.042898]], dtype=float32), array([[ 0.460626 , -1.1236215 , -0.16491425]], dtype=float32), array([[-0.7738557 , -0.8626251 , 0.37523603],
[-0.4521742 , -0.8964057 , -0.24659395],
[-0.16870809, 0.9809499 , 0.4639206 ]], dtype=float32), array([[ 0.46616197, -0.69974375, 0.38495588],
[-0.5864825 , -0.954437 , -0.20068097],
[-0.75203633, 0.22171378, -0.3454697 ]], dtype=float32), array([[-0.05194068],
[-0.41252893],
[-0.3281436 ]], dtype=float32)]
Generation 1 Test Accuracy: 0.52
Generation 2
Generation 3
Generation 4
Generation 5
Generation 6
Generation 7
Generation 8
Generation 9
Generation 10
Generation 11
Generation 12
Generation 13
Generation 14
Generation 15
Generation 16
V. NEXT STEPS
In the next steps of this project, one can create pipeline for portfolios of multiple securities to fully implement the concept of the genetic neural network. The signals could then be based on realized portfolio return and reallocate portfolio weights and/or target beta at specified time intervals (daily, weekly etc.). Finally, the algorithm can then execute the buy/hold/sell of individual securities or liquidation of the entire portfolio depending on the performance of its constituents, as the current design stands.
ACKNOWLEDGMENTS
I would like to thank Professor Feinstein (or Zach, given the comfort and safety he imbued in the environment he facilitated for us students) for his continued support in identifying the pain points and potential developments in the project proposal and throughout the semester overall. His lessons will be a valuable component of my skill set in the future and I will always refer to them during my professional career; The Stevens Institute of Technology Department of Financial Engineering for its provision of laptops and technological equipment to undertake this project. Finally, I would like to thank the developers of the Google Collaboratory project for providing a streamlined platform for the testing and execution of the models.
REFERENCES
- [1] Eyal Wirsansky. Hands-On Genetic Algorithms with Python: Applying genetic algorithms to solve real-world deep learning and artificial intelligence problems. Packt Publishing. ISBN: 1838557741, 978-1838557744. 1st Edition, 2020.
- [2] Matthew F. Dixon, Igor Halperin, Paul Bilokon. Machine Learning in Finance: From Theory to Practice. Springer. ISBN: 3030410676,9783030410674. 1st Edition, 2020.
- [3] Zachary Feinstein. Notes on Genetic Algorithms. FE 690: Machine Learning in Finance. Stevens Institute of Technology. 2020.
- [4] Samer Obeidat, Daniel Shapiro, Mathieu Lemay, Mary Kate MacPherson, Miodrag Bolic. Adaptive Portfolio Asset Allocation with Deep Learning. International Journal on Advances in Intelligent Systems, Vol 11, No 1, 2. 2018 http://www.iariajournals.org/intelligentsystems/. Accessed: November 30th, 2020.
AUTHORS
Theo Dimitrasopoulos– MSc. Financial Engineering, Stevens Institute of Technology 2021; Bachelor of Science in Engineering, Structural Engineering, Princeton University 2017; tdimitr1(at)stevens(dot)edu
APPENDIX
SOURCE CODE
# -*- coding: utf-8 -*-
"""
Automatically generated by Colaboratory.
Original file is located at:
https://colab.research.google.com/drive/13By3WikWhCD1BNPSGeuOV_9OUa3Ww5u3
"""
# Import Packages
import random
import numpy as np
import pandas as pd
from keras.layers import Dense
from keras.models import Sequential
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
import pandas_datareader.data as web
import matplotlib.pyplot as plt
# Genetic Neural Network class
class ENN(Sequential):
def __init__(self, wts_sub=None):
super().__init__()
if wts_sub is None:
layer1 = Dense(1, input_shape=(1,), activation='sigmoid')
layer2 = Dense(3, activation='sigmoid')
layer3 = Dense(3, activation='sigmoid')
layer4 = Dense(3, activation='sigmoid')
layer5 = Dense(1, activation='sigmoid')
self.add(layer1)
self.add(layer2)
self.add(layer3)
self.add(layer4)
self.add(layer5)
else:
self.add(Dense(1,input_shape=(1,),activation='sigmoid',weights=[wts_sub[0], np.zeros(1)]))
self.add(Dense(3,activation='sigmoid',weights=[wts_sub[1], np.zeros(3)]))
self.add(Dense(3,activation='sigmoid',weights=[wts_sub[2], np.zeros(3)]))
self.add(Dense(3,activation='sigmoid',weights=[wts_sub[3], np.zeros(3)]))
self.add(Dense(1,activation='sigmoid',weights=[wts_sub[4], np.zeros(1)]))
def f_propagation(self, X_train, y_train):
y_predicted = self.predict(X_train.values)
self.fitness = accuracy_score(y_train, y_predicted.round())
def train(self, epochs):
self.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy'])
self.fit(X_train.values, y_train.values, epochs=epochs)
def mutation(wts_sub):
choose = random.randint(0, len(wts_sub)-1)
mut = random.uniform(0, 1)
if mut >= .5:
wts_sub[choose] *= random.randint(2, 5)
else:
pass
def cross(nn1, nn2):
nn1_weights = []
nn2_weights = []
wts_sub = []
for layer in nn1.layers:
nn1_weights.append(layer.get_weights()[0])
for layer in nn2.layers: nn2_weights.append(layer.get_weights()[0])
for i in range(0, len(nn1_weights)):
split = random.randint(0,
np.shape(nn1_weights[i])[1]-1)
for j in range(split,
np.shape(nn1_weights[i])[1]-1):
nn1_weights[i][:, j] =
nn2_weights[i][:, j]
wts_sub.append(nn1_weights[i])
mutation(wts_sub)
child = ENN(wts_sub)
return child
# Data processing
prices = pd.DataFrame()
tickers = ['^DJI']
for i in tickers:
tmp = web.DataReader(i, 'yahoo', '1/1/2007', '01/12/2020')
prices[i] = tmp['Adj Close']
prices['Percent Change'] = prices.pct_change()
def set_signal(column):
if column['Percent Change'] < -0.0050:
signal = -1
elif column['Percent Change'] > 0.0050:
signal = 1
else:
signal = 0
return signal
prices['Liquidate'] = prices.apply(set_signal, axis=1)
prices = prices.replace(np.nan,0)
prices = prices.drop(['^DJI'], axis=1)
prices.reset_index(inplace=True,drop=True)
# Split into independent/dependent variables (training/testing data)
X = prices['Percent Change']
X = 100*X.round(8)
X = X.astype(np.float32)
print(X.astype(np.float32))
y = prices.drop(['Percent Change'], axis=1)
#y = y.astype(np.float32)
print(y)
X_train, X_test, y_train, y_test = train_test_split(X, y)
# Initiate Genetic Neural Network instance
networks = []
pool = []
gen = 0
n = 20
for i in range(0, n):
networks.append(ENN())
fit_max = 0
wts_opt = []
while fit_max < .9:
gen += 1
print('Generation', gen)
for nn in networks:
nn.f_propagation(X_train, y_train)
pool.append(nn)
networks.clear()
pool = sorted(pool, key=lambda x: x.fitness)
pool.reverse()
for i in range(0, len(pool)):
if pool[i].fitness > fit_max:
fit_max = pool[i].fitness
print('Fitness Score: ', fit_max)
wts_opt = []
for layer in pool[i].layers:
wts_opt.append(layer.get_weights()[0])
print(wts_opt)
for i in range(0, 5):
for j in range(0, 2):
temp = cross(pool[i], random.choice(pool))
networks.append(temp)
portfolio_enn = ENN(wts_opt)
portfolio_enn.train(10)
y_predicted = portfolio_enn.predict(X_test.values)
print('Accuracy: %.2f' % accuracy_score(y_test, y_predicted.round()))
# Feedforward neural network as a benchmark
portfolio_nn = Sequential()
portfolio_nn.add(Dense(1, input_shape=(1,), activation='sigmoid'))
portfolio_nn.add(Dense(3, activation='sigmoid'))
portfolio_nn.add(Dense(3, activation='sigmoid'))
portfolio_nn.add(Dense(3, activation='sigmoid'))
portfolio_nn.add(Dense(1, activation='sigmoid'))
portfolio_nn.compile(optimizer='rmsprop',loss='hinge',metrics=['accuracy'])
portfolio_nn.fit(X_train.values, y_train.values, epochs=500)
y_predicted = portfolio_nn.predict(X_test.values)
y_predicted = np.around(y_predicted, 0)
print('Test Accuracy: %.2f' % accuracy_score(y_test, y_predicted.round()))
DOCUMENTS
The Github repository can be found here.
All requests for copies of the research, please forward to my university email address listed on my homepage.