From dc9e97d2b1287224a7a8ded7477dd807e7191b18 Mon Sep 17 00:00:00 2001 From: fshcat Date: Tue, 9 Nov 2021 20:42:46 -0500 Subject: [PATCH 1/4] Added option to separate board into two planes, new hall of fame sampling option, bugs with action-taking fixed, added diagnostic games to the loop --- agent.py | 64 +++++++-- hof.py | 32 ++++- mnk.py | 20 ++- model.py | 10 +- models/modelXO/keras_metadata.pb | 18 +-- models/modelXO/saved_model.pb | Bin 132318 -> 125306 bytes .../variables/variables.data-00000-of-00001 | Bin 21778 -> 14212 bytes models/modelXO/variables/variables.index | Bin 2126 -> 1687 bytes play.py | 6 +- plot.py | 3 +- train.py | 128 +++++++++--------- 11 files changed, 168 insertions(+), 113 deletions(-) diff --git a/agent.py b/agent.py index 336a22f..a8099af 100644 --- a/agent.py +++ b/agent.py @@ -1,35 +1,75 @@ import mnk import keras.models +import tensorflow as tf import random class Agent: - def __init__(self, board, model, player): + def __init__(self, board, model, player, training): self.board = board self.model = model self.player = player + self.training = training - def action(self, epsilon=0.01): + def greedy_action(self): legal_moves = self.board.legal_moves() assert len(legal_moves) > 0, "No legal moves can be played." - # Exploration - if (random.random() < epsilon): - print("Played epsilon move ({:.5f})".format(epsilon)) - self.board.move(*legal_moves[random.randint(0, len(legal_moves) - 1)]) - return - best_move = legal_moves[-1] max_evaluation = -1 + for move in legal_moves: self.board.move(*move) - evaluation = self.player * self.model(self.board.get_board()) - if evaluation > max_evaluation: + + val = self.value() + if val > max_evaluation: best_move = move - max_evaluation = evaluation + max_evaluation = val self.board.undo_move(*move) - self.board.move(*best_move) + + return best_move + + def random_action(self): + legal_moves = self.board.legal_moves() + return legal_moves[random.randint(0, len(legal_moves) - 1)] + + def value(self): + if self.board.who_won() == self.player: + return tf.constant(1, dtype="float32", shape=(1, 1)) + elif self.board.who_won() == -1*self.player: + return tf.constant(-1, dtype="float32", shape=(1, 1)) + elif self.board.who_won() == 0: + return tf.constant(0, dtype="float32", shape=(1, 1)) + else: + return self.player*self.model(self.board.get_board()) + + def action(self, epsilon=0): + legal_moves = self.board.legal_moves() + assert len(legal_moves) > 0, "No legal moves can be played." + + greedy = self.greedy_action() + if self.training and len(self.board.history()) >= (2 + (self.player == -1)): + self.update_model(greedy) + + # Exploration + if random.random() < epsilon: + print("Played epsilon move ({:.5f})".format(epsilon)) + move = self.random_action() + else: + move = greedy + + self.board.move(*move) + + def update_model(self, greedy_move=()): + if greedy_move == (): + assert self.board.who_won() != 2 and self.board.who_won() != self.player + self.model.fit(self.board.history()[-2], self.value(), batch_size=1, verbose=0) + else: + self.board.move(*greedy_move) + self.model.fit(self.board.history()[-3], self.value(), batch_size=1, verbose=0) + self.board.undo_move(*greedy_move) + diff --git a/hof.py b/hof.py index 2bd14e7..82087fd 100644 --- a/hof.py +++ b/hof.py @@ -1,23 +1,47 @@ import random import tensorflow as tf -from math import floor +from matplotlib import pyplot import os +from math import floor class HOF: def __init__(self, folder): self.hof = [] self.folder = folder + self.sample_history = [] + self.pop_size = 0 + self.basel = 0 # used in limit-uniform sampling if not os.path.isdir(folder): os.makedirs(folder) def store(self, model, name): model.save("{}/{}".format(self.folder, name)) self.hof.append(name) + self.pop_size += 1 + self.basel += 1/self.pop_size**2 + + def sample_hof(self, method='uniform'): + if method == 'limit-uniform': + threshold = random.random()*self.basel + + cum_prob = 0 + ind = self.pop_size-1 + for i in range(self.pop_size): + cum_prob += 1/(self.pop_size-i)**2 + if cum_prob > threshold: + ind = i + break + elif method == 'uniform': + ind = floor(random.random()*self.pop_size) + + self.sample_history.append(ind) - def sample_hof(self): - pop_size = len(self.hof) - ind = floor(pop_size*random.random()) name = self.hof[ind] return tf.keras.models.load_model("{}/{}".format(self.folder, name)) + def sample_hist(self, num=100): + pyplot.hist(self.sample_history, num) + pyplot.title("Sampling of Model Indices from HOF") + pyplot.show() + diff --git a/mnk.py b/mnk.py index a9a4e25..a3070be 100644 --- a/mnk.py +++ b/mnk.py @@ -5,11 +5,11 @@ class Board: - def __init__(self, m, n, k, flatten=True, hist_length=-1): + def __init__(self, m, n, k, form="flatten", hist_length=-1): self.m = m self.n = n self.k = k - self.flatten = flatten + self.form = form self.hist_length = hist_length self.board = np.zeros((m, n), dtype=int) self.empty = 0 @@ -39,7 +39,6 @@ def del_history(self): self.board_history[0] = self.undo_buffer self.undo_buffer = np.zeros((self.m, self.n), dtype=int) - def flip_players(self): self.player, self.opponent = self.opponent, self.player @@ -78,10 +77,19 @@ def legal_moves(self): # reshapes board into 1-dimensional array for feeding as input to model if flatten is True def get_board(self): - if self.flatten: - return np.copy(self.board.reshape(1, self.m * self.n)) - else: + if self.form == "flatten": + return np.copy(self.board.reshape(1, 1, self.m * self.n)) + elif self.form == "planar": return np.copy(self.board.reshape(1, 3, 3, 1)) + elif self.form == "multiplanar": + board_planes = np.zeros((self.m, self.n, 2), dtype=int) + for i in range(self.m): + for j in range(self.n): + if self.board[i][j] == 1: + board_planes[i][j][0] = 1 + elif self.board[i][j] == -1: + board_planes[i][j][1] = 1 + return np.copy(board_planes.reshape(1, 3, 3, 2)) # converting numbers to their respective game values @staticmethod diff --git a/model.py b/model.py index db6549a..c7e9d02 100644 --- a/model.py +++ b/model.py @@ -5,16 +5,12 @@ from tensorflow.keras.optimizers import Adadelta learning_rate = 1.0 -rho = 0.995 +rho = 0.7 epsilon = 1e-07 -sgd = Adadelta(lr=learning_rate, rho=rho, epsilon=epsilon) +sgd = Adadelta(learning_rate=learning_rate, rho=rho, epsilon=epsilon) modelXO = Sequential() -modelXO.add(Conv2D(12, 3, padding="same", input_shape=(3, 3, 1), activation='tanh', kernel_initializer="he_normal")) -modelXO.add(Dropout(0.1)) -modelXO.add(Conv2D(9, 2, padding="valid", input_shape=(3, 3, 1), activation='tanh', kernel_initializer="he_normal")) -modelXO.add(Dropout(0.1)) -modelXO.add(Flatten()) +modelXO.add(Dense(27, input_shape=(1,9), kernel_initializer='normal', activation='tanh')) modelXO.add(Dense(18, kernel_initializer='normal', activation='tanh')) modelXO.add(Dense(1, kernel_initializer='normal', activation='tanh')) diff --git a/models/modelXO/keras_metadata.pb b/models/modelXO/keras_metadata.pb index 86517e2..ccf4df2 100644 --- a/models/modelXO/keras_metadata.pb +++ b/models/modelXO/keras_metadata.pb @@ -1,14 +1,6 @@ -�<root"_tf_keras_sequential*�<{"name": "sequential", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "must_restore_from_config": false, "class_name": "Sequential", "config": {"name": "sequential", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": {"class_name": "__tuple__", "items": [null, 3, 3, 1]}, "dtype": "float32", "sparse": false, "ragged": false, "name": "conv2d_input"}}, {"class_name": "Conv2D", "config": {"name": "conv2d", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 3, 3, 1]}, "dtype": "float32", "filters": 12, "kernel_size": {"class_name": "__tuple__", "items": [3, 3]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "same", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "HeNormal", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dropout", "config": {"name": "dropout", "trainable": true, "dtype": "float32", "rate": 0.1, "noise_shape": null, "seed": null}}, {"class_name": "Conv2D", "config": {"name": "conv2d_1", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 3, 3, 1]}, "dtype": "float32", "filters": 9, "kernel_size": {"class_name": "__tuple__", "items": [2, 2]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "HeNormal", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dropout", "config": {"name": "dropout_1", "trainable": true, "dtype": "float32", "rate": 0.1, "noise_shape": null, "seed": null}}, {"class_name": "Flatten", "config": {"name": "flatten", "trainable": true, "dtype": "float32", "data_format": "channels_last"}}, {"class_name": "Dense", "config": {"name": "dense", "trainable": true, "dtype": "float32", "units": 18, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 1, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}]}, "shared_object_id": 16, "input_spec": [{"class_name": "InputSpec", "config": {"dtype": null, "shape": {"class_name": "__tuple__", "items": [null, 3, 3, 1]}, "ndim": 4, "max_ndim": null, "min_ndim": null, "axes": {}}}], "build_input_shape": {"class_name": "TensorShape", "items": [null, 3, 3, 1]}, "is_graph_network": true, "full_save_spec": {"class_name": "__tuple__", "items": [[{"class_name": "TypeSpec", "type_spec": "tf.TensorSpec", "serialized": [{"class_name": "TensorShape", "items": [null, 3, 3, 1]}, "float32", "conv2d_input"]}], {}]}, "save_spec": {"class_name": "TypeSpec", "type_spec": "tf.TensorSpec", "serialized": [{"class_name": "TensorShape", "items": [null, 3, 3, 1]}, "float32", "conv2d_input"]}, "keras_version": "2.7.0", "backend": "tensorflow", "model_config": {"class_name": "Sequential", "config": {"name": "sequential", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": {"class_name": "__tuple__", "items": [null, 3, 3, 1]}, "dtype": "float32", "sparse": false, "ragged": false, "name": "conv2d_input"}, "shared_object_id": 0}, {"class_name": "Conv2D", "config": {"name": "conv2d", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 3, 3, 1]}, "dtype": "float32", "filters": 12, "kernel_size": {"class_name": "__tuple__", "items": [3, 3]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "same", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "HeNormal", "config": {"seed": null}, "shared_object_id": 1}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 2}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 3}, {"class_name": "Dropout", "config": {"name": "dropout", "trainable": true, "dtype": "float32", "rate": 0.1, "noise_shape": null, "seed": null}, "shared_object_id": 4}, {"class_name": "Conv2D", "config": {"name": "conv2d_1", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 3, 3, 1]}, "dtype": "float32", "filters": 9, "kernel_size": {"class_name": "__tuple__", "items": [2, 2]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "HeNormal", "config": {"seed": null}, "shared_object_id": 5}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 6}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 7}, {"class_name": "Dropout", "config": {"name": "dropout_1", "trainable": true, "dtype": "float32", "rate": 0.1, "noise_shape": null, "seed": null}, "shared_object_id": 8}, {"class_name": "Flatten", "config": {"name": "flatten", "trainable": true, "dtype": "float32", "data_format": "channels_last"}, "shared_object_id": 9}, {"class_name": "Dense", "config": {"name": "dense", "trainable": true, "dtype": "float32", "units": 18, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 10}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 11}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 12}, {"class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 1, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 13}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 14}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 15}]}}, "training_config": {"loss": "mean_squared_error", "metrics": null, "weighted_metrics": null, "loss_weights": null, "optimizer_config": {"class_name": "Adadelta", "config": {"name": "Adadelta", "learning_rate": 1.0, "decay": 0.0, "rho": 0.9950000047683716, "epsilon": 1e-07}}}}2 -� -root.layer_with_weights-0"_tf_keras_layer*� -{"name": "conv2d", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": {"class_name": "__tuple__", "items": [null, 3, 3, 1]}, "stateful": false, "must_restore_from_config": false, "class_name": "Conv2D", "config": {"name": "conv2d", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 3, 3, 1]}, "dtype": "float32", "filters": 12, "kernel_size": {"class_name": "__tuple__", "items": [3, 3]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "same", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "HeNormal", "config": {"seed": null}, "shared_object_id": 1}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 2}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 3, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 4, "axes": {"-1": 1}}, "shared_object_id": 18}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 3, 3, 1]}}2 -� root.layer-1"_tf_keras_layer*�{"name": "dropout", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dropout", "config": {"name": "dropout", "trainable": true, "dtype": "float32", "rate": 0.1, "noise_shape": null, "seed": null}, "shared_object_id": 4}2 -� -root.layer_with_weights-1"_tf_keras_layer*� -{"name": "conv2d_1", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": {"class_name": "__tuple__", "items": [null, 3, 3, 1]}, "stateful": false, "must_restore_from_config": false, "class_name": "Conv2D", "config": {"name": "conv2d_1", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 3, 3, 1]}, "dtype": "float32", "filters": 9, "kernel_size": {"class_name": "__tuple__", "items": [2, 2]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "HeNormal", "config": {"seed": null}, "shared_object_id": 5}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 6}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 7, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 4, "axes": {"-1": 12}}, "shared_object_id": 19}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 3, 3, 12]}}2 -� root.layer-3"_tf_keras_layer*�{"name": "dropout_1", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dropout", "config": {"name": "dropout_1", "trainable": true, "dtype": "float32", "rate": 0.1, "noise_shape": null, "seed": null}, "shared_object_id": 8}2 -� root.layer-4"_tf_keras_layer*�{"name": "flatten", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Flatten", "config": {"name": "flatten", "trainable": true, "dtype": "float32", "data_format": "channels_last"}, "shared_object_id": 9, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 1, "axes": {}}, "shared_object_id": 20}}2 -�root.layer_with_weights-2"_tf_keras_layer*�{"name": "dense", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "dense", "trainable": true, "dtype": "float32", "units": 18, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 10}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 11}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 12, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 36}}, "shared_object_id": 21}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 36]}}2 -�root.layer_with_weights-3"_tf_keras_layer*�{"name": "dense_1", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 1, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 13}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 14}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 15, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 18}}, "shared_object_id": 22}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 18]}}2 -�^root.keras_api.metrics.0"_tf_keras_metric*�{"class_name": "Mean", "name": "loss", "dtype": "float32", "config": {"name": "loss", "dtype": "float32"}, "shared_object_id": 23}2 \ No newline at end of file +�%root"_tf_keras_sequential*�%{"name": "sequential", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "must_restore_from_config": false, "class_name": "Sequential", "config": {"name": "sequential", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": {"class_name": "__tuple__", "items": [null, 1, 9]}, "dtype": "float32", "sparse": false, "ragged": false, "name": "dense_input"}}, {"class_name": "Dense", "config": {"name": "dense", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 1, 9]}, "dtype": "float32", "units": 27, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 18, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dense", "config": {"name": "dense_2", "trainable": true, "dtype": "float32", "units": 1, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}]}, "shared_object_id": 10, "input_spec": [{"class_name": "InputSpec", "config": {"dtype": null, "shape": {"class_name": "__tuple__", "items": [null, 1, 9]}, "ndim": 3, "max_ndim": null, "min_ndim": null, "axes": {}}}], "build_input_shape": {"class_name": "TensorShape", "items": [null, 1, 9]}, "is_graph_network": true, "full_save_spec": {"class_name": "__tuple__", "items": [[{"class_name": "TypeSpec", "type_spec": "tf.TensorSpec", "serialized": [{"class_name": "TensorShape", "items": [null, 1, 9]}, "float32", "dense_input"]}], {}]}, "save_spec": {"class_name": "TypeSpec", "type_spec": "tf.TensorSpec", "serialized": [{"class_name": "TensorShape", "items": [null, 1, 9]}, "float32", "dense_input"]}, "keras_version": "2.7.0", "backend": "tensorflow", "model_config": {"class_name": "Sequential", "config": {"name": "sequential", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": {"class_name": "__tuple__", "items": [null, 1, 9]}, "dtype": "float32", "sparse": false, "ragged": false, "name": "dense_input"}, "shared_object_id": 0}, {"class_name": "Dense", "config": {"name": "dense", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 1, 9]}, "dtype": "float32", "units": 27, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 1}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 2}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 3}, {"class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 18, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 4}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 5}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 6}, {"class_name": "Dense", "config": {"name": "dense_2", "trainable": true, "dtype": "float32", "units": 1, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 7}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 8}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 9}]}}, "training_config": {"loss": "mean_squared_error", "metrics": null, "weighted_metrics": null, "loss_weights": null, "optimizer_config": {"class_name": "Adadelta", "config": {"name": "Adadelta", "learning_rate": 1.0, "decay": 0.0, "rho": 0.699999988079071, "epsilon": 1e-07}}}}2 +�root.layer_with_weights-0"_tf_keras_layer*�{"name": "dense", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": {"class_name": "__tuple__", "items": [null, 1, 9]}, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "dense", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 1, 9]}, "dtype": "float32", "units": 27, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 1}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 2}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 3, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 9}}, "shared_object_id": 12}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 1, 9]}}2 +�root.layer_with_weights-1"_tf_keras_layer*�{"name": "dense_1", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 18, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 4}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 5}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 6, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 27}}, "shared_object_id": 13}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 1, 27]}}2 +�root.layer_with_weights-2"_tf_keras_layer*�{"name": "dense_2", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "dense_2", "trainable": true, "dtype": "float32", "units": 1, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 7}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 8}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 9, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 18}}, "shared_object_id": 14}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 1, 18]}}2 +�4root.keras_api.metrics.0"_tf_keras_metric*�{"class_name": "Mean", "name": "loss", "dtype": "float32", "config": {"name": "loss", "dtype": "float32"}, "shared_object_id": 15}2 \ No newline at end of file diff --git a/models/modelXO/saved_model.pb b/models/modelXO/saved_model.pb index 50d24f8cc68daa9b8bfce6d5910754824ab4962a..087f577b15768be46fb96ef20a10460707650c28 100644 GIT binary patch literal 125306 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 literal 21778 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 diff --git a/play.py b/play.py index be67df1..fdfa638 100644 --- a/play.py +++ b/play.py @@ -2,13 +2,13 @@ import mnk import tensorflow as tf -board = mnk.Board(3, 3, 3, flatten=False) -model = tf.keras.models.load_model('models/modelXO') +board = mnk.Board(3, 3, 3, form="multiplanar") +model = tf.keras.models.load_model('menagerie/6000') print("\n\n" + str(board)) current_player = input("\nWho plays first (Me/AI)? ") ai_side = [-1, 1][current_player == "AI"] -agent = Agent(board, model, ai_side) +agent = Agent(board, model, ai_side, training=False) while board.who_won() == 2: if current_player == 'Me': diff --git a/plot.py b/plot.py index 8a81f78..537d4b1 100644 --- a/plot.py +++ b/plot.py @@ -25,4 +25,5 @@ def plot_wins(win_states, num, labels=['X', 'O']): pyplot.plot(game, ties, label="Ties") pyplot.legend() pyplot.title("Number of Each End State for Previous {} Games".format(num)) - pyplot.show() + + diff --git a/train.py b/train.py index 72f268e..e531e3e 100644 --- a/train.py +++ b/train.py @@ -1,77 +1,71 @@ # TODO: PLOT LOSS CURVES import tensorflow as tf import numpy as np -import mnk +from mnk import Board import random +from matplotlib import pyplot from agent import Agent from model import modelXO from plot import plot_wins from hof import HOF -m, n, k = 3, 3, 3 -hof = HOF("menagerie") -hof.store(modelXO, "init") -modelHOF = hof.sample_hof() - -hof_freq = 10 # how often to save the model to the HOF -hof_duration = 2 # how long to keep using the same HOF model before loading a new one - -games = 1000 -epsilon = 0.1 # exploration constant -decay_freq = 10 # how often to decrease epsilon -decay_factor = 0.00099 # how much to decrease by - -end_states = [] -victories = [] -stored_games = [] - -for game in range(games): - board = mnk.Board(m, n, k, flatten=False, hist_length=-1) - - # decrease exploration over time - if game % decay_freq == 0 and game != 0: - epsilon -= decay_factor - - # initialize the agents - if game % hof_duration == 0 and game != 0: - modelHOF = hof.sample_hof() - sideT = [-1, 1][random.random() > 0.5] - sideHOF = [None, -1, 1][sideT] - agentT = Agent(board, modelXO, sideT) - agentHOF = Agent(board, modelHOF, sideHOF) - - move = 1 - while not board.player_has_lost() and len(board.legal_moves()) != 0: - # have the appropriate agent select a move - if board.player == sideHOF: - agentHOF.action(epsilon) - else: - agentT.action(epsilon) - - # back up the current board evaluation to the last action chosen by the current agent - if move > 2: - evaluation = modelXO(board.get_board()) - modelXO.fit(board.history()[-3], evaluation, batch_size=1, verbose=0) - move += 1 - - if game % 50 == 0: - print(board) - - # back up the terminal state value to the last actions chosen by either agent - terminal_eval = tf.constant(board.who_won(), dtype="float32", shape=(1, 1)) - modelXO.fit(board.history()[-3], terminal_eval, batch_size=1, verbose=0) - modelXO.fit(board.history()[-2], terminal_eval, batch_size=1, verbose=0) - - # occasionally save new model to hall of fame - if game % hof_freq == 0 and game != 0: - hof.store(modelXO, game) - - end_states.append(board.who_won()) - victories.append(board.who_won()*sideT) - if game % 10 == 0: - print("Game {} goes to {} ({})".format(str(game), ["tie", "best", "hof"][board.who_won()*sideT], ['Tie', 'X', 'O'][board.who_won()])) - -plot_wins(end_states, 50) -plot_wins(victories, 50, ["Best", "HOF"]) -modelXO.save('models/modelXO') +def train(mnk, hof, hof_params, games, diagnostic_freq, epsilon): + hof.store(modelXO, "init") + hof_freq, hof_duration = hof_params + end_states = [] + victories = [] + + for game in range(games): + print(game) + diagnostic = game % diagnostic_freq == 0 + + board = Board(*mnk, form="flatten", hist_length=-1) + + # initialize the agents + if game % hof_duration == 0: + modelHOF = hof.sample_hof("limit-uniform") + sideT = [-1, 1][game % 2] + sideHOF = [None, -1, 1][sideT] + agentT = Agent(board, modelXO, sideT, training=not diagnostic) + agentHOF = Agent(board, modelHOF, sideHOF, training=False) + + while board.who_won() == 2: + if board.player == sideHOF: + agentHOF.action() + else: + agentT.action(epsilon*(not diagnostic)) + + # update value for the last action before the terminal state + # (only necessary if agent lost, otherwise .action() handles it) + if board.who_won() != sideT: + agentT.update_model() + + # occasionally save new model to hall of fame + if game % hof_freq == 0 and game != 0: + hof.store(modelXO, game) + + if diagnostic: + end_states.append(board.who_won()) + victories.append(board.who_won()*sideT) + + return modelXO, end_states, victories + + +if __name__ == "__main__": + mnk = (3, 3, 3) + hof = HOF("menagerie") + + model, end_states, victories = train(mnk, hof, (10, 1), 10000, diagnostic_freq=11, epsilon=0.1) + model.save('models/modelXO') + + pyplot.subplot(3, 1, 1) + plot_wins(end_states, 50) + + pyplot.subplot(3, 1, 2) + plot_wins(victories, 50, ["Best", "HOF"]) + + pyplot.subplot(3, 1, 3) + hof.sample_hist(20) + + pyplot.show() From 957ed9579d19b9a66760047899c40d3641d8ff1a Mon Sep 17 00:00:00 2001 From: fshcat Date: Wed, 10 Nov 2021 19:12:00 -0500 Subject: [PATCH 2/4] Refactoring, add to the hall of fame in a smarter way --- agent.py | 54 ++++++++++++++++++-------------------- train.py | 80 +++++++++++++++++++++++++++++++------------------------- 2 files changed, 70 insertions(+), 64 deletions(-) diff --git a/agent.py b/agent.py index a8099af..9426cdf 100644 --- a/agent.py +++ b/agent.py @@ -6,70 +6,68 @@ class Agent: - def __init__(self, board, model, player, training): - self.board = board + def __init__(self, model, player): self.model = model self.player = player - self.training = training - def greedy_action(self): - legal_moves = self.board.legal_moves() + def greedy_action(self, board): + legal_moves = board.legal_moves() assert len(legal_moves) > 0, "No legal moves can be played." best_move = legal_moves[-1] max_evaluation = -1 for move in legal_moves: - self.board.move(*move) + board.move(*move) - val = self.value() + val = self.value(board) if val > max_evaluation: best_move = move max_evaluation = val - self.board.undo_move(*move) + board.undo_move(*move) return best_move - def random_action(self): - legal_moves = self.board.legal_moves() + def random_action(self, board): + legal_moves = board.legal_moves() return legal_moves[random.randint(0, len(legal_moves) - 1)] - def value(self): - if self.board.who_won() == self.player: + def value(self, board): + if board.who_won() == self.player: return tf.constant(1, dtype="float32", shape=(1, 1)) - elif self.board.who_won() == -1*self.player: + elif board.who_won() == -1*self.player: return tf.constant(-1, dtype="float32", shape=(1, 1)) - elif self.board.who_won() == 0: + elif board.who_won() == 0: return tf.constant(0, dtype="float32", shape=(1, 1)) else: - return self.player*self.model(self.board.get_board()) + return self.player*self.model(board.get_board()) - def action(self, epsilon=0): - legal_moves = self.board.legal_moves() + def action(self, board, training, epsilon=0): + legal_moves = board.legal_moves() assert len(legal_moves) > 0, "No legal moves can be played." - greedy = self.greedy_action() - if self.training and len(self.board.history()) >= (2 + (self.player == -1)): - self.update_model(greedy) + greedy = self.greedy_action(board) + if training and len(board.history()) >= (2 + (self.player == -1)): + self.update_model(board, greedy) # Exploration if random.random() < epsilon: print("Played epsilon move ({:.5f})".format(epsilon)) - move = self.random_action() + move = self.random_action(board) else: move = greedy - self.board.move(*move) + board.move(*move) - def update_model(self, greedy_move=()): + def update_model(self, board, greedy_move=()): if greedy_move == (): - assert self.board.who_won() != 2 and self.board.who_won() != self.player - self.model.fit(self.board.history()[-2], self.value(), batch_size=1, verbose=0) + assert board.who_won() != 2 and board.who_won() != self.player + self.model.fit(board.history()[-2], self.value(board), batch_size=1, verbose=0) else: - self.board.move(*greedy_move) - self.model.fit(self.board.history()[-3], self.value(), batch_size=1, verbose=0) - self.board.undo_move(*greedy_move) + board.move(*greedy_move) + self.model.fit(board.history()[-3], self.value(board), batch_size=1, verbose=0) + board.undo_move(*greedy_move) diff --git a/train.py b/train.py index e531e3e..bd5b6f7 100644 --- a/train.py +++ b/train.py @@ -1,6 +1,4 @@ # TODO: PLOT LOSS CURVES -import tensorflow as tf -import numpy as np from mnk import Board import random from matplotlib import pyplot @@ -9,54 +7,64 @@ from plot import plot_wins from hof import HOF +mnk = (3, 3, 3) -def train(mnk, hof, hof_params, games, diagnostic_freq, epsilon): - hof.store(modelXO, "init") - hof_freq, hof_duration = hof_params + +def run_game(agent_train, agent_verse, epsilon, training): + board = Board(*mnk, form="flatten", hist_length=-1) + + while board.who_won() == 2: + if board.player == agent_verse.player: + agent_verse.action(board, False, 0) + else: + agent_train.action(board, training, epsilon) + + winner = board.who_won() + + if winner != agent_train.player and training: + agent_train.update_model(board) + + return winner + + +def train(hof, loops, loop_length, epsilon): end_states = [] victories = [] - for game in range(games): - print(game) - diagnostic = game % diagnostic_freq == 0 + # initialize values + hof.store(modelXO, "init") + model_hof = hof.sample_hof() + side_best = [-1, 1][random.random() > 0.5] + side_hof = side_best * -1 - board = Board(*mnk, form="flatten", hist_length=-1) + for loop in range(loops): + print(loop) # initialize the agents - if game % hof_duration == 0: - modelHOF = hof.sample_hof("limit-uniform") - sideT = [-1, 1][game % 2] - sideHOF = [None, -1, 1][sideT] - agentT = Agent(board, modelXO, sideT, training=not diagnostic) - agentHOF = Agent(board, modelHOF, sideHOF, training=False) - - while board.who_won() == 2: - if board.player == sideHOF: - agentHOF.action() - else: - agentT.action(epsilon*(not diagnostic)) - - # update value for the last action before the terminal state - # (only necessary if agent lost, otherwise .action() handles it) - if board.who_won() != sideT: - agentT.update_model() - - # occasionally save new model to hall of fame - if game % hof_freq == 0 and game != 0: - hof.store(modelXO, game) - - if diagnostic: - end_states.append(board.who_won()) - victories.append(board.who_won()*sideT) + agent_best = Agent(modelXO, side_best) + agent_hof = Agent(model_hof, side_hof) + + for game in range(loop_length): + run_game(agent_best, agent_hof, epsilon, training=True) + + diagnostic_winner = run_game(agent_best, agent_hof, 0, training=False) + + if diagnostic_winner != side_hof: + side_best = [-1, 1][random.random() > 0.5] + side_hof = side_best * -1 + hof.store(modelXO, loop) + model_hof = hof.sample_hof() + + end_states.append(diagnostic_winner) + victories.append(diagnostic_winner) return modelXO, end_states, victories if __name__ == "__main__": - mnk = (3, 3, 3) hof = HOF("menagerie") - model, end_states, victories = train(mnk, hof, (10, 1), 10000, diagnostic_freq=11, epsilon=0.1) + model, end_states, victories = train(hof, 1000, 10, epsilon=0.1) model.save('models/modelXO') pyplot.subplot(3, 1, 1) From 0004b0b984cfaf28661ffdb2fc6e5abc6cdf22c1 Mon Sep 17 00:00:00 2001 From: fshcat Date: Sat, 13 Nov 2021 22:11:40 -0500 Subject: [PATCH 3/4] Bug fixes --- agent.py | 20 +++--- mnk.py | 4 +- model.py | 18 +++--- models/modelXO/keras_metadata.pb | 17 +++-- models/modelXO/saved_model.pb | Bin 125306 -> 100415 bytes .../variables/variables.data-00000-of-00001 | Bin 14212 -> 32664 bytes models/modelXO/variables/variables.index | Bin 1687 -> 978 bytes play.py | 8 +-- train.py | 58 +++++++++++++----- 9 files changed, 83 insertions(+), 42 deletions(-) diff --git a/agent.py b/agent.py index 9426cdf..33643e3 100644 --- a/agent.py +++ b/agent.py @@ -34,15 +34,18 @@ def random_action(self, board): return legal_moves[random.randint(0, len(legal_moves) - 1)] def value(self, board): - if board.who_won() == self.player: - return tf.constant(1, dtype="float32", shape=(1, 1)) - elif board.who_won() == -1*self.player: - return tf.constant(-1, dtype="float32", shape=(1, 1)) - elif board.who_won() == 0: - return tf.constant(0, dtype="float32", shape=(1, 1)) + if board.who_won() != 2: + return tf.constant(self.player*board.who_won(), dtype="float32", shape=(1, 1)) else: return self.player*self.model(board.get_board()) + def evaluation(self, board): + if board.who_won() != 2: + return tf.constant(board.who_won(), dtype="float32", shape=(1, 1)) + else: + return self.model(board.get_board()) + + def action(self, board, training, epsilon=0): legal_moves = board.legal_moves() assert len(legal_moves) > 0, "No legal moves can be played." @@ -53,7 +56,6 @@ def action(self, board, training, epsilon=0): # Exploration if random.random() < epsilon: - print("Played epsilon move ({:.5f})".format(epsilon)) move = self.random_action(board) else: move = greedy @@ -63,10 +65,10 @@ def action(self, board, training, epsilon=0): def update_model(self, board, greedy_move=()): if greedy_move == (): assert board.who_won() != 2 and board.who_won() != self.player - self.model.fit(board.history()[-2], self.value(board), batch_size=1, verbose=0) + self.model.fit(board.history()[-2], self.evaluation(board), batch_size=1, verbose=0) else: board.move(*greedy_move) - self.model.fit(board.history()[-3], self.value(board), batch_size=1, verbose=0) + self.model.fit(board.history()[-3], self.evaluation(board), batch_size=1, verbose=0) board.undo_move(*greedy_move) diff --git a/mnk.py b/mnk.py index a3070be..098861b 100644 --- a/mnk.py +++ b/mnk.py @@ -80,7 +80,7 @@ def get_board(self): if self.form == "flatten": return np.copy(self.board.reshape(1, 1, self.m * self.n)) elif self.form == "planar": - return np.copy(self.board.reshape(1, 3, 3, 1)) + return np.copy(self.board.reshape(1, self.m, self.n, 1)) elif self.form == "multiplanar": board_planes = np.zeros((self.m, self.n, 2), dtype=int) for i in range(self.m): @@ -89,7 +89,7 @@ def get_board(self): board_planes[i][j][0] = 1 elif self.board[i][j] == -1: board_planes[i][j][1] = 1 - return np.copy(board_planes.reshape(1, 3, 3, 2)) + return np.copy(board_planes.reshape(1, self.m, self.n, 2)) # converting numbers to their respective game values @staticmethod diff --git a/model.py b/model.py index c7e9d02..925deb1 100644 --- a/model.py +++ b/model.py @@ -1,17 +1,19 @@ import mnk import pandas as pd from keras.models import Sequential -from keras.layers import Dense, Conv2D, Flatten, Dropout -from tensorflow.keras.optimizers import Adadelta +from keras.layers import Dense, Conv2D, Flatten, Dropout, MaxPooling2D +from tensorflow.keras.optimizers import SGD -learning_rate = 1.0 -rho = 0.7 -epsilon = 1e-07 -sgd = Adadelta(learning_rate=learning_rate, rho=rho, epsilon=epsilon) +learning_rate = 0.01 +momentum = 0.0 +sgd = SGD(learning_rate=learning_rate, momentum=momentum) modelXO = Sequential() -modelXO.add(Dense(27, input_shape=(1,9), kernel_initializer='normal', activation='tanh')) -modelXO.add(Dense(18, kernel_initializer='normal', activation='tanh')) +modelXO.add(Conv2D(12, 5, padding="valid", input_shape=(15,15,2))) +modelXO.add(Conv2D(12, 5, padding="valid", input_shape=(15,15,2))) +modelXO.add(MaxPooling2D((2,2))) +modelXO.add(Flatten()) +modelXO.add(Dense(27, kernel_initializer='normal', activation='tanh')) modelXO.add(Dense(1, kernel_initializer='normal', activation='tanh')) modelXO.compile(loss='mean_squared_error', optimizer=sgd) diff --git a/models/modelXO/keras_metadata.pb b/models/modelXO/keras_metadata.pb index ccf4df2..2e07266 100644 --- a/models/modelXO/keras_metadata.pb +++ b/models/modelXO/keras_metadata.pb @@ -1,6 +1,13 @@ -�%root"_tf_keras_sequential*�%{"name": "sequential", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "must_restore_from_config": false, "class_name": "Sequential", "config": {"name": "sequential", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": {"class_name": "__tuple__", "items": [null, 1, 9]}, "dtype": "float32", "sparse": false, "ragged": false, "name": "dense_input"}}, {"class_name": "Dense", "config": {"name": "dense", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 1, 9]}, "dtype": "float32", "units": 27, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 18, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dense", "config": {"name": "dense_2", "trainable": true, "dtype": "float32", "units": 1, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}]}, "shared_object_id": 10, "input_spec": [{"class_name": "InputSpec", "config": {"dtype": null, "shape": {"class_name": "__tuple__", "items": [null, 1, 9]}, "ndim": 3, "max_ndim": null, "min_ndim": null, "axes": {}}}], "build_input_shape": {"class_name": "TensorShape", "items": [null, 1, 9]}, "is_graph_network": true, "full_save_spec": {"class_name": "__tuple__", "items": [[{"class_name": "TypeSpec", "type_spec": "tf.TensorSpec", "serialized": [{"class_name": "TensorShape", "items": [null, 1, 9]}, "float32", "dense_input"]}], {}]}, "save_spec": {"class_name": "TypeSpec", "type_spec": "tf.TensorSpec", "serialized": [{"class_name": "TensorShape", "items": [null, 1, 9]}, "float32", "dense_input"]}, "keras_version": "2.7.0", "backend": "tensorflow", "model_config": {"class_name": "Sequential", "config": {"name": "sequential", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": {"class_name": "__tuple__", "items": [null, 1, 9]}, "dtype": "float32", "sparse": false, "ragged": false, "name": "dense_input"}, "shared_object_id": 0}, {"class_name": "Dense", "config": {"name": "dense", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 1, 9]}, "dtype": "float32", "units": 27, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 1}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 2}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 3}, {"class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 18, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 4}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 5}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 6}, {"class_name": "Dense", "config": {"name": "dense_2", "trainable": true, "dtype": "float32", "units": 1, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 7}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 8}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 9}]}}, "training_config": {"loss": "mean_squared_error", "metrics": null, "weighted_metrics": null, "loss_weights": null, "optimizer_config": {"class_name": "Adadelta", "config": {"name": "Adadelta", "learning_rate": 1.0, "decay": 0.0, "rho": 0.699999988079071, "epsilon": 1e-07}}}}2 -�root.layer_with_weights-0"_tf_keras_layer*�{"name": "dense", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": {"class_name": "__tuple__", "items": [null, 1, 9]}, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "dense", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 1, 9]}, "dtype": "float32", "units": 27, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 1}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 2}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 3, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 9}}, "shared_object_id": 12}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 1, 9]}}2 -�root.layer_with_weights-1"_tf_keras_layer*�{"name": "dense_1", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 18, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 4}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 5}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 6, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 27}}, "shared_object_id": 13}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 1, 27]}}2 -�root.layer_with_weights-2"_tf_keras_layer*�{"name": "dense_2", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "dense_2", "trainable": true, "dtype": "float32", "units": 1, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 7}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 8}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 9, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 18}}, "shared_object_id": 14}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 1, 18]}}2 -�4root.keras_api.metrics.0"_tf_keras_metric*�{"class_name": "Mean", "name": "loss", "dtype": "float32", "config": {"name": "loss", "dtype": "float32"}, "shared_object_id": 15}2 \ No newline at end of file +�<root"_tf_keras_sequential*�<{"name": "sequential", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "must_restore_from_config": false, "class_name": "Sequential", "config": {"name": "sequential", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": {"class_name": "__tuple__", "items": [null, 15, 15, 2]}, "dtype": "float32", "sparse": false, "ragged": false, "name": "conv2d_input"}}, {"class_name": "Conv2D", "config": {"name": "conv2d", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 15, 15, 2]}, "dtype": "float32", "filters": 12, "kernel_size": {"class_name": "__tuple__", "items": [5, 5]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Conv2D", "config": {"name": "conv2d_1", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 15, 15, 2]}, "dtype": "float32", "filters": 12, "kernel_size": {"class_name": "__tuple__", "items": [5, 5]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "MaxPooling2D", "config": {"name": "max_pooling2d", "trainable": true, "dtype": "float32", "pool_size": {"class_name": "__tuple__", "items": [2, 2]}, "padding": "valid", "strides": {"class_name": "__tuple__", "items": [2, 2]}, "data_format": "channels_last"}}, {"class_name": "Flatten", "config": {"name": "flatten", "trainable": true, "dtype": "float32", "data_format": "channels_last"}}, {"class_name": "Dense", "config": {"name": "dense", "trainable": true, "dtype": "float32", "units": 27, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 1, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}]}, "shared_object_id": 15, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 4, "axes": {"-1": 2}}, "shared_object_id": 16}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 15, 15, 2]}, "is_graph_network": true, "full_save_spec": {"class_name": "__tuple__", "items": [[{"class_name": "TypeSpec", "type_spec": "tf.TensorSpec", "serialized": [{"class_name": "TensorShape", "items": [null, 15, 15, 2]}, "float32", "conv2d_input"]}], {}]}, "save_spec": {"class_name": "TypeSpec", "type_spec": "tf.TensorSpec", "serialized": [{"class_name": "TensorShape", "items": [null, 15, 15, 2]}, "float32", "conv2d_input"]}, "keras_version": "2.6.0", "backend": "tensorflow", "model_config": {"class_name": "Sequential", "config": {"name": "sequential", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": {"class_name": "__tuple__", "items": [null, 15, 15, 2]}, "dtype": "float32", "sparse": false, "ragged": false, "name": "conv2d_input"}, "shared_object_id": 0}, {"class_name": "Conv2D", "config": {"name": "conv2d", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 15, 15, 2]}, "dtype": "float32", "filters": 12, "kernel_size": {"class_name": "__tuple__", "items": [5, 5]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 1}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 2}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 3}, {"class_name": "Conv2D", "config": {"name": "conv2d_1", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 15, 15, 2]}, "dtype": "float32", "filters": 12, "kernel_size": {"class_name": "__tuple__", "items": [5, 5]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 4}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 5}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 6}, {"class_name": "MaxPooling2D", "config": {"name": "max_pooling2d", "trainable": true, "dtype": "float32", "pool_size": {"class_name": "__tuple__", "items": [2, 2]}, "padding": "valid", "strides": {"class_name": "__tuple__", "items": [2, 2]}, "data_format": "channels_last"}, "shared_object_id": 7}, {"class_name": "Flatten", "config": {"name": "flatten", "trainable": true, "dtype": "float32", "data_format": "channels_last"}, "shared_object_id": 8}, {"class_name": "Dense", "config": {"name": "dense", "trainable": true, "dtype": "float32", "units": 27, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 9}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 10}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 11}, {"class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 1, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 12}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 13}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 14}]}}, "training_config": {"loss": "mean_squared_error", "metrics": null, "weighted_metrics": null, "loss_weights": null, "optimizer_config": {"class_name": "SGD", "config": {"name": "SGD", "learning_rate": 0.009999999776482582, "decay": 0.0, "momentum": 0.0, "nesterov": false}}}}2 +� +root.layer_with_weights-0"_tf_keras_layer*� +{"name": "conv2d", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": {"class_name": "__tuple__", "items": [null, 15, 15, 2]}, "stateful": false, "must_restore_from_config": false, "class_name": "Conv2D", "config": {"name": "conv2d", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 15, 15, 2]}, "dtype": "float32", "filters": 12, "kernel_size": {"class_name": "__tuple__", "items": [5, 5]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 1}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 2}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 3, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 4, "axes": {"-1": 2}}, "shared_object_id": 16}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 15, 15, 2]}}2 +� +root.layer_with_weights-1"_tf_keras_layer*� +{"name": "conv2d_1", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": {"class_name": "__tuple__", "items": [null, 15, 15, 2]}, "stateful": false, "must_restore_from_config": false, "class_name": "Conv2D", "config": {"name": "conv2d_1", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 15, 15, 2]}, "dtype": "float32", "filters": 12, "kernel_size": {"class_name": "__tuple__", "items": [5, 5]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 4}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 5}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 6, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 4, "axes": {"-1": 12}}, "shared_object_id": 17}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 11, 11, 12]}}2 +� root.layer-2"_tf_keras_layer*�{"name": "max_pooling2d", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "MaxPooling2D", "config": {"name": "max_pooling2d", "trainable": true, "dtype": "float32", "pool_size": {"class_name": "__tuple__", "items": [2, 2]}, "padding": "valid", "strides": {"class_name": "__tuple__", "items": [2, 2]}, "data_format": "channels_last"}, "shared_object_id": 7, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": 4, "max_ndim": null, "min_ndim": null, "axes": {}}, "shared_object_id": 18}}2 +� root.layer-3"_tf_keras_layer*�{"name": "flatten", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Flatten", "config": {"name": "flatten", "trainable": true, "dtype": "float32", "data_format": "channels_last"}, "shared_object_id": 8, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 1, "axes": {}}, "shared_object_id": 19}}2 +�root.layer_with_weights-2"_tf_keras_layer*�{"name": "dense", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "dense", "trainable": true, "dtype": "float32", "units": 27, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 9}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 10}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 11, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 108}}, "shared_object_id": 20}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 108]}}2 +�root.layer_with_weights-3"_tf_keras_layer*�{"name": "dense_1", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 1, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 12}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 13}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 14, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 27}}, "shared_object_id": 21}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 27]}}2 +�Troot.keras_api.metrics.0"_tf_keras_metric*�{"class_name": "Mean", "name": "loss", "dtype": "float32", "config": {"name": "loss", "dtype": "float32"}, "shared_object_id": 22}2 \ No newline at end of file diff --git a/models/modelXO/saved_model.pb b/models/modelXO/saved_model.pb index 087f577b15768be46fb96ef20a10460707650c28..518e166ad9ca5bf99ad585b2431085d2f8e86ee1 100644 GIT binary patch literal 100415 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 WKD7ST=*#FO&)&Jk?Q|PE>HiN{f3-0H literal 125306 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 literal 14212 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 diff --git a/models/modelXO/variables/variables.index b/models/modelXO/variables/variables.index index b4f004caf701944f5d76989f88ab885752930ac7..9a46d19d0702615bb935c361ea53d61241ce0853 100644 GIT binary patch delta 417 zcmbQvdx@Qgfq{*KQHqI!kwHdaB99_p$3sSq338_KukRZ$nD9@uvgB<6im;eAF1@8K zqQF0~UX`l>EWpF=!ZUHL9UqUv10f9q(-nmgiK2=!lj|8(lmvvBI9Q>W2}tv3JPVq>^<0wC)c z6<$05`6fbRZp|cSeSSuTKVW0Bdsd!e(Bhw*%Bs)%1*~FOwV)N3JpbectSY>3fFc~G zzMGnqxit7EUtrZ0{Q*|P@#^F!E@l4Q{M^*MlG0p|ryLj*{=oG!00AS25HAyLhI0;l mTDXCMk-3234;x&psAq##BRfYQJOAWDHo3_SY%G)e**E}w3u(Fl literal 1687 zcmZQzVB=tvV&Y(Akl~Ma_HcFf4)FK%3vqPvagFzP@^WuN{V$2^pi3Zi}4%6BE-ZYt#F22Bggc^blH>Ac0&FEA)daTQLaJp!9M;W`uPPV znYo!&sYUvU$;qX;@##g0DMT5m05no6$9tcZoKRU}5iwdeSOT@|3Vd@_R8a&NhRIVg$JN)R$HjH zh*~iNG|~`gkjrHY|KW-x@MpX8IX!`?7Vao!2yco3j5QR%hYI0&F{z8I5;SDGvmQ@Q{amn*# zmH>++JOwHzut0qxp}}FgZYr-Vmj+)>YGP4dW?p)HQDR9dK8>J~_yepY=91$p%E%|A z{0m4q^R?@B3_x(2nSp@`#OQsInFyj8LBxSi3pX$@G8Zr$!w(X| O55j*pbgPuQ-v$7;_REF< diff --git a/play.py b/play.py index fdfa638..18bbb96 100644 --- a/play.py +++ b/play.py @@ -2,13 +2,13 @@ import mnk import tensorflow as tf -board = mnk.Board(3, 3, 3, form="multiplanar") -model = tf.keras.models.load_model('menagerie/6000') +board = mnk.Board(3, 3, 3, form="flatten") +model = tf.keras.models.load_model('models/modelXO') print("\n\n" + str(board)) current_player = input("\nWho plays first (Me/AI)? ") ai_side = [-1, 1][current_player == "AI"] -agent = Agent(board, model, ai_side, training=False) +agent = Agent(model, ai_side) while board.who_won() == 2: if current_player == 'Me': @@ -25,7 +25,7 @@ print("Invalid move! Try again") current_player = "AI" else: - agent.action(0) + agent.action(board, False, 0) current_player = "Me" print(board) diff --git a/train.py b/train.py index bd5b6f7..3d878ee 100644 --- a/train.py +++ b/train.py @@ -7,64 +7,87 @@ from plot import plot_wins from hof import HOF -mnk = (3, 3, 3) +mnk = (15, 15, 5) def run_game(agent_train, agent_verse, epsilon, training): - board = Board(*mnk, form="flatten", hist_length=-1) + board = Board(*mnk, form="multiplanar", hist_length=-1) + game = [] while board.who_won() == 2: if board.player == agent_verse.player: agent_verse.action(board, False, 0) else: agent_train.action(board, training, epsilon) + + game.append(board.__str__()) winner = board.who_won() if winner != agent_train.player and training: agent_train.update_model(board) - return winner + return winner, game def train(hof, loops, loop_length, epsilon): + base_epsilon = epsilon end_states = [] victories = [] + games = [] # initialize values hof.store(modelXO, "init") model_hof = hof.sample_hof() - side_best = [-1, 1][random.random() > 0.5] + # side_best = [-1, 1][random.random() > 0.5] + side_best = -1 side_hof = side_best * -1 + loops_stuck = 0 + for loop in range(loops): - print(loop) + print("\n loop: ",loop) # initialize the agents agent_best = Agent(modelXO, side_best) agent_hof = Agent(model_hof, side_hof) - for game in range(loop_length): - run_game(agent_best, agent_hof, epsilon, training=True) + print("__ running diagnostic __") + diagnostic_winner, game_data = run_game(agent_best, agent_hof, 0, training=False) + print("diagnostic winner: {}, our model: {}".format(diagnostic_winner,side_best)) + + if diagnostic_winner != side_best: + loops_stuck += 1 - diagnostic_winner = run_game(agent_best, agent_hof, 0, training=False) + for game in range(loop_length): + run_game(agent_best, agent_hof, epsilon, training=True) + + print("epsilon: ", epsilon) + epsilon = 0.6 + (epsilon-0.6)/1.1 + else: + print("********** diagnostic passed. resampling **********") - if diagnostic_winner != side_hof: side_best = [-1, 1][random.random() > 0.5] side_hof = side_best * -1 - hof.store(modelXO, loop) - model_hof = hof.sample_hof() + if loops_stuck > 0: + hof.store(modelXO, loop) + model_hof = hof.sample_hof("limit-uniform") + epsilon = base_epsilon + loops_stuck = 0 + + games.append(game_data) end_states.append(diagnostic_winner) - victories.append(diagnostic_winner) + victories.append(diagnostic_winner*side_best) + - return modelXO, end_states, victories + return modelXO, end_states, victories, games if __name__ == "__main__": hof = HOF("menagerie") - model, end_states, victories = train(hof, 1000, 10, epsilon=0.1) + model, end_states, victories, games = train(hof, 100, 5, epsilon=0.01) model.save('models/modelXO') pyplot.subplot(3, 1, 1) @@ -77,3 +100,10 @@ def train(hof, loops, loop_length, epsilon): hof.sample_hist(20) pyplot.show() + + ind = 0 + while ind != -1: + ind = int(input("Query a game")) + for move in games[ind]: + print(move) + pass From 9869cacb79a0fc015638edc38fbef0cb2f075a3f Mon Sep 17 00:00:00 2001 From: fshcat Date: Mon, 15 Nov 2021 02:47:04 -0500 Subject: [PATCH 4/4] Moved some functionality in agent.py to a Model class will allow model to be changed more easily in the future --- agent.py | 38 +------ hof.py | 24 ++-- mnk.py | 18 ++- model.py | 66 ++++++++--- models/modelO/keras_metadata.pb | 5 - models/modelO/saved_model.pb | Bin 60696 -> 0 bytes .../variables/variables.data-00000-of-00001 | Bin 3032 -> 0 bytes models/modelO/variables/variables.index | Bin 1053 -> 0 bytes models/modelX/keras_metadata.pb | 5 - models/modelX/saved_model.pb | Bin 60089 -> 0 bytes .../variables/variables.data-00000-of-00001 | Bin 3024 -> 0 bytes models/modelX/variables/variables.index | Bin 1053 -> 0 bytes models/modelXO/keras_metadata.pb | 17 +-- models/modelXO/saved_model.pb | Bin 100415 -> 136311 bytes .../variables/variables.data-00000-of-00001 | Bin 32664 -> 17053 bytes models/modelXO/variables/variables.index | Bin 978 -> 1669 bytes plot.py | 26 +++-- plots/plot50.png | Bin 0 -> 2396 bytes train.py | 103 +++++++++--------- 19 files changed, 158 insertions(+), 144 deletions(-) delete mode 100644 models/modelO/keras_metadata.pb delete mode 100644 models/modelO/saved_model.pb delete mode 100644 models/modelO/variables/variables.data-00000-of-00001 delete mode 100644 models/modelO/variables/variables.index delete mode 100644 models/modelX/keras_metadata.pb delete mode 100644 models/modelX/saved_model.pb delete mode 100644 models/modelX/variables/variables.data-00000-of-00001 delete mode 100644 models/modelX/variables/variables.index create mode 100644 plots/plot50.png diff --git a/agent.py b/agent.py index 33643e3..40a831b 100644 --- a/agent.py +++ b/agent.py @@ -14,62 +14,34 @@ def greedy_action(self, board): legal_moves = board.legal_moves() assert len(legal_moves) > 0, "No legal moves can be played." - best_move = legal_moves[-1] + best_move = legal_moves[0] max_evaluation = -1 for move in legal_moves: - board.move(*move) - - val = self.value(board) + val = self.model.action_value(board, move) if val > max_evaluation: best_move = move max_evaluation = val - board.undo_move(*move) - return best_move def random_action(self, board): legal_moves = board.legal_moves() return legal_moves[random.randint(0, len(legal_moves) - 1)] - def value(self, board): - if board.who_won() != 2: - return tf.constant(self.player*board.who_won(), dtype="float32", shape=(1, 1)) - else: - return self.player*self.model(board.get_board()) - - def evaluation(self, board): - if board.who_won() != 2: - return tf.constant(board.who_won(), dtype="float32", shape=(1, 1)) - else: - return self.model(board.get_board()) - - def action(self, board, training, epsilon=0): legal_moves = board.legal_moves() assert len(legal_moves) > 0, "No legal moves can be played." - greedy = self.greedy_action(board) + greedy_move = self.greedy_action(board) if training and len(board.history()) >= (2 + (self.player == -1)): - self.update_model(board, greedy) + self.model.td_update(board, greedy_move) # Exploration if random.random() < epsilon: move = self.random_action(board) else: - move = greedy + move = greedy_move board.move(*move) - def update_model(self, board, greedy_move=()): - if greedy_move == (): - assert board.who_won() != 2 and board.who_won() != self.player - self.model.fit(board.history()[-2], self.evaluation(board), batch_size=1, verbose=0) - else: - board.move(*greedy_move) - self.model.fit(board.history()[-3], self.evaluation(board), batch_size=1, verbose=0) - board.undo_move(*greedy_move) - - - diff --git a/hof.py b/hof.py index 82087fd..c8bc2c0 100644 --- a/hof.py +++ b/hof.py @@ -3,6 +3,7 @@ from matplotlib import pyplot import os from math import floor +from model import Model class HOF: @@ -11,18 +12,24 @@ def __init__(self, folder): self.folder = folder self.sample_history = [] self.pop_size = 0 - self.basel = 0 # used in limit-uniform sampling + self.basel = 0 # Used in limit-uniform sampling if not os.path.isdir(folder): os.makedirs(folder) - def store(self, model, name): - model.save("{}/{}".format(self.folder, name)) - self.hof.append(name) + def store(self, model): + model.save_to("{}/{}".format(self.folder, self.pop_size)) + self.hof.append(self.pop_size) self.pop_size += 1 self.basel += 1/self.pop_size**2 - def sample_hof(self, method='uniform'): - if method == 'limit-uniform': + # Gating method decides whether to add the model to the hall of fame + def gate(self, model): + # Simple gating method, stores model after every training episode + self.store(model) + + # Samples from the hall of fame with the provided method + def sample(self, method='uniform'): + if method == 'limit-uniform': # Performs poorly. Do not use. threshold = random.random()*self.basel cum_prob = 0 @@ -38,9 +45,10 @@ def sample_hof(self, method='uniform'): self.sample_history.append(ind) name = self.hof[ind] - return tf.keras.models.load_model("{}/{}".format(self.folder, name)) + return Model("{}/{}".format(self.folder, name)) - def sample_hist(self, num=100): + # Displays a histogram of the model iterations sampled from the hall of fame + def sample_histogram(self, num=100): pyplot.hist(self.sample_history, num) pyplot.title("Sampling of Model Indices from HOF") pyplot.show() diff --git a/mnk.py b/mnk.py index 098861b..387a628 100644 --- a/mnk.py +++ b/mnk.py @@ -42,6 +42,9 @@ def del_history(self): def flip_players(self): self.player, self.opponent = self.opponent, self.player + def num_legal_moves(self): + return len(self.legal_moves()) + def who_won(self): if self.player_has_lost(): return 1 if self.player == -1 else -1 @@ -52,7 +55,7 @@ def who_won(self): # draw return 0 - # does a move by changing the board and current player + # Does a move by changing the board and current player def move(self, x, y): assert 0 <= x < self.m and 0 <= y < self.n, "Illegal move - Out of bounds" assert self.board[x][y] == self.empty, "Illegal move - Spot already taken" @@ -60,13 +63,13 @@ def move(self, x, y): self.add_history() self.flip_players() - # undoes everything done in the move method + # Undoes everything done in the move method def undo_move(self, x, y): self.board[x][y] = self.empty self.del_history() self.flip_players() - # generates and returns a list of all legal moves + # Generates and returns a list of all legal moves def legal_moves(self): moves = [] for x, column in enumerate(self.board): @@ -75,7 +78,7 @@ def legal_moves(self): moves.append((x, y)) return moves - # reshapes board into 1-dimensional array for feeding as input to model if flatten is True + # Reshapes board into the form needed for the model def get_board(self): if self.form == "flatten": return np.copy(self.board.reshape(1, 1, self.m * self.n)) @@ -91,12 +94,15 @@ def get_board(self): board_planes[i][j][1] = 1 return np.copy(board_planes.reshape(1, self.m, self.n, 2)) - # converting numbers to their respective game values + def game_ongoing(self): + return not ( self.player_has_lost() or (self.num_legal_moves() == 0) ) + + # Converting numbers to their respective game values @staticmethod def print_cast(move): return 'O_X'[move + 1] - # allows for printing of the current board state + # Allows for printing of the current board state def __str__(self): string = '' for i, row in enumerate(reversed(list(zip(*self.board)))): diff --git a/model.py b/model.py index 925deb1..064b7a9 100644 --- a/model.py +++ b/model.py @@ -1,20 +1,60 @@ import mnk -import pandas as pd +import tensorflow as tf from keras.models import Sequential from keras.layers import Dense, Conv2D, Flatten, Dropout, MaxPooling2D -from tensorflow.keras.optimizers import SGD +from tensorflow.keras.optimizers import Adam -learning_rate = 0.01 -momentum = 0.0 -sgd = SGD(learning_rate=learning_rate, momentum=momentum) +class Model: -modelXO = Sequential() -modelXO.add(Conv2D(12, 5, padding="valid", input_shape=(15,15,2))) -modelXO.add(Conv2D(12, 5, padding="valid", input_shape=(15,15,2))) -modelXO.add(MaxPooling2D((2,2))) -modelXO.add(Flatten()) -modelXO.add(Dense(27, kernel_initializer='normal', activation='tanh')) -modelXO.add(Dense(1, kernel_initializer='normal', activation='tanh')) + def __init__(self, location=False): -modelXO.compile(loss='mean_squared_error', optimizer=sgd) + # If a location is provided, retrieve the model stored at that location + if location != False: + self.model = self.retrieve(location) + return + + opt = Adam(learning_rate=0.1, beta_1=0.9, beta_2=0.999) + + self.model = Sequential() + self.model.add(Dense(27, input_shape=(1, 9), kernel_initializer='normal', activation='tanh')) + self.model.add(Dense(27, kernel_initializer='normal', activation='tanh')) + self.model.add(Dense(1, kernel_initializer='normal', activation='tanh')) + + self.model.compile(loss='mean_squared_error', optimizer=opt) + + def retrieve(self, location): + return tf.keras.models.load_model(location) + + def save_to(self, location): + self.model.save(location) + + # Values closer to 1 mean X advantage, -1 means O advantage + def raw_value(self, board): + if board.who_won() != 2: + return tf.constant(board.who_won(), dtype="float32", shape=(1, 1)) + else: + return self.model(board.get_board()) + + # Changes 1 to mean the supplied player is at advantage, -1 disadvantage + def state_value(self, board, player): + return player * self.raw_value(board) + + # Returns the value of taking a move from the given board state + def action_value(self, board, move): + player = board.player + + board.move(*move) + val = self.state_value(board, player) + board.undo_move(*move) + + return val + + # Performs a temporal difference update of the model + def td_update(self, board, greedy_move=(), terminal=False): + if terminal: + assert board.who_won() != 2 + assert greedy_move == () + self.model.fit(board.history()[-2], self.raw_value(board), batch_size=1, verbose=0) + else: + self.model.fit(board.history()[-2], self.action_value(board, greedy_move), batch_size=1, verbose=0) diff --git a/models/modelO/keras_metadata.pb b/models/modelO/keras_metadata.pb deleted file mode 100644 index 181cd7e..0000000 --- a/models/modelO/keras_metadata.pb +++ /dev/null @@ -1,5 +0,0 @@ - -�root"_tf_keras_sequential*�{"name": "sequential_1", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "must_restore_from_config": false, "class_name": "Sequential", "config": {"name": "sequential_1", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": {"class_name": "__tuple__", "items": [null, 9]}, "dtype": "float32", "sparse": false, "ragged": false, "name": "dense_2_input"}}, {"class_name": "Dense", "config": {"name": "dense_2", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 9]}, "dtype": "float32", "units": 3, "activation": "sigmoid", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dense", "config": {"name": "dense_3", "trainable": true, "dtype": "float32", "units": 1, "activation": "sigmoid", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}]}, "shared_object_id": 7, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 9}}, "shared_object_id": 8}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 9]}, "is_graph_network": true, "full_save_spec": {"class_name": "__tuple__", "items": [[{"class_name": "TypeSpec", "type_spec": "tf.TensorSpec", "serialized": [{"class_name": "TensorShape", "items": [null, 9]}, "float32", "dense_2_input"]}], {}]}, "save_spec": {"class_name": "TypeSpec", "type_spec": "tf.TensorSpec", "serialized": [{"class_name": "TensorShape", "items": [null, 9]}, "float32", "dense_2_input"]}, "keras_version": "2.6.0", "backend": "tensorflow", "model_config": {"class_name": "Sequential", "config": {"name": "sequential_1", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": {"class_name": "__tuple__", "items": [null, 9]}, "dtype": "float32", "sparse": false, "ragged": false, "name": "dense_2_input"}, "shared_object_id": 0}, {"class_name": "Dense", "config": {"name": "dense_2", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 9]}, "dtype": "float32", "units": 3, "activation": "sigmoid", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 1}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 2}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 3}, {"class_name": "Dense", "config": {"name": "dense_3", "trainable": true, "dtype": "float32", "units": 1, "activation": "sigmoid", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 4}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 5}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 6}]}}, "training_config": {"loss": "mean_squared_error", "metrics": null, "weighted_metrics": null, "loss_weights": null, "optimizer_config": {"class_name": "SGD", "config": {"name": "SGD", "learning_rate": 0.004999999888241291, "decay": 0.0, "momentum": 0.800000011920929, "nesterov": false}}}}2 -�root.layer_with_weights-0"_tf_keras_layer*�{"name": "dense_2", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": {"class_name": "__tuple__", "items": [null, 9]}, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "dense_2", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 9]}, "dtype": "float32", "units": 3, "activation": "sigmoid", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 1}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 2}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 3, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 9}}, "shared_object_id": 8}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 9]}}2 -�root.layer_with_weights-1"_tf_keras_layer*�{"name": "dense_3", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "dense_3", "trainable": true, "dtype": "float32", "units": 1, "activation": "sigmoid", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 4}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 5}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 6, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 3}}, "shared_object_id": 9}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 3]}}2 -�(root.keras_api.metrics.0"_tf_keras_metric*�{"class_name": "Mean", "name": "loss", "dtype": "float32", "config": {"name": "loss", "dtype": "float32"}, "shared_object_id": 10}2 \ No newline at end of file diff --git a/models/modelO/saved_model.pb b/models/modelO/saved_model.pb deleted file mode 100644 index 2dbac8c3a4cc140bce28b57f5ad9d71392c3c377..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60696 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 diff --git a/models/modelO/variables/variables.data-00000-of-00001 b/models/modelO/variables/variables.data-00000-of-00001 deleted file mode 100644 index 5f85bebafe5f4d2b84c8cbe5cc5481f541083c93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3032 zcmbtVZ)h837|(T0^5)H-w(r`tO=jy>H`mVgnzm?QIZCFnWMtH(Y4?Z9aqVvDX>!@_ zE}bg_g^DXm(SF(o6{mv=WBV#C<_L)BrYnLVA|eXHoFDu!1pOdP-@99qyWXE5&4=7Q z@AKU6dEWQ;Jij-zbd&nG?-9%k}t$%g5yQwZrlc-+e=+Us<7|?JLye)}hLS+kwja_q>%8u!4dnQI5*F4t@0-`-q{%>1&vxwK#0yq9{gx!&Qw-yy*Y0lNT!+VjjMR-i9( z(gJ;v<#G#>I5-Ub*yB|_*ysXHmSIsG)>I9P!XVg%e8uw;SKyXd0d|6Bv|ADwj%Vib zEWOAGobn>VZs0~80-G!4@zN3_aYdfa7ex`fg201(^~fObBHzobz=$++o`WF(5EQu_ z&qyT!M=wAKe8__Xcs36KfT($nV?>pE+pE9MWf2GPUS3wbnAV*=0iZnRXj9 zwd*r2;(c_WW=_H<=mUF@`z$-pT!L+&69w}uBk&xbqXkA{VE}X?P$(8yUMdyBA$$@w zt7{P3P-hQeyG3V{*lyL?!*DNjV+3LtKOiEa_|bxh5&URH#3*z%@ZTbEh26M9wU-L4 zByjU0>;+*I(Uz>~j(`a2!|S4TJ6Tsc;qC964`7fb#ywLoFa`la0X>f*nujx(xKro zOJv36gd5t%kqd5LQF-Vw^U&LfhsT|Gu$d-5*r(^gcC;Yauj9cmW)3WjITgq(pB5(Xi{jx1mshIR1pgg)REK$C#citqzS4`fij3-c%%+#a5zCv zqT?p$fC60;)4@7wbos7 saCoOBygnLJoG(4B89y*^(T^M&%O~Z516trH8)wxuqbSIVk2U1#vpa1{> diff --git a/models/modelO/variables/variables.index b/models/modelO/variables/variables.index deleted file mode 100644 index 7cdde5777005986c05824e047218b40d41e65bbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1053 zcmZQzVB=tvV&Y(Akl~Ma_HcFf4)FK%3vqPvagFzP@^WvDee3>P{ zgn=hja{^O!2crguX?pU`DlQGaoYcgkyv)4x_@cy;RD2pi*FaQA~h)})MxB|{O@M+-&21e!rhU4sTv9(7FI?u3k++^nm3E>CfzZ<$$ IO5JY*0Lz>iJ^%m! diff --git a/models/modelX/keras_metadata.pb b/models/modelX/keras_metadata.pb deleted file mode 100644 index 15dd9d4..0000000 --- a/models/modelX/keras_metadata.pb +++ /dev/null @@ -1,5 +0,0 @@ - -�root"_tf_keras_sequential*�{"name": "sequential", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "must_restore_from_config": false, "class_name": "Sequential", "config": {"name": "sequential", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": {"class_name": "__tuple__", "items": [null, 9]}, "dtype": "float32", "sparse": false, "ragged": false, "name": "dense_input"}}, {"class_name": "Dense", "config": {"name": "dense", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 9]}, "dtype": "float32", "units": 3, "activation": "sigmoid", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 1, "activation": "sigmoid", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}]}, "shared_object_id": 7, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 9}}, "shared_object_id": 8}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 9]}, "is_graph_network": true, "full_save_spec": {"class_name": "__tuple__", "items": [[{"class_name": "TypeSpec", "type_spec": "tf.TensorSpec", "serialized": [{"class_name": "TensorShape", "items": [null, 9]}, "float32", "dense_input"]}], {}]}, "save_spec": {"class_name": "TypeSpec", "type_spec": "tf.TensorSpec", "serialized": [{"class_name": "TensorShape", "items": [null, 9]}, "float32", "dense_input"]}, "keras_version": "2.6.0", "backend": "tensorflow", "model_config": {"class_name": "Sequential", "config": {"name": "sequential", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": {"class_name": "__tuple__", "items": [null, 9]}, "dtype": "float32", "sparse": false, "ragged": false, "name": "dense_input"}, "shared_object_id": 0}, {"class_name": "Dense", "config": {"name": "dense", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 9]}, "dtype": "float32", "units": 3, "activation": "sigmoid", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 1}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 2}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 3}, {"class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 1, "activation": "sigmoid", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 4}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 5}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 6}]}}, "training_config": {"loss": "mean_squared_error", "metrics": null, "weighted_metrics": null, "loss_weights": null, "optimizer_config": {"class_name": "SGD", "config": {"name": "SGD", "learning_rate": 0.004999999888241291, "decay": 0.0, "momentum": 0.800000011920929, "nesterov": false}}}}2 -�root.layer_with_weights-0"_tf_keras_layer*�{"name": "dense", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": {"class_name": "__tuple__", "items": [null, 9]}, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "dense", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 9]}, "dtype": "float32", "units": 3, "activation": "sigmoid", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 1}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 2}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 3, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 9}}, "shared_object_id": 8}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 9]}}2 -�root.layer_with_weights-1"_tf_keras_layer*�{"name": "dense_1", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 1, "activation": "sigmoid", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 4}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 5}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 6, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 3}}, "shared_object_id": 9}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 3]}}2 -�(root.keras_api.metrics.0"_tf_keras_metric*�{"class_name": "Mean", "name": "loss", "dtype": "float32", "config": {"name": "loss", "dtype": "float32"}, "shared_object_id": 10}2 \ No newline at end of file diff --git a/models/modelX/saved_model.pb b/models/modelX/saved_model.pb deleted file mode 100644 index 0f43c502413b1d6b4c6f5cd4a61bd425986861e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60089 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 diff --git a/models/modelX/variables/variables.data-00000-of-00001 b/models/modelX/variables/variables.data-00000-of-00001 deleted file mode 100644 index 176809b5358899021849005302dd480cf0564e64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3024 zcmbtVO>7%g5cZ~a{QUeA`z0Zc9Vqkt11y#L3QQ*`nKo%qpNT8x3gajv!5g-Z&Bsjv`-FSbpKM_g}*_}7z zZ|2Q6^X;J*59j|``+V!q7@03;SLE%NDEa$0pC5ha%T;;4_fr0?!bSPz+-><6C9SZpi-Anf#~giTq&wM*gGQ zC-X0C3~asn*=2e7n!hmfY`pNthrj2qFk{75XsUSc^oip7osWy(0H6K`f4uqhw|6Is zcdtiA@!?owB~5Mrc9eR1yPML3JYE`Kr>V^3F>0*X;~I}KH!eZ9E<^gpvW!pjMNfv^fH7XggS8m&( zjEFOb-7-hqGe@nNW9H0CrY=*axSlEDmI=9M>b7R;F=x7f@6n6=oP;|V0uP|TBD=t> z!35|-(K^crJjXB50wb|70+I+cnhlnhT8&f;cS5(4L)eBUdl=hYCY!`|++=6r01RLR zB8wjo5jp(mLd0?Wh$G@j=-b1;LEsAeafRwEHCRdD7DRXuq)=Kra;7^C(x{Ke^gE4- z>->bl01CEqcnlK+528*ry=}03a1PDF*lej@q)3c?CnKFtjvb@NW+B~IBXq8(R zW5-Djmuj_Y<F3 z;Ic_!@Q9fM*R_J+kck7!ip`@rTc2WTpXi(y2W_WUw`NhzhOM!Sv0YivTwb_J&+%R; zTY~o@hxcOliORxZI}1nlV&SM43oa@X2FJ`SxJnKLkD6Gp$j>+`+d2iN$Dbh;1xgL- za<1B5t*M}K8&F6AQUxrPF_6>)FQ~KVj14NGKv@JZb=-ioIJ}^z(4-AIqCo3HI%J@> z&%6MAcm{khhzH^^WiFI)AhZGL&;~>cF#jLH!aj%sQd45;_%(w93(XcU;g8?r)(^uI z<`08Y}?i*bp&})RP{r%dI z7|LsKan?~PHGL+Br=F`-CM)yhDm^_hRU`i&ZqzT$=vwIA6+;yFRn6-Jx@fP)U}#4@jar=g(w5QvRPrC^dvPNG diff --git a/models/modelX/variables/variables.index b/models/modelX/variables/variables.index deleted file mode 100644 index 478fdfcb1035ecbdda353e645c41a8bd80d0ae8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1053 zcmZQzVB=tvV&Y(Akl~Ma_HcFf4)FK%3vqPvagFzP@^W;xdF`Y7PZMU?Ikbgjkr>|#}YfyZ!kAH}MenClQ zZe~?#k$!G|ZfaghX)ZD5O<)2Vs1R-1EvhIC434~10$$+&x`Gqr5{(?w?ykOeSsO75 z-2pdIVF@G9(2Ni^Mqx!ELn1?jQK1DCw14|9AEr)_Fe#53KKvfv#eUsic6j^vjmth z@T6)^V5;t5)Zj2pPu^L@rNNhznpl*VnU@}4lvt9APa`NhOaWQ+yZb30mogu5iH|{H z21w75y7mwTAYcR$JAR&?3+Ej8v~U9hBXa@6adx=a+M@-XXV^Jzvh#z4@PqK*4c#iG G?zaJNW)^M$ diff --git a/models/modelXO/keras_metadata.pb b/models/modelXO/keras_metadata.pb index 2e07266..84e3aee 100644 --- a/models/modelXO/keras_metadata.pb +++ b/models/modelXO/keras_metadata.pb @@ -1,13 +1,6 @@ -�<root"_tf_keras_sequential*�<{"name": "sequential", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "must_restore_from_config": false, "class_name": "Sequential", "config": {"name": "sequential", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": {"class_name": "__tuple__", "items": [null, 15, 15, 2]}, "dtype": "float32", "sparse": false, "ragged": false, "name": "conv2d_input"}}, {"class_name": "Conv2D", "config": {"name": "conv2d", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 15, 15, 2]}, "dtype": "float32", "filters": 12, "kernel_size": {"class_name": "__tuple__", "items": [5, 5]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Conv2D", "config": {"name": "conv2d_1", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 15, 15, 2]}, "dtype": "float32", "filters": 12, "kernel_size": {"class_name": "__tuple__", "items": [5, 5]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "MaxPooling2D", "config": {"name": "max_pooling2d", "trainable": true, "dtype": "float32", "pool_size": {"class_name": "__tuple__", "items": [2, 2]}, "padding": "valid", "strides": {"class_name": "__tuple__", "items": [2, 2]}, "data_format": "channels_last"}}, {"class_name": "Flatten", "config": {"name": "flatten", "trainable": true, "dtype": "float32", "data_format": "channels_last"}}, {"class_name": "Dense", "config": {"name": "dense", "trainable": true, "dtype": "float32", "units": 27, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 1, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}]}, "shared_object_id": 15, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 4, "axes": {"-1": 2}}, "shared_object_id": 16}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 15, 15, 2]}, "is_graph_network": true, "full_save_spec": {"class_name": "__tuple__", "items": [[{"class_name": "TypeSpec", "type_spec": "tf.TensorSpec", "serialized": [{"class_name": "TensorShape", "items": [null, 15, 15, 2]}, "float32", "conv2d_input"]}], {}]}, "save_spec": {"class_name": "TypeSpec", "type_spec": "tf.TensorSpec", "serialized": [{"class_name": "TensorShape", "items": [null, 15, 15, 2]}, "float32", "conv2d_input"]}, "keras_version": "2.6.0", "backend": "tensorflow", "model_config": {"class_name": "Sequential", "config": {"name": "sequential", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": {"class_name": "__tuple__", "items": [null, 15, 15, 2]}, "dtype": "float32", "sparse": false, "ragged": false, "name": "conv2d_input"}, "shared_object_id": 0}, {"class_name": "Conv2D", "config": {"name": "conv2d", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 15, 15, 2]}, "dtype": "float32", "filters": 12, "kernel_size": {"class_name": "__tuple__", "items": [5, 5]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 1}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 2}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 3}, {"class_name": "Conv2D", "config": {"name": "conv2d_1", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 15, 15, 2]}, "dtype": "float32", "filters": 12, "kernel_size": {"class_name": "__tuple__", "items": [5, 5]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 4}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 5}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 6}, {"class_name": "MaxPooling2D", "config": {"name": "max_pooling2d", "trainable": true, "dtype": "float32", "pool_size": {"class_name": "__tuple__", "items": [2, 2]}, "padding": "valid", "strides": {"class_name": "__tuple__", "items": [2, 2]}, "data_format": "channels_last"}, "shared_object_id": 7}, {"class_name": "Flatten", "config": {"name": "flatten", "trainable": true, "dtype": "float32", "data_format": "channels_last"}, "shared_object_id": 8}, {"class_name": "Dense", "config": {"name": "dense", "trainable": true, "dtype": "float32", "units": 27, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 9}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 10}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 11}, {"class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 1, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 12}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 13}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 14}]}}, "training_config": {"loss": "mean_squared_error", "metrics": null, "weighted_metrics": null, "loss_weights": null, "optimizer_config": {"class_name": "SGD", "config": {"name": "SGD", "learning_rate": 0.009999999776482582, "decay": 0.0, "momentum": 0.0, "nesterov": false}}}}2 -� -root.layer_with_weights-0"_tf_keras_layer*� -{"name": "conv2d", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": {"class_name": "__tuple__", "items": [null, 15, 15, 2]}, "stateful": false, "must_restore_from_config": false, "class_name": "Conv2D", "config": {"name": "conv2d", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 15, 15, 2]}, "dtype": "float32", "filters": 12, "kernel_size": {"class_name": "__tuple__", "items": [5, 5]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 1}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 2}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 3, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 4, "axes": {"-1": 2}}, "shared_object_id": 16}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 15, 15, 2]}}2 -� -root.layer_with_weights-1"_tf_keras_layer*� -{"name": "conv2d_1", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": {"class_name": "__tuple__", "items": [null, 15, 15, 2]}, "stateful": false, "must_restore_from_config": false, "class_name": "Conv2D", "config": {"name": "conv2d_1", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 15, 15, 2]}, "dtype": "float32", "filters": 12, "kernel_size": {"class_name": "__tuple__", "items": [5, 5]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 4}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 5}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 6, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 4, "axes": {"-1": 12}}, "shared_object_id": 17}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 11, 11, 12]}}2 -� root.layer-2"_tf_keras_layer*�{"name": "max_pooling2d", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "MaxPooling2D", "config": {"name": "max_pooling2d", "trainable": true, "dtype": "float32", "pool_size": {"class_name": "__tuple__", "items": [2, 2]}, "padding": "valid", "strides": {"class_name": "__tuple__", "items": [2, 2]}, "data_format": "channels_last"}, "shared_object_id": 7, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": 4, "max_ndim": null, "min_ndim": null, "axes": {}}, "shared_object_id": 18}}2 -� root.layer-3"_tf_keras_layer*�{"name": "flatten", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Flatten", "config": {"name": "flatten", "trainable": true, "dtype": "float32", "data_format": "channels_last"}, "shared_object_id": 8, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 1, "axes": {}}, "shared_object_id": 19}}2 -�root.layer_with_weights-2"_tf_keras_layer*�{"name": "dense", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "dense", "trainable": true, "dtype": "float32", "units": 27, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 9}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 10}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 11, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 108}}, "shared_object_id": 20}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 108]}}2 -�root.layer_with_weights-3"_tf_keras_layer*�{"name": "dense_1", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 1, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 12}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 13}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 14, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 27}}, "shared_object_id": 21}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 27]}}2 -�Troot.keras_api.metrics.0"_tf_keras_metric*�{"class_name": "Mean", "name": "loss", "dtype": "float32", "config": {"name": "loss", "dtype": "float32"}, "shared_object_id": 22}2 \ No newline at end of file +�&root"_tf_keras_sequential*�%{"name": "sequential", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "must_restore_from_config": false, "class_name": "Sequential", "config": {"name": "sequential", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": {"class_name": "__tuple__", "items": [null, 1, 9]}, "dtype": "float32", "sparse": false, "ragged": false, "name": "dense_input"}}, {"class_name": "Dense", "config": {"name": "dense", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 1, 9]}, "dtype": "float32", "units": 27, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 27, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dense", "config": {"name": "dense_2", "trainable": true, "dtype": "float32", "units": 1, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}]}, "shared_object_id": 10, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 9}}, "shared_object_id": 11}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 1, 9]}, "is_graph_network": true, "full_save_spec": {"class_name": "__tuple__", "items": [[{"class_name": "TypeSpec", "type_spec": "tf.TensorSpec", "serialized": [{"class_name": "TensorShape", "items": [null, 1, 9]}, "float32", "dense_input"]}], {}]}, "save_spec": {"class_name": "TypeSpec", "type_spec": "tf.TensorSpec", "serialized": [{"class_name": "TensorShape", "items": [null, 1, 9]}, "float32", "dense_input"]}, "keras_version": "2.6.0", "backend": "tensorflow", "model_config": {"class_name": "Sequential", "config": {"name": "sequential", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": {"class_name": "__tuple__", "items": [null, 1, 9]}, "dtype": "float32", "sparse": false, "ragged": false, "name": "dense_input"}, "shared_object_id": 0}, {"class_name": "Dense", "config": {"name": "dense", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 1, 9]}, "dtype": "float32", "units": 27, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 1}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 2}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 3}, {"class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 27, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 4}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 5}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 6}, {"class_name": "Dense", "config": {"name": "dense_2", "trainable": true, "dtype": "float32", "units": 1, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 7}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 8}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 9}]}}, "training_config": {"loss": "mean_squared_error", "metrics": null, "weighted_metrics": null, "loss_weights": null, "optimizer_config": {"class_name": "Adam", "config": {"name": "Adam", "learning_rate": 0.10000000149011612, "decay": 0.0, "beta_1": 0.8999999761581421, "beta_2": 0.9990000128746033, "epsilon": 1e-07, "amsgrad": false}}}}2 +�root.layer_with_weights-0"_tf_keras_layer*�{"name": "dense", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": {"class_name": "__tuple__", "items": [null, 1, 9]}, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "dense", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 1, 9]}, "dtype": "float32", "units": 27, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 1}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 2}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 3, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 9}}, "shared_object_id": 11}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 1, 9]}}2 +�root.layer_with_weights-1"_tf_keras_layer*�{"name": "dense_1", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 27, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 4}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 5}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 6, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 27}}, "shared_object_id": 12}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 1, 27]}}2 +�root.layer_with_weights-2"_tf_keras_layer*�{"name": "dense_2", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "dense_2", "trainable": true, "dtype": "float32", "units": 1, "activation": "tanh", "use_bias": true, "kernel_initializer": {"class_name": "RandomNormal", "config": {"mean": 0.0, "stddev": 0.05, "seed": null}, "shared_object_id": 7}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 8}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 9, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 27}}, "shared_object_id": 13}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 1, 27]}}2 +�5root.keras_api.metrics.0"_tf_keras_metric*�{"class_name": "Mean", "name": "loss", "dtype": "float32", "config": {"name": "loss", "dtype": "float32"}, "shared_object_id": 14}2 \ No newline at end of file diff --git a/models/modelXO/saved_model.pb b/models/modelXO/saved_model.pb index 518e166ad9ca5bf99ad585b2431085d2f8e86ee1..07ed19ddc646620f0d9e69031deb3b603fa0d1fc 100644 GIT binary patch literal 136311 zcmeHwYj7ONc^GCFk41wZiQxlagRcW0$HR%l?%=(85)|*{yWK-HmyVZ>ye`;X8^=R9l8YSX`+s}UejN_2+ zAww&*YV+#)x=SRmv+53${@d{Nl(R}l$l%saYkQ{!zf7Ga@Q}Y;K1PmsV@@vLKQLGr z9yu_2aLhe&e0=IM8CkEks+Buijm>Jy9c;E5wfbE;==Q(*!iTSw50V4o6a0Veg%6W^ zq;PGkzE*9$?g6%g99!1ywDT&ArN8>H)|~2Jt*t*a@i;)>dA?R}U2=-KsbPiH)CA$s z0!NxF=F5Ym-^=BP$r2fWo|-LsNDU~U%AsK3?qJKWH@6xQGLf%3r0{&TbQNA{HjF8*a*4n+wdTq1G z2SalceN%^sgb;&(A%(39(g#C=7DVg8jL4B*A%z#${d%j`dc-ERRu_|JQZS?$`4|~| zrP_LBXTu#NP8EpHe%@wte}D{aH@4Py*7)R)laW@VT5oP|HT_D}?Z3UXwLx>2`lgHr zw~YsiT@Dc96%HN&h8Zrn#3$}6e&eqHx_9lKzjl9n3#PK^j*}y6>etG4!@pB|=r<>Z z+~dSu_nWO+z1pg6)q^J!LsOIF(7M0jxBSZ1#yZfk(Nvu~jJts%uWsGgCa;kG*Q#sx zqa0>ZMCU0-=cz+tD%BK`Yh>iLjp~|z4|??*afULN+0;=o(7adO_FeIV_Lp-L4*7lu zkOJcBQ{jkmTMz%xLyLBSos8;8jO(N(2h z-Q?VIlpN;$RI2s$N^^rP%!wgbfkOhW=?!ve*o2i8d~(S~t=YQ7gyJ(GQ8@2xkilEk z-7b3rG0|CX?}y%ilh;}xIEL4@K%6iZm>_H^vc<=K`fN!W;y9!od5sL*;!LKmcvnfC z0!W_<-vh#TrcM&|HA3+h$RTL4vF@)wSKIIzaoO&2yV~TRf%3zAUK{HZd01GazOz{Y zvNzV76L}CEg*(AZ6GP-5I%ND-tJ?DK>}cYcAuQv2h4Rqd<)`ZtF>i3 zn2gp%|e{Joif7gHb+|I@Z2+Xy6i~?M`0(${V3IRVsreN~7 ztF4ybsLO`PtAyO*JK;+p>R^rs`Fp^Zu+eGn4o#U-Xq*f;eYVX2X0j~`qal}p2-W&M z#ug75Tfomp@DsKKC2$Ht-Tfy-2k`2;zsnZ2dw{Q6pf^p_m>Q~z{`w8#P2ESvt!eV8vF7*ZS6^l@^qBBqt`_BQm{PjcnH=@F?& z<%-Vq5s4`&7u;N782(L8pE3t}&^3A?o8+wC>kJdU{69_pM&vOyT9`f^Lk+fA4FMfR zvO$RGj%jsW3{i@3cd*>ghc{^s?|`ed54-#6u(wo0)83w@v4Itc?A936LvoOJQz>OO zcawZ@XUxGJb|d|O#x!O2oNADfRuX1VpkWMlJ77~7Y*uqvU-2qlC*6SCA?h9hp+G^vnNs-INj3Exd4)Q8ENWQ2Ec z+lRw!spFw=vV=o9X%1!7)f*>k6O0TS?H zyysMdL|RKX*f+>PYpYf5M%OX~#Bp6pvICz}rlidPH^p9-a54HroyF$0k3C?^Q?SfzJ2p>r}(n_+Gu( zH48{}H7gcyrW08p>@LCr;e%8(&{-gSwG9hI)KZfL0yQ`T7I3B$SwMCaVFCGds^RM_ zAYV*ifylsd!N2=f3jSSO@b7jydMUtm6Q(|$;O}Pmv9;e`@b6-RKi#lnf`2z*%2Nvd zZbrQa!M__>^=bo3M*)4+hp#3~eOkfa4H;sSpSbFUg=S_qvg+m6o$|dD{N1yFlA7I& z9btjAfv7%hzuMq&)L-{ zT(h$a&_A3CZoge|2|hJCBaGBXHRa=LqQe zfZ6k?z2}3ro)76gvz`uXJ&mcJT(hSm_MVQ~dO8;E>A2R@xaw)b?CFHPCu-|yQt#>K z!Hc4B((PxKK^WdCcTkwt;PdI=vqy#tXWRj9&>>@mv+k&24xvLperI!{3?D|=hj+t= z!|cO*;KLaE@Lu?EoPBs7d>CgR-VYz(t=)+azz2A1cj791fVXxhR^S7?wL5VQKEPYM z6CZ>R@Ye3cbuvu`*n36z0dJMy2fX9K4|ro1egOO&`~c{A($^6*xRXS9b*%6d43#gR zO&@Lv*P7%^ValBpU*Sxgz~7UFbMAN@90)KTA1R!7hh#6LaKRnqy(FxPKJpRwb#n0a zt2bY~y7Kb%%IjBO{?K*vI*Tp{RL#XN6}Br^S66SoxbmUZ>$hgiR>-P*GuEwK=fJhmX1+ ziP0%?orKPT(wq{g^}4$nYumWTL1!V*W)j+EG>0|ARuHV260DNwH+&Whi8fYvHa-jQ zYBvj)lV-sxB1Z~W^jVnEX2Bvm6J|l`C+IB5hcgM(N|*(qHK4N)C=?0pGMa;|VzU6U zO3s4*4W9)=+K&~A@mVOfn*}dv7OdOHNMTl=g*j~&Ec?m}?sGAI4R3eoGfE}kmrzMG zf7yL0){=g)LZ1!W5}VZ?TJvJ9c}cCk zP~31|iBU)x^XZ&Y;%0)aZl*XRt^^X63fdsY1aDB7>Ju7dYi~giW04W#5N!O$h`!T( z6dQu3_R9@)lio!4L7|DxT)FYu>Wi6x$d^(?{>d4*0FxpQ=1k(ZuPj!aX)e&#JbmrE|1&z$mO=z9m(5`Tx}Hi$kpS0 z8o4wtqH`{{n(juPlGAs)<@DV>bNVhi>S8-iPwcqed@EMQ$E_aQ=R2|cl$?%_ye+3E zcHM5|ik0z^tH=8^@_?D~k+ydJ$4LoI@6a3tu(;fva(g*cm$tBu#A|TCU}+?=%9#dnZ6wH7(V4rf})cL zi`ij^eRv)|^m)0L`j(teI(+~R9>|w&UL@x$(Apip;n&yvin1S79yF@k;7nU76&H(3 zMRJ22Y=VDzqaq!pP0mQ+c{*gcOOf9lCMPUj*5JToo$&}3w5?w%ZR6ZYQ}{*(y~w>5 z@qU%9C`o|92wVe3!feVk*-MPJ^SjakP(LQx#xsbfbgrRxj}>b73885nDrhjETgXuV`T^9${aZI|>F=(mA-M&q^HKDW= z)_b^j=W!8d$SH4f$l-s6#Si`eAybSFwG*Q@k#jatVln~Tp`^UTB;~oAPmwdaq-5sG zHSq3dQjrPC`JzX@F<_TzU~jO9I~tW~Vmk^rC992#YDNdcYM}k%QT@!0ow3Qi+|;{LYfb-B_P-nNf7fU;Trc|TvVRj+^}lPtN}iv- zAQ<~JIqA_Mp$j1Yzg_wIS;p5FZ=NSp7+-^`!NS)#YcDOj-}_$%$?t8DPY;mibm*r4 zu^kq>S>33JgZCOlz3@o3h7Z?Jbl_0mRu08GBbO1eLdmD0=&rMLELwfXM%``N+&(?OM7=- zB3r6-)u-2SpHA4P*Fm2S3v;T$Kv`_<1Pc>>86K@>HY+F=aOV<%9SR(WJG zOoIggmW!>0K*=f1v~9y{*M?_pgMQhOK|8i?+-N*fS`JINv5))fcxT(;L3hbfLGuvP zD#Qr~SKA4WGR75o9xlCu>+I1LcCpMD*(p0Y?>OE*{qFepcN#u~^y?W%)(fLz`1qo&3qDE($EJ>l@B>Nn(+9O!eD?cj7_85JwNpF?nt*js^ivKw zV?zfdLndSgZL3We^iLf^?J#>GJzJlOr1X-#lYJq++H8&=PyG+@#W4Q0i|4a0zb7a5QC&YK2XLR*2C zk}P2BvUEXz$|1+2&lpI6T!U#*f+q+ zDlWZ@#N{MLwrfoDtazx_CipBX^#Re^j1K7UAzGV+&_q&-EiJG>N2RuxFu}5;i2BgU zn$KeznrxRHk08|$i=9(wxoRcF5EeX9-UbN;xqM(T#YQa~R$~g8u>&zM>5awEqCeq~ z#4~B^9GC96pP<~D0SF!}e?cnzL`#1X93TwEQEsVKyHpx-OE2;&hu+_jgqot?x{99TzmJJ??h6pYijxbvK048*q6 zkWG@bBe^lgn+=bM#xtq(W}|Y-BciZG0^}p z#;YJRJEO~EBHAbYj6;MRM<2tNnVi$lrRaoyQ_6S?Dtny>^B^$IMU|zi$d;Rpxx`VM zh^1F`JT;zQW9m?QDbV5ZG~PvcJT;!NBZqN3HJ(b|Rcsqxf`>Ack3d04sbN38qaupo z!Bj$VP%)6;?Pqv|m&XvS6Q(qY4c&Mu4rT$J0^LL3MkJl|gS>Jnh)_y{X-_L@fkUtf z6=>t3(9*J5*HVGDbwIy?QcIwqDbQ`jCIVnCXK_5T;bAae>JxLQJtOT>i2V`gQRAV0 zx<`;^e4>yEG-%^}!AJ^(F+gg3bLuo@G%3#bzW^>=agnEv$NDKhvdv>?iWxM}?D)Jt z=}B{tfv!S{{sy|*V`qMZ%&HB3>PNQi?9TnDu#hKzND_$%i^$m@kpr>QzpySFbjs}f zkBX4M0+1wdvoivqG!#XmmmU8>%Eq7)_Q5Bd#%3Qu?d)A|1i> zEg~3i2!qVI>@K38bRs13>fXRWQMOD$PK?FmL}(U3m^Ee?Kqw%aSEG|Vo70J-4 zL5^8jg<%gygrB8j=gi=mx9#10dIN#H;!uq!64cZZAb-3e_|L64(k)#g~=e+u(liM&!m9OcsH^}Fs9f<0Lq3ZOAbwdJIuPT{RZDsyjRaD5C+2lx8&0pWBQE zI*b~aZZyyV_Q7bNHy<||=udH@fev9a8kjJdI1M=JUK!l%L-S?KXrMn7f+{Pcfuo#7 z3=D!!ENY@)z^pVBWi-%7X>_3(4KNr@ngvH@9ZJf7wO;JfU-Kdej0So`21=^6j>Lp! zG{9Qcj0W1{n9)FcHe)jy=r9s-1Luy-j814Y&>Gi_1~w1#*jY0$8nkt;PcRxpPMOMR zV8cN(8YqyM(LfuPB9$~6sJF5-8aT>D0~TLk4G4_}fKJS4puiM@T}gk(Q$_>P3*FM{ zf~g8&G}w*=3>W7EZ?K$kU3Llqv@gO*mIX-AFXZ$jboA64{D>>55TPIJ;IuSM&XS{*9Y{1#X>R*#wL3LgQmNnu zfgl-1mwEHWUUXTy7&_)q)r&5Rh|FGeSueVbg{p-%6K!jd%6m4pP-!!@vt{I zgg~8c%@7j{A2W^0vB#!Kxfflg2b0VQGjcDwj8&S~-Q|1HWl)%1U0rJOii`M4RyN{Z zbeS^0#KQ-LqVDA-EfwW!k)>N;(woDyBo2>M7zfEIZm4|D+u5Of37< zT*Y*p<>Rc*>B?0sp%cwj42Rn5M3@JGUUXUHfEpf8jb*?NsHUqJHaki^k*;Do5Z4(M zguLNP;VPy#!tl^s#q>u)C(SNFOhT|jNpls`Q8142z34JHv2$srxr*u35*ny>rbhyV zOtFaon9I2rU6w2KqRZ;dEpBH<9mRAG+y_T7z4^GKnEn)Z6w@JWj$$TECXQm0p`)1I zddyKwe<%cQc1C~%f!m8N(+MvG=N?T0Xu1K}vgRnJbsTdP)1Fx!#dH|id`t`I@QB%q zE{kV-?M0XQm0oli-}m;_V4yn^v5tDtWvsl4P8E4(SgZ8 zZzN(e&>!*kd(ma#dmy4NRC!j0U~vGN>pZoevR77AQfz=&~mF zzYS8-=#1ElE`#fJRdobd2v3XCi!S2@DP=XvUUV5h=9}R}z34I?W7dljt2Q7uwzgIG*RMfkx5tjU zP;Cd{%~&AlXY;b8k_EzEDKUr@lqGo?%{9#tku?LhXg~h8Zl%~Iw59%y|=4pYk&qh$V z!t$Q7!q5nho4+rVp7)_uBc?jOuZsSVcJ-wCo!nWQ18n$7jw5u$bmdV}Gz9VO;FF-zM+rwD8 znf7B!NNI``A%$QKTi^6eaxi?x?xixy9+>kEM_Z;J)4$n|J7uFwewX|aawr@gzae!8 z_zzjpOx^({7Z`<9xshfd>&fYdKhy3bwV94w2y1PcHyUT- z4erwg@KFqTC|G$SjzL!Uz2F08ZJhplC|HR-?UbJ8eeM+24js zqjlZKGC+l0@}}AKo+d@Kd)mnmQZA8D@7GwBH=~}&HEDO{HWoU+kKHC?VPCwt46k9q zJuKEZ^H(?=ek(3I1CRDo;rDXbTAoHq!^Z)p9Sq%#_X;64$HFGpGR)Zt!T4yy%$-jg zyy#N9MYYNr?SZ*yPNV%8bm<@$r$Hov9sO&Ng+1(~sTJeYkYdxQI;EQE5c8`ZF&0gY zPtII3yleV{4mlE{qdbfC+?vvyp`jthVxZA+Uc6xs>Omr1vr={%p9lATp^v6UCWS6f zv8F9#J~jlsVl0DLyRw?bnv-{!Pz_LHyU5+8wya`zmf9X?YG!dS$JFIB4JHd5n-MXT zojKj%|AY^e3vDi(bHX_-K!dmWF9l9NlXh<;mWI0&G4hZeeFX`itA#@Z!%rIkw zEMytxoeXtPHFSC!Zy>&~Ituz7R=v}|NO&2FpcuvBpgV;?m$V1-E6Y|%@1i!Bf-H4N z_h3_*^z{6ZpEPYM<8R<}qbJ@_j2THh_I9$7T#4ptgzU@-xf;EqjnP~S1A24zQ>&}( zI1zEaFS!S^uw5+9mgal5i^iJYvt6vXg*;E8mzyf|!5;_yndXw7?SeV@C=pLJ)w5^2 z;ObD%b^#31bPHs#+|QDfvJyD!tw)KOGJ3WPp>3CXwu?~361u#0apB;qbHZt*jrf0iS*XLkQI zc_|_>qahw|oyXZe`F19GoOSLg2wR|y@}EGBo@XuK;W<1rW9U7@zii?SOV3ZH#dDHN z4bMt`D|2`5c{Q1$a>`eS$)|GUSzQ7&{g3UivPRVn-H%ZS0dHZky%6ADMphx!tJa{2y&!A>2}Z!mY}mu|k0RkQ?C)h)}P zehcK3V_e!ifpV(bDq3%eyh>B)DZ^NtCG*NfkHuMD(4%RDJkw)wmKQCtG$j^Gv%JWJ zkSW(xEKLBxqHRLqreb-xfBf>I-n%HXq}~@0OM3s9m`nC1e*4AZ0L8Uf9H8$Ludltc zV{w4TWlV?U=qG;0vemFvsQ%k376)XDoHr>+-nx0~#o~yXAA9i|F;$RWEKaQsWmGz> z3EGRrNvNgyYs2KT9h?Y@rA7A;84)q2d@?2+7qtyNna4tia|1g^ z>GVx!dp2B}@0|@<6y~?S!g4of!;e4};MLBm0AH|F0UmYr)kgl8OFoxLvWCUt>_S|! zX{W@+qQ|V;@|+htCBk#lgr!b-Ok;+p^V-`;#s+{`w4V|IJ-v72ln4-d|KFlh;tzD6 zu|c2L@Nme;Zv5uGbqef0nfBk&M@7cy^2iY|{^AoqW8VfxMJ8b6ys@Jq6DM!oy!DQX zy`$pWLAiOS92NIZ;j;P=7->+%_2FDGr4NB|rKkH4U|NjreD(zU5Ihm$uXi_>>G>;t z)YRL|hu~MAB7g2+39JkWP_3^+7M9jdqh0}T&UKy{j=30YHJg5uU7IZ}n-_8&=5G-v zppNplV8X-_arXAe-@?bJ`?vC>$f5778SmE1-x6da@8xe<-)hasY!i`)X^4$ktv;+Z zc@^1%q_A3p#kmIIGpwrYC>dJat~RQh;#V5;xRxF@nZ>F;L;2B0?{EF;JDQ9d;y_SB;_IGjbj^S?ZW?Vg8oMUjCNX ztBsmSOC3)$kuraa18JILxnwXglvVx~#|#S-VyG7b#Z(Zx&hd86-{N@Rg8VH;ptIw> zP4l-n-ahAValE%6e~amd^X;0yMOY%TuSwrtwo5Y^)Dsw2kluDFq9(iX8QGWYO<(zxL;m{! zc}idYl?RRL_O`!X+1y(9H<)R1acMU03i3hXX`xa=X0$p^IQ>3SjJ0w*eFkdxIWiY} zzf|c258-<90c13#%3d)^Q6o9x1mn0ECSC`aU{>9yLmJKSnX=Trdh9$CgA9+trg;^C zh2)BO;f0uxdppm_|7tVJ=+0xEGgodC{;C@ zW}2`Zy!qR7ML~;5f?>I-WabL{nI@-O_w&=IWcG@qXkM^ntazfZPmr?-h#OhYb$_cc zaiSg9yf@XpaSGY(FC}0gEydYn_LxrJ7yY>$IhO)4E#G(2%84XYPa3kBrL2?!hkY{H zUr0p&`bCFKr$92R%(Cz5q&NEWIdUNta@o(LndoUY6&Cw4laBXvN+Qr7a1xg+H$1hM zQih>{WnvFExFPJdSl0*BcMlGZBkS%FGXXU`~~ zEN1x?#Sc4VDgi%X(97=9;(VIk=x;gXsRX1L;*bcxpAX8N7NN9qLic`tc##0cr{ zBnuXPF9NK_Zby;^#&}WTNt3o6!MzHWt>V;U%C!+q;uhzhIpll-WmTSgJ++;#LnWdw z$Y!A5MY8^j=`f_fpDdnY>HL$XNR6B4_fL|uoQ%j2J5TtZEbn9%z5kjl?;<4uk|bEH zMnIC5W*)J+zI2*wv(SPn0;zVItnQ^Iy=2N?3knUiQSt?|XQdz}EBQuW^oNs`dE|7CEcTGqP6(^E8Q((HK#tRxm^pjCDqTv>i(OVF_!88MlS~5TXSc_#5W16DSWc zr6**|B;y#ebH+PEjVlJ2JbYziAVZ8R_TK0(AjTCGTr;jDFR+N2ET-Tat(%6jn1RKB zHOLeSkgU905d#a_J%uV%v7HcwgfF?VadNoa0`f^$Ud$ZcTBd(E(VBXWSo`eQ0{OzkoNg*hUiw5Cmp>qY}q zQd&2sT~1sE!Kgc+HgXa$a1iLCmoo<3T82h7ab^A5~x?Sz;xwEaiKuxpS&nVfV} zn_WL^GbF*&#*jKTy-j+Ei5SP3{&72@7BjykPoJU&H^3!J>Fi8!?Ifi%!u?S@Nf|N2 zB}=}TAud@9%*+(mPJRZ)xRm= z_t^cEvDoC6sund(W~+cqA$T%dNqqJs=i412WG58F;mIU*AT-b=4>D$=OQxahUlB#> zbR8P$pm=W*_VhOq7bKWW+&mRC!NgsV+Ip#_H`O8TM^?<}zeTL5A#`Z2i@7K0oU4c( zHx7qwMM{0{(PW1hQNyk%)PoqurY|(xVR~>zhCA@ewe*df?(B|kF}{hL?o#+BwlUoq zZV--#neOZu;-)(te&0=Z(avzwoeuR@neL)}GUvMZ;ai6?Om~wOF4~*%F4i5s%j#fq zU)sN2*4i6xyu-i~%{=-GZH;$2a699j4r`D}i9}`?&m=S*+j+6>apN5Z2?8?{y$Lhk zCG>|I@9-D)XI9O#aol)^;}X%EvYA)hc!wi^8}D>jt`Y95@h;XIZoJdM*x}o1ywd^Y z0#a)SG2ZF$e6$K!Dtet6@AUQgkr-P<2-|66r9v1VR4!ghRJH4kw^PLXZ)_kV}r!e1{;MMg^ z(l@k|ph@OC9U&pRvohZ~9%jBn`fGo%5Q`uyH54=7>1Y|f;pRIGTodqd)06&!+*H+~ zM$C6Qd@wB`c-(xagB$3pmpYP$c`U>Nk@S@kZobpdNiyGQU^6MqcRIKnq%ppZ?=>6` zGv8_b;O0A9bYjd56F1+r4ed-Y-$e{CnEB3z8E(E)&`IVyjT(yBi1|*nm8JR4@i6n9 z>IygC0m4bxW!wNFQ3@@T@`f;?VXj}^r;CyG?Lp@P5Imb70MnTa_Z$y!_ z*q-Th9MTrDi@=6P)d&O7cg5NT*iKqjGnS%djawtoZ>IvP-4-Ui8Fyx~%%+>xH`sf< zgCJx#DgME{jl|lu@<_a0E2#I;j$B6Fs~3Spii^zYB_Jo=NO6(5HYF$*i*pGjDB-EzyGX5Tl%QNJ&g=bSITzl7 z5|sN;Tx3?OLkVQ))uC+4^vqt#J42Eul|r?wGa?g;wd$e0YSu-Ond4Tg+Vb!0Y`j)& zw0M?ifBjl@V?!w?vM7ZpCNgK#p=50R))lGPr*bgg7R5#8j5?G|oV<1O_C#dYhoEz@ zlDrwqilE=;pj!2%Ht&TiDKi!O>yDvfpME28Dbus!IjA(Yp-Bkq;NJ<#Yp=LStPW+Q znp-xd1r}#}r3JQj8f$)M{wxsNXFZg@Ne+h3GIdlr9Br9?O#fy-JWz}-SqJnZMq8E&|$2N4z|=HqCpu zv+)M^<(|J+T0m{s8F|F?N(=N#3qa-{NN9d6T*Ko2AR9>p0oZ86^cNgGue#_`yCt&9 z8ts93!G9XhF*gtsJ zz0v~YWSP1ng>T9~j`53`M_*oQLr`ukoxeL6TmsW@wqn=S+8$>bM&mx%z0v}Z`mK+p zeKYhBc`eBW3;lIN50TF_2{0K>hE$H!;-T71T@#6C!e`n{$z~(kNN1wpsID-{7TM|> zRv3mCxf)`zTU%{JvKfVSs6}>=bfZ^V02r)%%vknruHdkLz0v{=rrMaY>g{AINuMbE z9Z*`}2ZzZgbL709TfAAjTdzV9L_bI}-r$v$mx}Srpc7<;7*d^ z;GGJ)osp&KMTYP3@S$E8eo}vHHu9EHhm~C^6=0q9vz69KB?GvovDIj`-v$_&^du>$ z8ecK|SPDOS;m6tVC5B*>H1BZQh-YkJIO`JRKg`1E|L1!v7VLjW1ZPwLK zpmyW47I3v)(ah|{Phg3IZaoybDRr=aH`qVAN&dq@GG%ZNIHayYwF6+&))ojRDD^(S zw8#X~o!W*EeCgk*J)9VFXUM5)lgY2$pupDFc17GY-1i%Ge?t=;LQFl2yif{WxeX-_ zG;uQNLbcae>s|m{s>FH_A`Pm&#$K9LFQw{ZE&%uNJ{%Y8V_v-!>BDg^l9Mr%7An>C z>Sm?Z@*6Pb{=%@^=UyVGV{nTC?zZ2ma{1j4!WM^I(jb{I7m!aQ1YZ`A>;78xkpe7| zi?Pm2MFF|tR~z+O{cfcJ*Rbl1bL2$)4X87*)vB_I7yY9^9!S-ldP@NU%WLpGRB!TTcm zI8C3y>;{)}*eHdc1=?pY;qv9!I2{+ItD1d{uDhw|>ILi|dgT4F7nAAgl~B6sJ=*E& zdFIP$`!sk*F5^nHPshdR>KWW4Tv7R}a-0qYIamWCfGfhIinlN^^clx_>>R$zC1L2R z{@8J&UsXzvog?uti|DsFtcSwRqTkM;-_E1oE}-8oqTeo|-!5YVM$z@q0ek3xJ-h{U zz#a@ZPICZ_e~Cf@W#W)PnE01Km-v@JmiU*;^ydze<6uQ%8|mxbOpBKTs?@8SP)}JT zdYc-Bj8MB!V7UxB9;6bqUmsCDG33zn*GFZR{V$KM{Oo99i0k2WWnrWG2=vqkwbs4L z1HX3nUaNVzI3qU9nJZUUS8u+!@}br1w`N|ydh^ArD=%NKynglN4_#lGL*HYIF6k|- zw^EnAm1er>&Fiu^uWfJ7Y;Ct{o3)SojTyF8Cz0XV5LE2eodA1Dz|&#Ne9umT^+H%< z*G_t84mbn$$m(`&X47vqYHQ7z;tb!$JARAr>q&3jL|II-=8e}@Uwq}ok6yo7x%Kjm z)tPWCn@MfHhPEjfsk;_2EJK#=u1yR}$?n~?h+!Enh3?wKu$0TByB0AlLt$iXb2sxD zPizsxGR2H1wu#ZQ?Tjb3h+&yx#uMAbuxvZyi7lS2TzldAweNWC#*446^4;ae%1hU; ztyZ4DdG)mySP5EuH>CdAqdSX=R$xeArw$lZ}_fQzSuX(y>f2Cc`N>bfopKR z^=KO=3c|%a>hM3q;)nkK5G#YMMn~_WcBdl>pez)oX1N$0E?nM-Shk7SxS`lD8?y&y zwHE_Loqh=}{GzJ28~cVP8#L&cY|lCiM`PG9TOs7P;M8$*MP5lfiV3|>h-@0tA%tin zlqhvUi357`^fBDIMKOS0(@;aV*3cs%%6p*)T&%^hF(~3CQ^eaNMLha*7)3mUBJE95 z8dbcksp1(_nN6n3>>jByOMeEV$}B>ab~ZPSCbL=7WY(a`Try4O_DGXCoKxlyn#4IJ zYFN~$GM6<~<_xOLCsSp9k5rk*Ib|N9N}N+n%c(|_`K)O&Z_s2RnI;Psnha0d_ZwZx zF3`V;t)2yhCW+=@jUWr%6J*%KgzSPrki}$zELsTSq$J29{b`IKiwHs5*ugcDEOt*4 z2PMg(L6W6pk}U0!Buh9+mQs<#F!*aES<0FuO9n}nlS#6?N0Kb#%E>Z9lDMj-Y};_N zp;2TxYlIvELdpQ1*RqjAl()Q##oYIH!q<`B$qj8G-zH4Z(h;lCI9977Q^38X8u z7=gOcXbl3Dn6O0%gz2>QTPvL=rOatkGHIf#v=~jg(P<5ucov#qS}j78;F3s7g=TKWx7tGJ?O!Xhf-+4q>!!&V-)H}6*efeXyGDE8AiCs;y0kv zXithUN~1-SM!IT@(Wo2U*r3spg^Mul7~vw+Jwm6@p7dmtLQ5uvbWItfP&cZwL7`;} zg)n6qp^(y+bx#nTLVMDiQ3{!gv)4v(_V%hcdqsRVgO202&iHPIIlO4}@rqgNh=8wt zu<+XG&E8)1X0L?HA?P?xpST>d`S$2E%3O~IoDCYa(WAY+>d~HuuQCtQqvNX#cVW^g zl(|+77#kF7qg8u*)vCQ&3m0KpHNr&}Z!Mihnd{Ynvq7UadbPJ#z1o|za1o|gBV2?! zrRfyPT(bs@m-P%DQM(R$&*j0*+pAkQw&|w^H2a08Yvsm0=-3<4iywL<_7#Ms9!0(^ zqTk}M9tt~)emjSLJCA<5fPTA(e!GNzyNnGOMHe;)gbW}Kv2XDf&;i3lBQ&4IzCgg})-NwSZ_%MQ81q(2G6*ka zKMVAK^pipHsw?=v$Jjl_Mj3k#k#_~jV^il02V^%i<$B@Kc=~xVD#D8@+=Ha)E|9r$ zU*~_l^JyF>p!gwjiSHucdDEDsw&)_}+aeBI!eC1{tcSsRIP5G2JB!24VX$*J>^ufL zkHaotunRcsA_lvN!!BX4OE~N@2D^;Tu!qbrPF*;2#b?;VXBf^O2rNFspob%{796k{ z_V5|@uo?E|P%6wKRG38}=MYG|&3OcJ9&K|0fm}c#7ZJ!s6mkiHTtXq25y<88wL+i! zeqyO$PA-t6m7ONIs5iI$wc4E;gqksjco$NAX#r;BPs-#=gq*=5)0$NX$Yfz@MK2zf z_AF!ohUdF7SWLJVi||VpgBeDvO*rl|dJc z(PkFh(4G`?b<|V9V;#K{P;S?Pot<*FH_-7Y%GusZqMYp=v?oP5+goT)GK$PXg~Q}P zzzq=i-E2(^(SwB4WQ18M2rzSB@f&v`gy`Bmf9?MER;}J@($72OC=1c9t=;tR`VXJm z+1P+=BWw3u^jpIR**scJ+fG!|$H>rjwFSX1b(gq>H=48MnVBoo-f_HRx<*7$6B^rO z??v;EWrwbT-Ri~;><23&;HurXGH_)ZGXHu*LEChL3|-^dUP^oEW>R+Jt{mpwkV?zn z+@9fm4XZBbUvj?`9J|HZ_1B++=yIkA%j?f--3MxV@`mh&AXr&hxuO->t8cmlNKiOqeSz?|J`fE_EKKQ=*c8wrpX_&+=9z~Jop#39Z5K7zoFM-@k(Hp;`j2w?L3D69xi4BrcwjH-^ zJ8Y(oB(~!KK1UPVk>fg+*bW=l@x*rIxW?PIGtsskHm(zi?Jy3c_Sq!X@=B$ONVBvC zh4*+`mWB^Wi|dfevA)i0@>Mq~8(TqXz{Oc8W(h|bk=_<=Ss|CFIHN!=YJLk6-oe7J zA{nlhgpkvO<=JFfWp$lpBGs>L^;cwCzDXqg@bMLR{p$L9B>VMaN2_gf6Iu?F_R%jm z_7X?2($($9)TX@Bq?s6`S6*q0Co6{&@3!v_@E^2SUTLSbz0-ozzE;pcRziprG=Q6z z)#}3<@z}m=_R1?Mt-4oU3HVNvmgdE#JRaq3 zmvWv_M~zj!feJ%ot2_rLt4a{ui^>Z{J4-scpk&=?H^h07exB7CIf67!KVy`75#@K_ zY{-x~6`~?nR3(g9iB}g1pS2&ls~4CNz4pp0F~Qz+rFz~guf(Wftz9z7f>lEfg{18D z=Jr<8r$6cFd=42W_M5J&n)u@TJu`91=Vi(ZoM~uie7o8S9Uha+aS+()|i@ezz;L5B5xL3#kXaVscT z&X2K^ceB+1p0923V|dGd*m4iKqxY|~GBr1$!a{A+pZ>Nguk_Vn@~IqoR`(ch`XAe2 zx%!!Tf~Q6228=s(<~{B$%^6mTcTj<)uXR&kDL87=UTvi%=aWv~^bJ;9>7|=5kmuTS z6w6ecWD;9gUYhR}U}8a%Q<=%Ox3U1!Er@8jK|0tPhsjw>m`lM878?1rVe;AZ@@iqZ z#EUSA3wLf?1=H#~NND|1H$tmd6^_KK!euMDie680J-L!=|4PSYb6K>oG{0o1VZF? z-s%n!rW;S(ru}s6UJLHl%463YJNr$ao(}626-pAcdNgCjXA!SK*K#@d+06Yrp}NfthM#Z=GMBuQQ554>Xof+=J6sT z5T@S;H+K~sq*kxB7{~?pob3?_vT8z2yJ?7jIRvSbc3D04b^lIvXQSmp0)yv?ZU=Rj z$f*cWP@kS#jmyQu4m}p#``EM&L)NAtVPE##Ibs{Cy#a^P7T-bcY-~N432>O%ZusDb z*eZYh74myIG6BB*N3o)4e-QC%|$4Si`@&vr%o-J`M?0;7V0^Gm~-f*gpb(G_`v5_J&^x-x&pG{b3co zP7VU`NV9ggUIo8sze%PG&$$<)-qMVRV7rQVOq0pN^X|BuPR<<_)e<>Sc)=}HD!i%6 z)JeEhXx(A8;vs52yxesA3(jGO{Hg$6bd75|7~!BhVdRS$2)2t??Kym z59#BbF1(m}d{SlLOv=i43r&itqy( zD!~tE#)BWw$SnMTCg$J=G%!DPnjD8Ey>_23>5W>mRe8{;Zg2aIfD_NQg~+nEf02vI zqp`wMKwa*y5Y*%*X9`p9r1%OKR0%R{vT)8FuY*j(An&DVmwbjq zN)}$7NWqIBF{h#uGcGN;2)ygpeJE8f(g<$dev@Tq5+d+j$04j;!=eXqo9Ia<&C0fR$IxHwY9aUO=FfGMevBTIBO>Y=mQlXXEqzu6FZ%IcdJF zJL^c{iay^n+I(BK+yez|--P*2zvEs6*sSN<3FliTdeY{bJq_kt4{J7@zM_yZQE#=G&@^j1*?|`JU6}+oGf#C}^4n%y)VnD(ez ze-%{w1$Thw&xMbR?f_2~1Nz01esmcvENjP*sR?p8Jje+RGEl3=%7@sBIh()actNYi zSE6+$ViyFfE~XK&mm~PJ(FD(xp8_P5Zs#2dmNeA63e>xqO>(L{2|#?y_r^2;w&%m+ z3*~b`8(e4bj)fqg7>HvwfSoCyQmts+1iC}49VkPmwIjD9qa8;_w-V$|+axK*w3|Gp z-E?ExZ8xT9JC-r&?Vw}YC4Z3jem|dukL_Y~y!m1#?G$GhvS|mx>Hm>Ke#QBE z{+Apw!t(rHZQQ*D+0)$;>902KHr;2wn7>E{-|TPt8+StT!lLG^C+<(Bof|zK9tYuV?DdHx>Sdz6<6i_wQsR`PSXs z;W0YODo?y|cJ|T{1b=0cMNrfV*eRGy*1L_QUCEw&*P^x@(GNdt%89k%B}BdqFBS nrG7E3j`6NuE^|b#Fqk5P* literal 100415 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 WKD7ST=*#FO&)&Jk?Q|PE>HiN{f3-0H diff --git a/models/modelXO/variables/variables.data-00000-of-00001 b/models/modelXO/variables/variables.data-00000-of-00001 index 2e9563134b2bfc46c1be7ea9e474784aae6a790c..225194fcfad4b0ede4afc75be07bd5db3c996a46 100644 GIT binary patch literal 17053 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 literal 32664 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 diff --git a/models/modelXO/variables/variables.index b/models/modelXO/variables/variables.index index 9a46d19d0702615bb935c361ea53d61241ce0853..e39e3a59b78c923549fb26641f0b2cad77cd8be5 100644 GIT binary patch literal 1669 zcmZQzVB=tvV&Y(Akl~Ma_HcFf4)FK%3vqPvagFzP@^WHCR8)F~}2a zSeTMyQM!4R<_&8jdI5dM>Ic0t~slR06){06Lfx2fCZUHIY{r1;QE(N}n z)a1lULK-?i8kSWHT5-wqWtITTD?FtwC$O~rp`gKG`m*axB$ozXPHJLNUS?i;d{JUa zDn5;%V!8)p(boyHJs5ysJ~IOY6Nqu`!NTPrnh``C__S~X10!<*!+IXL7@Oq1d0Tim T4)XAWgz$s#-woX=rS7)@?Rdhn delta 441 zcmZqWy~NJLz`(}AD8$a$ zF%yvH(Rd(adZC{2ys)D1WJ4wmQ67a0&5S^;O%G?fi7Lt?w5lR&{fipup6O zed2GRZX^Aq%*0}#B`U%b?lWrSm~NjIU?8d}fiOXi1E?zph@}-8T7aI4HdV}az6#W8 z4AZK_!>I7$0myd|8gpwV-)GX7WK{SAHZ8knbt2)nM;Fz@>^D2(H~$n9IsA(;!@_%&CgBED=E#LJdstw z?hjly0}wER2=Ow}W;o}-r-d6B7?}$g{; 0.5] - side_best = -1 - side_hof = side_best * -1 + # Initialize values + hof.store(model) + model_hof = hof.sample() - loops_stuck = 0 + # Determine who will play as X and 0 + side_best = [-1, 1][random.random() > 0.5] + side_hof = side_best * -1 for loop in range(loops): print("\n loop: ",loop) - # initialize the agents - agent_best = Agent(modelXO, side_best) + # Initialize the agents + agent_best = Agent(model, side_best) agent_hof = Agent(model_hof, side_hof) - print("__ running diagnostic __") - diagnostic_winner, game_data = run_game(agent_best, agent_hof, 0, training=False) - print("diagnostic winner: {}, our model: {}".format(diagnostic_winner,side_best)) - - if diagnostic_winner != side_best: - loops_stuck += 1 - - for game in range(loop_length): - run_game(agent_best, agent_hof, epsilon, training=True) + for game in range(loop_length): + run_game(agent_best, agent_hof, epsilon, training=True) - print("epsilon: ", epsilon) - epsilon = 0.6 + (epsilon-0.6)/1.1 - else: - print("********** diagnostic passed. resampling **********") + # Run a diagnostic (non-training, no exploration) game to collect data + diagnostic_winner, game_data = run_game(agent_best, agent_hof, 0, training=False) - side_best = [-1, 1][random.random() > 0.5] - side_hof = side_best * -1 - if loops_stuck > 0: - hof.store(modelXO, loop) - model_hof = hof.sample_hof("limit-uniform") + # Switch sides for the next loop + side_best *= -1 + side_hof = side_best * -1 - epsilon = base_epsilon - loops_stuck = 0 + # Update hall of fame and sample from it for the next loop + hof.gate(model) + model_hof = hof.sample("uniform") + # Store data from loop games.append(game_data) end_states.append(diagnostic_winner) victories.append(diagnostic_winner*side_best) - return modelXO, end_states, victories, games + return model, end_states, victories, games if __name__ == "__main__": + # Initialize hall of fame hof = HOF("menagerie") - model, end_states, victories, games = train(hof, 100, 5, epsilon=0.01) - model.save('models/modelXO') + num_loops = 10 + loop_length = 5 + + # Run training and store final model + model, end_states, victories, games = train(hof, num_loops, loop_length, 0.2, Model()) + + print("Training complete.") + print("Saving trained model to models/modelXO and chart to plots folder") + + model.save_to('models/modelXO') - pyplot.subplot(3, 1, 1) + # Create data plots + plt.subplot(3, 1, 1) plot_wins(end_states, 50) - pyplot.subplot(3, 1, 2) + plt.subplot(3, 1, 2) plot_wins(victories, 50, ["Best", "HOF"]) - pyplot.subplot(3, 1, 3) - hof.sample_hist(20) + plt.subplot(3, 1, 3) + hof.sample_histogram(20) - pyplot.show() + plt.show() + plt.savefig("plots/plot{}.png".format(num_loops * loop_length)) ind = 0 while ind != -1: - ind = int(input("Query a game")) + ind = int(input("Query a game: ")) for move in games[ind]: print(move) pass