aboutsummaryrefslogtreecommitdiff
path: root/src/train5.py
diff options
context:
space:
mode:
authortslil clingman <tslil@posteo.de>2021-01-18 11:44:50 -0500
committertslil <tslil@posteo.de>2026-08-28 19:37:41 +0100
commitc1750c0cb93a7b4ba70e1342eaa7c62e659f1dc5 (patch)
tree3c1510d3ba1a01413303c88a583f1da5f54bd751 /src/train5.py
parent28e1df6d45fb04cbc5e25bd079098c9682ac8b0c (diff)
Finally fixed memory order of weights!
Diffstat (limited to 'src/train5.py')
-rw-r--r--src/train5.py47
1 files changed, 32 insertions, 15 deletions
diff --git a/src/train5.py b/src/train5.py
index 5c45564..2fc0d6f 100644
--- a/src/train5.py
+++ b/src/train5.py
@@ -3,7 +3,6 @@ import pandas as pd
import numpy as np
# Output of weights
-import re
from tensorflow import transpose
# Custom activation function
@@ -33,6 +32,16 @@ def clipped_pade_logistic(x):
return clip_by_value(divide(val, k(24.0)), 0.0, 1.0)
+# A cheaper version of tanh, x/6+25*x/(6*(2*x*x+5)),
+# clipped between -1 and 1.
+def clipped_pade_tanh(x):
+ val = add(divide(x, k(6.0)),
+ multiply(k(25.0),
+ divide(x, multiply(k(6.0), add(k(5.0),
+ multiply(k(2.0), square(x)))))))
+ return clip_by_value(val, -1.0, 1.0)
+
+
def make_model(size, magic=[12, 9, 9]):
# Our model for the stacks, a small CNN
stack_shape = (size, size, 6)
@@ -51,6 +60,8 @@ def make_model(size, magic=[12, 9, 9]):
model = Model(inputs=[stack_model.input, flats_input], outputs=model)
model.compile(optimizer='adam',
loss='mean_squared_error',
+ # loss='mean_absolute_error',
+ # loss='mean_absolute_percentage_error',
metrics=['accuracy'])
model.summary()
return model
@@ -75,6 +86,7 @@ def load_data(size):
val_outcome = val_data.iloc[:, -1:]
return [(training_input, training_outcome), (val_input, val_outcome)]
+
def train(size, model, data, iterations=1, epochs=10):
(training_input, training_outcome), (val_input, val_outcome) = data
results = []
@@ -84,7 +96,7 @@ def train(size, model, data, iterations=1, epochs=10):
validation_data=(val_input, val_outcome),
verbose=True)
v_loss, v_accuracy = model.evaluate(val_input, val_outcome,
- verbose=False, batch_size=32)
+ verbose=False, batch_size=16)
t_loss, t_accuracy = model.evaluate(training_input, training_outcome,
verbose=False, batch_size=32)
results += [((v_loss, t_loss), (v_accuracy, t_accuracy))]
@@ -112,18 +124,21 @@ def magic_search(data):
def write_weights(model):
def fix(val):
- string = str(val.tolist())
+ string = str(np.array(val).tolist())
string = string.replace("[", "{").replace("]", "}")
return string
- # Prepare everything in a sane memory order
- conv2d_weights = np.array(transpose(model.trainable_variables[0], perm=[3, 1, 0, 2]))
- conv2d_biases = np.array(model.trainable_variables[1])
- dense1_weights = np.array(transpose(model.trainable_variables[2], perm=[1, 0]))
- dense1_biases = np.array(model.trainable_variables[3])
- dense2_weights = np.array(transpose(model.trainable_variables[4], perm=[1, 0]))
- dense2_biases = np.array(model.trainable_variables[5])
- output_weights = np.array(transpose(model.trainable_variables[6], perm=[1, 0])[0])
- output_bias = np.array(model.trainable_variables[7][0])
+ # Prepare everything in a sane memory order This isn't exactly in
+ # the correct order that tensorflow uses, because memory access
+ # out of order is an eyesore. Compared to tensorflow, the C
+ # implementation has the board reflected about the diagonal.
+ conv2d_weights = transpose(model.trainable_variables[0], perm=[3, 0, 1, 2])
+ conv2d_biases = model.trainable_variables[1]
+ dense1_weights = transpose(model.trainable_variables[2], perm=[1, 0])
+ dense1_biases = model.trainable_variables[3])
+ dense2_weights = transpose(model.trainable_variables[4], perm=[1, 0])
+ dense2_biases = model.trainable_variables[5])
+ output_weights = transpose(model.trainable_variables[6], perm=[1, 0])[0]
+ output_bias = model.trainable_variables[7][0]
# Prepare formatting
names = ["conv2d_weights[KERN_NUM][KERN_SIZE][KERN_SIZE][KERN_CHAN]",
"conv2d_biases[KERN_NUM]",
@@ -146,10 +161,12 @@ def write_weights(model):
data = load_data(5)
-model = make_model(5, [12, 9, 10])
-results = train(5, model, data, iterations=20, epochs=10)
+model = make_model(5, [12, 11, 8])
+results = train(5, model, data, iterations=5, epochs=10)
print("\nScores")
for i in range(len(results)):
- print("Iteration {0}: {1}".format(i+1, results[i]))
+ print("Iteration {0}: {1}".format(i+1, results[i]))
write_weights(model)
+
+# results = magic_search(data)