summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/train5.py77
1 files changed, 52 insertions, 25 deletions
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)