Lazily loading mixed sequences using Keras Sequence, focused on multi-task models.
As usual, just download it using pip:
pip install keras_mixed_sequence
First of all let's create a simple single-task model:
from tensorflow.keras.layers import Dense
from tensorflow.keras.models import Sequential
model = Sequential([
Dense(1, activation="relu")
])
model.compile(
optimizer="nadam",
loss="relu"
)
Then we proceed to load or otherwise create the training data. Here there will be listed, in the future, some custom Sequence objects that have been created for the purpose of being used alongside this library.
X = either_a_numpy_array_or_sequence_for_input
y = either_a_numpy_array_or_sequence_for_output
Now we combine the training data using the MixedSequence object.
from keras_mixed_sequence import MixedSequence
sequence = MixedSequence(
X, y,
batch_size=batch_size
)
Finally, we can train the model:
from multiprocessing import cpu_count
model.fit_generator(
sequence,
steps_per_epoch=sequence.steps_per_epoch,
epochs=2,
verbose=0,
use_multiprocessing=True,
workers=cpu_count(),
shuffle=True
)
First of all let's create a simple multi-taks model:
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Dense, Input
inputs = Input(shape=(10,))
output1 = Dense(
units=10,
activation="relu",
name="output1"
)(inputs)
output2 = Dense(
units=10,
activation="relu",
name="output2"
)(inputs)
model = Model(
inputs=inputs,
outputs=[output1, output2],
name="my_model"
)
model.compile(
optimizer="nadam",
loss="MSE"
)
Then we proceed to load or otherwise create the training data. Here there will be listed, in the future, some custom Sequence objects that have been created for the purpose of being used alongside this library.
X = either_a_numpy_array_or_sequence_for_input
y1 = either_a_numpy_array_or_sequence_for_output1
y2 = either_a_numpy_array_or_sequence_for_output2
Now we combine the training data using the MixedSequence object.
from keras_mixed_sequence import MixedSequence
sequence = MixedSequence(
x=X,
y={
"output1": y1,
"output2": y2
},
batch_size=batch_size
)
Finally, we can train the model:
from multiprocessing import cpu_count
model.fit_generator(
sequence,
steps_per_epoch=sequence.steps_per_epoch,
epochs=2,
verbose=0,
use_multiprocessing=True,
workers=cpu_count(),
shuffle=True
)