def test_create_ml_dataset_week_interval(test_dataset):
    model = RadiusVariance(seq_size=1,
                           radius=0,
                           time_interval=TimeInterval.WEEK)
    ml_dataset = model.create_ml_dataset(test_dataset)

    assert ml_dataset.inputs[0] == np.array([[4.]])
def test_create_ml_dataset_empty():
    model = RadiusVariance(seq_size=3, radius=2)
    dataset = DataSet([])
    ml_dataset = model.create_ml_dataset(dataset)

    assert np.array_equal(ml_dataset.inputs[0], np.array([]))
    assert np.array_equal(ml_dataset.inputs[1], np.empty((0, 43)))
    assert np.array_equal(ml_dataset.outputs[0], np.empty((0, 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_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)])
Ejemplo n.º 5
0
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 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_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_create_ml_dataset_radius_affects_length(test_dataset):
    model = RadiusVariance(seq_size=3, radius=3)
    dataset = DataSet(test_dataset)
    ml_dataset = model.create_ml_dataset(dataset)

    assert ml_dataset.inputs[0].shape[0] == 2
def test_create_ml_dataset_correct_length(test_dataset):
    model = RadiusVariance(seq_size=1, radius=1)
    dataset = DataSet(test_dataset)
    ml_dataset = model.create_ml_dataset(dataset)

    assert ml_dataset.inputs[0].shape[0] == 8
def test_create_ml_dataset(test_dataset):
    model = RadiusVariance(seq_size=2, radius=3)
    ml_dataset = model.create_ml_dataset(test_dataset)

    assert np.array_equal(ml_dataset.inputs[0],
                          np.array([[[1], [1]], [[1], [0]], [[0], [4]]]))
def test_get_model():
    model = RadiusVariance()
    model.get_model().summary()