From 8f5c729a014db65e481d025700930a34358181ef Mon Sep 17 00:00:00 2001 From: tslil Date: Mon, 11 Jan 2021 01:30:37 -0500 Subject: Also this was wrong --- src/train5.py | 77 ++++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 52 insertions(+), 25 deletions(-) (limited to 'src/train5.py') diff --git a/src/train5.py b/src/train5.py index 99ebd68..628b0b6 100644 --- a/src/train5.py +++ b/src/train5.py @@ -1,6 +1,8 @@ +# 30 10(11) 5 # 27 17 4 import pandas as pd import numpy as np +from tensorflow.keras.backend import get_value from tensorflow.keras.models import Model from tensorflow.keras.layers import Concatenate from tensorflow.keras.layers import Input @@ -8,26 +10,23 @@ from tensorflow.keras.layers import Dense from tensorflow.keras.layers import Convolution2D from tensorflow.keras.layers import Flatten -# 30 10(11) 5 -# 27 17 4 -def make_model(size, magic=6): +def make_model(size, magic=[9, 18, 9]): # Our model for the stacks, a small CNN stack_shape = (size, size, 8) stack_input = Input(shape=stack_shape) - stack_model = Convolution2D(magic, kernel_size=(3, 3), strides=(1, 1), + stack_model = Convolution2D(magic[0], kernel_size=(3, 3), strides=(1, 1), padding='valid', activation="relu", use_bias=True)(stack_input) stack_model = Flatten()(stack_model) - # stack_model = Dense(magic, activation="relu", use_bias=True)(stack_model) stack_model = Model(inputs=stack_input, outputs=stack_model) # The overall model flats_input = Input(shape=(2,)) combn_input = Concatenate()([stack_model.output, flats_input]) - model = Dense(magic+2, activation="relu", use_bias=True)(combn_input) - model = Dense(magic, activation="relu", use_bias=True)(model) - model = Dense(2, activation="sigmoid", use_bias=True)(model) + model = Dense(magic[1], activation="relu", use_bias=True)(combn_input) + model = Dense(magic[2], activation="relu", use_bias=True)(model) + model = Dense(2, activation="softmax", use_bias=True)(model) model = Model(inputs=[stack_model.input, flats_input], outputs=model) model.compile(optimizer='adam', @@ -39,40 +38,68 @@ def make_model(size, magic=6): model.summary() return model -def train(size, model, reps): +def train(size, model, data, iterations=1, epochs=10): + (training_input, training_outcome), (val_input, val_outcome) = data + results = [] + for i in range(0, iterations): + print("Iteration {0}/{1}".format(i+1, iterations)) + model.fit(training_input, training_outcome, epochs=epochs, + validation_data=(val_input, val_outcome), + verbose=True) + v_loss, v_accuracy = model.evaluate(val_input, val_outcome, + verbose=False) + t_loss, t_accuracy = model.evaluate(training_input, training_outcome, + verbose=False) + results += [((v_loss, t_loss), (v_accuracy, t_accuracy))] + return (results, model) + + +def load_data(size): + size = 5 shape = (-1, size, size, 8) tr_fn = "training-"+str(size)+".csv" training_csv = pd.read_csv(tr_fn) # .head(80000) training_data = training_csv - training_stack_input = np.array(training_data.iloc[:, 2:-2]).reshape(shape) + training_stack_input = np.array(training_data.iloc[:, 2:-2]).reshape(shape, order='F') training_flats_input = np.array(training_data.iloc[:, 0:2]) training_input = [training_stack_input, training_flats_input] training_outcome = training_data.iloc[:, -2:] val_fn = "validation-"+str(size)+".csv" val_data = pd.read_csv(val_fn).tail(20000) - val_stack_input = np.array(val_data.iloc[:, 2:-2]).reshape(shape) + val_stack_input = np.array(val_data.iloc[:, 2:-2]).reshape(shape, order='F') val_flats_input = np.array(val_data.iloc[:, 0:2]) val_input = [val_stack_input, val_flats_input] val_outcome = val_data.iloc[:, -2:] + return [(training_input, training_outcome), (val_input, val_outcome)] + +def model_size(model): + return sum([np.prod(get_value(w).shape) for w in model.trainable_weights]) + +def magic_search(data): results = [] - for i in range(0, reps): - print("Iteration {0}/{1}".format(i+1, reps)) - model.fit(training_input, training_outcome, epochs=5, - validation_data=(val_input, val_outcome), - verbose=True) - v_loss, v_accuracy = model.evaluate(val_input, val_outcome, verbose=False) - t_loss, t_accuracy = model.evaluate(training_input, training_outcome, - verbose=False) - results += [((v_loss, t_loss), (v_accuracy, t_accuracy))] + for width in range(8, 16): + for dense1 in range(8, 24): + for dense2 in range(6, dense1+1): + m = make_model(5, [width, dense1, dense2]) + if model_size(m) <= 2000: + results += [([width, dense1, dense2], + train(5, m, data, iterations=1, epochs=10))] + print("\nSummary") + for r in results: + print("Parameters {0}: {1}".format(r[0], r[1][-1:][0])) - print("\n\n") - for i in range(0, reps): - print("Iteration {0}/{1}: {2}".format(i+1, reps, results[i])) - return model +data = load_data(5) +model = make_model(5, [12, 9, 8]) +results, model = train(5, model, data, iterations=1, epochs=20) +print("\nScores") +for i in range(len(results)): + print("Iteration {0}: {1}".format(i+1, results[i])) -# model = train(5, make_model(5), 50) +f=open("softmax_weights.txt","w") +f.write(str(model.trainable_variables)) +f.close() # print(model.trainable_variables) -- cgit v1.2.3