diff options
| author | tslil <tslil@posteo.de> | 2021-01-09 17:16:13 -0500 |
|---|---|---|
| committer | tslil <tslil@posteo.de> | 2026-08-28 19:37:41 +0100 |
| commit | 81948394f575f682700edee57626f784f6397dcc (patch) | |
| tree | c5e235544655c06a809a2dc94050587144aa15f4 /src/train5.py | |
| parent | 08db5599e3a9ba94b26916a88002361606a98353 (diff) | |
Two inputs to model, stacks and flat counts
Diffstat (limited to 'src/train5.py')
| -rw-r--r-- | src/train5.py | 116 |
1 files changed, 67 insertions, 49 deletions
diff --git a/src/train5.py b/src/train5.py index dd02df7..99ebd68 100644 --- a/src/train5.py +++ b/src/train5.py @@ -1,10 +1,8 @@ import pandas as pd import numpy as np -import tensorflow.keras.losses - -from tensorflow.keras.models import Sequential -from tensorflow.keras.layers import Dropout +from tensorflow.keras.models import Model +from tensorflow.keras.layers import Concatenate from tensorflow.keras.layers import Input from tensorflow.keras.layers import Dense from tensorflow.keras.layers import Convolution2D @@ -13,48 +11,68 @@ from tensorflow.keras.layers import Flatten # 30 10(11) 5 # 27 17 4 -size = 6 -magic = int(size*3/2.0) -shape = (-1, size, size, 8) - -model = Sequential([ - Input(shape[1:]), - Convolution2D(magic, kernel_size=(3, 3), strides=(1, 1), - padding='valid', - activation="relu", use_bias=True), - Flatten(), - Dropout(0.2), - Dense(magic, activation="relu", use_bias=True), - Dense(2, activation="softmax") -]) - -model.compile(loss='categorical_crossentropy', - optimizer='adam', - metrics=['accuracy']) - -model.summary() - -tr_fn = "validation-"+str(size)+".csv" -training_csv = pd.read_csv(tr_fn).head(80000) -training_data = training_csv -training_input = np.array(training_data.iloc[:, :-2]).reshape(shape) -training_outcome = training_data.iloc[:, -2:] - -val_fn = "validation-"+str(size)+".csv" -val_data = pd.read_csv(val_fn).tail(20000) -val_input = np.array(val_data.iloc[:, :-2]).reshape(shape) -val_outcome = val_data.iloc[:, -2:] - -results = [] -reps = 10 -for i in range(0, reps): - print("Iteration ", i) - history = model.fit(training_input, training_outcome, epochs=1, - validation_data=(val_input, val_outcome), - verbose=False) - loss, accuracy = model.evaluate(val_input, val_outcome, verbose=False) - results += [(loss, accuracy)] - -print("\n\n") -for i in range(0, reps): - print("Iteration ", i, ": ", results[i]) +def make_model(size, magic=6): + # 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), + 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 = Model(inputs=[stack_model.input, flats_input], outputs=model) + + model.compile(optimizer='adam', + loss='binary_crossentropy', + # loss='categorical_crossentropy', + # loss='mean_squared_error', + metrics=['accuracy']) + + model.summary() + return model + +def train(size, model, reps): + 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_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_flats_input = np.array(val_data.iloc[:, 0:2]) + val_input = [val_stack_input, val_flats_input] + val_outcome = val_data.iloc[:, -2:] + + 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))] + + print("\n\n") + for i in range(0, reps): + print("Iteration {0}/{1}: {2}".format(i+1, reps, results[i])) + + return model + +# model = train(5, make_model(5), 50) +# print(model.trainable_variables) |
