def run(years=1, year_target=5, epochs=100, epochs_target=500): print(f'Generating {years} year(s) of data...') data_start = time.time() data = create_data(datetime(2020 - years, 1, 1), datetime(2020, 1, 1)) dataset = DataSet(data) print('Data generation done') print(f'Took {time.time() - data_start}s\n') model = RadiusVariance(seq_size=30, radius=15) ml_dataset = model.create_ml_dataset(dataset) print(f'Training for {epochs} epochs...') train_start = time.time() model.get_model().compile(optimizer=Adam(lr=0.001), loss='mse') model.get_model().fit(x=ml_dataset.inputs, y=ml_dataset.outputs, epochs=epochs) print('Training done') train_time = int(time.time() - train_start) print(f'Took {train_time}s\n') total_time = train_time * (year_target / years) * (epochs_target / epochs) print( f'It would take this machine an estimated {int(total_time // 60)}m{int(total_time % 60)}s ' + f'to train {year_target} years of data for {epochs_target} epochs.')
def test_prediction_batch(test_dataset): model = RadiusVariance(seq_size=2, radius=1) ml_dataset = model.create_ml_dataset(test_dataset) model.get_model().compile(optimizer=Adam(lr=0.001), loss='mse') y_hat = model.get_model().predict([x[0:2] for x in ml_dataset.inputs]) assert y_hat.shape == (2, 2)
def test_write_to_disk(): """SRS: MOD-3""" model = RadiusVariance() file_name = str(uuid.uuid4()) + '.h5' model.get_model().save(file_name) assert os.path.isfile(file_name) os.remove(file_name) assert not os.path.isfile(file_name)
def test_prediction(test_dataset): """SRS: MOD-7""" model = RadiusVariance(seq_size=2, radius=1) ml_dataset = model.create_ml_dataset(test_dataset) model.get_model().compile(optimizer=Adam(lr=0.001), loss='mse') y_hat = model.get_model().predict( [x[np.newaxis, 0] for x in ml_dataset.inputs]) assert y_hat.shape == (1, 2)
def test_train_model(test_dataset): """SRS: MOD-2""" model = RadiusVariance(seq_size=2, radius=1) ml_dataset = model.create_ml_dataset(test_dataset) weights = model.get_model().get_weights() model.get_model().compile(optimizer=Adam(lr=0.001), loss='mse') model.get_model().fit(x=ml_dataset.inputs, y=ml_dataset.outputs, epochs=1) new_weights = model.get_model().get_weights() assert not np.all( [np.array_equal(w, new_w) for (w, new_w) in zip(weights, new_weights)])
def train(dataset: DataSet, epochs: int, lr=0.001, valid_split=0.2, output_file='weights.h5'): rv_model = RadiusVariance(seq_size=30, radius=15, time_interval=TimeInterval.WEEK) rv_model.get_model().summary() ml_dataset = rv_model.create_ml_dataset(dataset) train_data, test_data = ml_dataset.split(1 - valid_split) print(len(train_data.inputs[0]), len(test_data.inputs[0])) rv_model.get_model().compile(optimizer=Adam(lr=lr), loss=loss) history = rv_model.get_model().fit(x=train_data.inputs, y=train_data.outputs, validation_data=(test_data.inputs, test_data.outputs), epochs=epochs) rv_model.get_model().save(output_file) return rv_model, train_data, test_data, history
def test_get_model(): model = RadiusVariance() model.get_model().summary()