Code Monkey home page Code Monkey logo

n-beats's Introduction

NBEATS
Neural basis expansion analysis for interpretable time series forecasting

Tensorflow/Pytorch implementation | Paper | Results

NBeats CI


Outputs of the generic and interpretable layers of NBEATS

Installation

It is possible to install the two backends at the same time.

From PyPI

Install the Tensorflow/Keras backend: pip install nbeats-keras

NBEATS - Keras - Downloads

Install the Pytorch backend: pip install nbeats-pytorch

NBEATS - PyTorch - Downloads

From the sources

Installation is based on a MakeFile.

Command to install N-Beats with Keras: make install-keras

Command to install N-Beats with Pytorch: make install-pytorch

Run on the GPU

This trick is no longer necessary on the recent versions of Tensorflow. To force the utilization of the GPU (with the Keras backend), run: pip uninstall -y tensorflow && pip install tensorflow-gpu.

Example

Here is an example to get familiar with both backends. Note that only the Keras backend supports input_dim>1 at the moment.

import warnings

import numpy as np

from nbeats_keras.model import NBeatsNet as NBeatsKeras
from nbeats_pytorch.model import NBeatsNet as NBeatsPytorch

warnings.filterwarnings(action='ignore', message='Setting attributes')


def main():
    # https://keras.io/layers/recurrent/
    # At the moment only Keras supports input_dim > 1. In the original paper, input_dim=1.
    num_samples, time_steps, input_dim, output_dim = 50_000, 10, 1, 1

    # This example is for both Keras and Pytorch. In practice, choose the one you prefer.
    for BackendType in [NBeatsKeras, NBeatsPytorch]:
        # NOTE: If you choose the Keras backend with input_dim>1, you have 
        # to set the value here too (in the constructor).
        backend = BackendType(
            backcast_length=time_steps, forecast_length=output_dim,
            stack_types=(NBeatsKeras.GENERIC_BLOCK, NBeatsKeras.GENERIC_BLOCK),
            nb_blocks_per_stack=2, thetas_dim=(4, 4), share_weights_in_stack=True,
            hidden_layer_units=64
        )

        # Definition of the objective function and the optimizer.
        backend.compile(loss='mae', optimizer='adam')

        # Definition of the data. The problem to solve is to find f such as | f(x) - y | -> 0.
        # where f = np.mean.
        x = np.random.uniform(size=(num_samples, time_steps, input_dim))
        y = np.mean(x, axis=1, keepdims=True)

        # Split data into training and testing datasets.
        c = num_samples // 10
        x_train, y_train, x_test, y_test = x[c:], y[c:], x[:c], y[:c]
        test_size = len(x_test)

        # Train the model.
        print('Training...')
        backend.fit(x_train, y_train, validation_data=(x_test, y_test), epochs=20, batch_size=128)

        # Save the model for later.
        backend.save('n_beats_model.h5')

        # Predict on the testing set (forecast).
        predictions_forecast = backend.predict(x_test)
        np.testing.assert_equal(predictions_forecast.shape, (test_size, backend.forecast_length, output_dim))

        # Predict on the testing set (backcast).
        predictions_backcast = backend.predict(x_test, return_backcast=True)
        np.testing.assert_equal(predictions_backcast.shape, (test_size, backend.backcast_length, output_dim))

        # Load the model.
        model_2 = BackendType.load('n_beats_model.h5')

        np.testing.assert_almost_equal(predictions_forecast, model_2.predict(x_test))


if __name__ == '__main__':
    main()

Browse the examples for more. It includes Jupyter notebooks.

Jupyter notebook: NBeats.ipynb: make run-jupyter.

Citation

@misc{NBeatsPRemy,
  author = {Philippe Remy},
  title = {N-BEATS: Neural basis expansion analysis for interpretable time series forecasting},
  year = {2020},
  publisher = {GitHub},
  journal = {GitHub repository},
  howpublished = {\url{https://github.com/philipperemy/n-beats}},
}

Contributors

Thank you!

n-beats's People

Contributors

anujonthemove avatar dcyoung avatar dependabot[bot] avatar eljdos avatar lewington-pitsos avatar philipperemy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

n-beats's Issues

Return backcast for Keras model

Is there a method to return the backcast for each stack in nbeats-keras? I am interested in illustrating the interpretability for a model like in the n-beats paper (Fig. 2), but this does not seem straightforward in the Keras implementation.

The forward method of PyTorch model returns both the forecast and backcast, but I am getting consistently much better models using the Keras trainer. I would appreciate any example or instruction you have to access the interpretability features for this implementation.

Thank you!

TypeError: __init__() takes from 4 to 6 positional arguments but 7 were given

I am getting started with n-beats; looks quite interesting, and simply trying to run the included Notebook (NBeats.ipynb) with the milk sample data, but I get the following error when optimization is about to start:

| N-Beats
| --  Stack Generic (#0) (share_weights_in_stack=False)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-59-151a00003124> in <module>
      7                 hidden_layer_units=128,
      8                 share_weights_in_stack=False,
----> 9                 device=device)
     10 optimiser = optim.Adam(net.parameters())

~\Anaconda3\envs\forecast\lib\site-packages\nbeats_pytorch\model.py in __init__(self, device, stack_types, nb_blocks_per_stack, forecast_length, backcast_length, thetas_dims, share_weights_in_stack, hidden_layer_units, nb_harmonics)
     34         print(f'| N-Beats')
     35         for stack_id in range(len(self.stack_types)):
---> 36             self.stacks.append(self.create_stack(stack_id))
     37         self.parameters = nn.ParameterList(self.parameters)
     38         self.to(self.device)

~\Anaconda3\envs\forecast\lib\site-packages\nbeats_pytorch\model.py in create_stack(self, stack_id)
     48             else:
     49                 block = block_init(self.hidden_layer_units, self.thetas_dim[stack_id],
---> 50                                    self.device, self.backcast_length, self.forecast_length, self.nb_harmonics)
     51                 self.parameters.extend(block.parameters())
     52             print(f'     | -- {block}')

TypeError: __init__() takes from 4 to 6 positional arguments but 7 were given

Here is what I have at the moment in Windows:

nbeats-pytorch 1.3.1
torch 1.4.0+cpu
pandas 0.25.3
numpy 1.18.2
python 3.6.7

Something is changed in the base code that perhaps is not updated in the example?

Question on running trainer_pytorch.py

When I run trainer_pytorch.py, I find that the thetas_dim for NBeatsNet.SEASONALITY_BLOCK is always equal to the forecast_length. For example, when forecast_length in the example is set to be 10, the second para in thetas_dims=[2, 8, 3] which is 8, will stay unchanged. It printed that:

| --  Stack Seasonality (#1) (share_weights_in_stack=False)
     | -- SeasonalityBlock(units=1024, thetas_dim=10, backcast_length=50, forecast_length=10, share_thetas=True) at @140649963671224
     | -- SeasonalityBlock(units=1024, thetas_dim=10, backcast_length=50, forecast_length=10, share_thetas=True) at @140649963669992
     | -- SeasonalityBlock(units=1024, thetas_dim=10, backcast_length=50, forecast_length=10, share_thetas=True) at @140649963669432

Analyzing the model.py, I find that in line 142, it uses forecast length to be the thetas_dim.

        else:
            super(SeasonalityBlock, self).__init__(units, forecast_length, device, backcast_length,
                                                   forecast_length, share_thetas=True)

so, is it an error? Thank you!

Normalization Enquiry

Thanks for open-sourcing your work.

I would like to clarify on your normalization procedure here: https://github.com/philipperemy/n-beats/blob/master/data.py#L21:L25

In deducting the min and dividing by the max of the variable x then subsequently splitting x into x and y where y is the target, there seems to be forward-looking of data of y as the normalization would have information contained from the target.

In reality, it's not possible to normalize in this manner as you don't have the data from y part, which is from backcast_length onwards.

When you cycle through the data enough time, the network essentially can memorize the entire targets be in training, validation, or testing if you're using this method of normalization function. Which is why you see the ground truth matching the predictions.

Data Leakage Question

For the four image examples on the README.MD page, it looks as if the X and Y data have been normalized together before training. Is this true?

If so, that would make the application of the model invalidated for any real-world applications where the future values are truly unbounded.

If not, what is the data preparation guideline for this model when bringing your own data?

How to prevent deterministic behaviour

Hi! First, let me thank you for the nice and readable implementation!

I am experimenting with the backcast length parameter (in the paper it is suggested to use 3 to 7 times the forecast length, and then they perform a 180-runs ensemble). However, all my different runs with the same backcast length are producing the exact same predictions, which is odd given that I am not enforcing determinism in any way.

I've already tried to set a different seed on every new run with the torch methods below, but changes nothing.

for run in runs_loop:
    # CPU seed
    torch.manual_seed(np.random.randint(0, 10**8))
    # GPU seed
    if torch.cuda.is_available():
        torch.cuda.manual_seed_all(np.random.randint(0, 10**8))

    model.train()
    ...

I am kind of a newbie to Pytorch, so if anyone has a suggestion to prevent this deterministic behavior (the usual request on StackOverflow is how to enforce it).

how to use/deploy n-beats for real world problems when the algorithm uses teacher forcing?

I have difficulty in understanding the benefit of such time series algorithms which uses teacher forcing i.e. they are using the actual target/ground truth (of previous step) as input to the model. Let's consider, I want to make a model to predict hourly rainfall using temperature, humidity and wind as exogenous variables. If I use N-Beats, it requires me to have precipitation as input feature as well. How can I use/deploy such model because we don't know the target value during prediction. Will the prediction be done with batch_size of one i.e make prediction at one step, then use that prediction as input at the next step? I am sorry if that sounds very basic but I have difficulty in understanding the usefulness of such time-series models.

Multidimensional input fails

Thanks for the great repo.

My impression was that n-beats could handle multidimensional input, but when I try to increase the input_dim in the example to a value greater than 1 the code fails. Is there anything simple that I'm missing to get the code working with multidimensional input?

Failing code example:

import warnings

import numpy as np

from nbeats_pytorch.model import NBeatsNet as NBeatsPytorch

warnings.filterwarnings(action="ignore", message="Setting attributes")

def main():
    num_samples, time_steps, input_dim, output_dim = 50_000, 10, 2, 1

    for BackendType in [NBeatsPytorch]:
        backend = BackendType(
            backcast_length=time_steps, forecast_length=output_dim,
            stack_types=(NBeatsPytorch.GENERIC_BLOCK, NBeatsPytorch.GENERIC_BLOCK),
            nb_blocks_per_stack=2, thetas_dim=(4, 4), share_weights_in_stack=True,
            hidden_layer_units=64
        )

        # Definition of the objective function and the optimizer.
        backend.compile(loss="mae", optimizer="adam")

        # Definition of the data. The problem to solve is to find f such as | f(x) - y | -> 0.
        # where f = np.mean.
        x = np.random.uniform(size=(num_samples, time_steps, input_dim))
        y = np.mean(x, axis=1, keepdims=True)
        print(f"Shape(x,y): {x.shape}, {y.shape}")

        # Split data into training and testing datasets.
        c = num_samples // 10
        x_train, y_train, x_test, y_test = x[c:], y[c:], x[:c], y[:c]
        test_size = len(x_test)

        # Train the model.
        print("Training...")
        backend.fit(x_train, y_train, validation_data=(x_test, y_test), epochs=20, batch_size=128)

        # Save the model for later.
        backend.save("n_beats_model.h5")

        # Predict on the testing set (forecast).
        predictions_forecast = backend.predict(x_test)
        np.testing.assert_equal(predictions_forecast.shape, (test_size, backend.forecast_length, output_dim))

        # Predict on the testing set (backcast).
        predictions_backcast = backend.predict(x_test, return_backcast=True)
        np.testing.assert_equal(predictions_backcast.shape, (test_size, backend.backcast_length, output_dim))

        # Load the model.
        model_2 = BackendType.load("n_beats_model.h5")

        np.testing.assert_almost_equal(predictions_forecast, model_2.predict(x_test))


if __name__ == "__main__":
    main()

Problem in reimplement m4 result in origin parper

I'm trying to reproduce the results for m4 dataset and have done most work, but there still exist some problems, with frequency and lookback increase, the model tend to output large value and smape loss stop at something like 199.02. As the input size is determined by horizon(forcast_length) and lookback:

backcast_length=forecast_length*lookback

I guess the problem result from large input_size, but I have no idea how to fix it. Here is my smape loss

def smape_loss(y_true,y_pred):
    """
    sMAPE loss as defined in "Appendix A" of
    http://www.forecastingprinciples.com/files/pdf/Makridakia-The%20M3%20Competition.pdf
    :param forecast: Forecast values. Shape: batch, time
    :param target: Target values. Shape: batch, time
    :param mask: 0/1 mask. Shape: batch, time
    :return: Loss value
    """
    # mask=tf.where(y_true,1.,0.)
    mask=tf.cast(y_true,tf.bool)
    mask=tf.cast(mask,tf.float32)
    sym_sum= tf.abs(y_true)+tf.abs(y_pred) 
    condition=tf.cast(sym_sum,tf.bool)
    weights=tf.where(condition,1./( sym_sum + 1e-8),0.0)
    return 200 * tnp.nanmean(tf.abs(y_pred - y_true)*weights * mask)
    # return 200 * tnp.nanmean(tf.abs(y_pred - y_true)*weights )

and my model config

net = NBeatsNet(
        # stack_types=(NBeatsNet.GENERIC_BLOCK, NBeatsNet.GENERIC_BLOCK),
        stack_types=(NBeatsNet.TREND_BLOCK, NBeatsNet.SEASONALITY_BLOCK),
        nb_blocks_per_stack=3,
        forecast_length=outsample_size,
        backcast_length=insample_size,
        hidden_layer_units=512,
        thetas_dim=(4,4),
        share_weights_in_stack=True,
        nb_harmonics=1
        )
lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
        initial_learning_rate,
        decay_steps=epoch // 3,
        decay_rate=0.5,
        staircase=True)

net.compile(loss=smape_loss, 
        # optimizer='adam',
        optimizer=tf.keras.optimizers.Adam(
            learning_rate=lr_schedule,
            clipnorm=1.0,
            clipvalue=0.5
        ),
    )

If someone interested I will post the full code here.

Keras import in Google Colab is falling

I have read in another thread that the dependencies might be out of date. Could that be the problem that I am facing while trying to install the package in Google Colab?

This is for pip install.
image

After I kind of managed to install it, I got the following error:
image

Thanks in advance for your help! :)

Creating predictions on new data?

Are there any code snippets on using a trained model to get predictions on new data (where the labels are missing)?
I'm unclear how to apply the model on new samples, where the actual labels/values are missing, given that the existing jupyter-notebook example is on labelled data, and uses it as part of the multiple prediction forecasts?
Thanks!

rnn example - error

Hi @philipperemy !

I hope your well.

I am getting an error on the rnn example

==================================================================================================
Total params: 4,164,880
Trainable params: 4,164,880
Non-trainable params: 0
__________________________________________________________________________________________________
compile_model()
fit()
Traceback (most recent call last):
  File "examples/rnn_example.py", line 126, in <module>
    callbacks=[EvaluateModelCallback()])
  File "/home/andrewcz/tutorial-env1/lib/python3.7/site-packages/nbeats_keras-1.3.0-py3.7.egg/nbeats_keras/model.py", line 163, in wrapper
  File "/home/andrewcz/tutorial-env1/lib/python3.7/site-packages/keras/engine/training.py", line 1154, in fit
    batch_size=batch_size)
  File "/home/andrewcz/tutorial-env1/lib/python3.7/site-packages/keras/engine/training.py", line 579, in _standardize_user_data
    exception_prefix='input')
  File "/home/andrewcz/tutorial-env1/lib/python3.7/site-packages/keras/engine/training_utils.py", line 135, in standardize_input_data
    'with shape ' + str(data_shape))
ValueError: Error when checking input: expected input_variable to have 3 dimensions, but got array with shape (299980, 20)

GenericBlock Module Issues

I believe I have found a couple of issues with the PyTorch implementation of the GenericBlock module.

1. From reading the original paper, I do not think that the $\theta^b$ and $\theta^f$ outputs should have ReLu activations (see here). I know the paper says the FC layers have ReLu non-linearity, but equation (1) in the paper says $\theta^b$ and $\theta^f$ are produced with a Linear function (maybe the FC in Figure 1 is a typo).

tmp
Screen Shot 2021-05-20 at 10 08 41 PM

2. I am almost certain that if the $g^b$ and $g^f$ functions (which produce the backcast and forecast outputs) are implemented using a torch.nn.Linear layer, there should NOT be a bias (see here). The $\theta^b$ and $\theta^f$ vectors are expansion coefficients that are used to scale the learnable $v^b$ and $v^f$ basis vectors.

Screen Shot 2021-05-20 at 10 24 54 PM

If I misunderstood anything, please let me know.

Positional Argument error

Hi ,

when I run the model, it gives me this error

TypeError: init() takes from 4 to 6 positional arguments but 7 were given

image

Add python notebook

Is there any way to put a notebook available online for implementing on any univariate TS data to check performance?

Polynomial basis for backcast

The polynomial basis for backcast and forecast is

ls = np.arange(-backcast_length, forecast_length, 1) / forecast_length 
b_ls = ls[:backcast_length]  
f_ls = ls[backcast_length:]

Thus, for the trend_model, the polynomial for the backcast is evaluated at x < 0. Although the paper does not state what the backcast basis should be, the ElementAI implementation uses polynomials at x>=0 for both backcast and forecast.
As far as I can tell, no transformation on thetas could make those bases equivalent.
Is this a deliberate decision, or a bug?
Edit: I noticed the ElementAI implementation flips the residuals, so I guess this is done here to reflect that without flipping. Did you perhaps get an answer from the authors as to why this is done?

The results are terrible for m4 hourly dataset (still the case now? answer pending).

I failed to reproduce the results for m4 hourly dataset.
But I'm not sure where is the problem, could anyone share some experiences?

Below is my training procedures:

  1. Sampling from each time series by sliding window, and then treat each window as a sample.
sampling
 25     lh = 10
 26     step = lh*horizon
 27     x = [ts for i in range(window_size, len(data)-horizon+1, step) for ts in data.iloc[i-window_size:i].values.T]
 28     y = [ts for i in range(window_size, len(data)-horizon+1, step) for ts in data.iloc[i:i+horizon].values.T]
  1. Setting the hyper-params as described in the paper:
model setting
140     model = NBeatsNet(
141               backcast_length=window_size,
142               forecast_length=horizon,
143               stack_types=[NBeatsNet.GENERIC_BLOCK]*30,
144               nb_blocks_per_stack=1,
145               thetas_dim=[512]*30, 
146               share_weights_in_stack=False,
147               hidden_layer_units=256)
148 
149     def smape(y_true, y_pred):
150         from keras import backend as K
151         from tensorflow.python.ops import math_ops
152         diff = math_ops.abs((y_true - y_pred)) / ((math_ops.abs(y_true)+math_ops.abs(y_pred)) * 0.5)
153         return 200. * K.mean(diff, axis=-1)
154     model.compile_model(loss=smape, learning_rate=1e-5)
  1. After a few epochs, the loss was slowly decreased, but the validation loss was starting to get stuck around 17~18 .
    And the prediction results is much terrible, much lower than the ground truth:
prediction results

result

full training log
Train on 28980 samples, validate on 16974 samples
Epoch 1/500
28980/28980 [==============================] - 53s 2ms/step - loss: 290.8493 - val_loss: 93.1703
Epoch 2/500
28980/28980 [==============================] - 25s 864us/step - loss: 69.6600 - val_loss: 44.7100
Epoch 3/500
28980/28980 [==============================] - 26s 881us/step - loss: 34.7569 - val_loss: 25.9111
Epoch 4/500
28980/28980 [==============================] - 26s 886us/step - loss: 24.4621 - val_loss: 20.8666
Epoch 5/500
28980/28980 [==============================] - 25s 874us/step - loss: 21.0698 - val_loss: 19.7058
Epoch 6/500
28980/28980 [==============================] - 25s 869us/step - loss: 19.9413 - val_loss: 19.3630
Epoch 7/500
28980/28980 [==============================] - 25s 869us/step - loss: 19.3729 - val_loss: 19.0966
Epoch 8/500
28980/28980 [==============================] - 25s 870us/step - loss: 18.9313 - val_loss: 18.8899
Epoch 9/500
28980/28980 [==============================] - 25s 864us/step - loss: 18.7883 - val_loss: 18.7547
Epoch 10/500
28980/28980 [==============================] - 25s 874us/step - loss: 18.6587 - val_loss: 20.0988
Epoch 11/500
28980/28980 [==============================] - 25s 870us/step - loss: 19.1662 - val_loss: 19.7842
Epoch 12/500
28980/28980 [==============================] - 26s 912us/step - loss: 18.7313 - val_loss: 19.4954
Epoch 13/500
28980/28980 [==============================] - 29s 1ms/step - loss: 18.4945 - val_loss: 18.5956
Epoch 14/500
28980/28980 [==============================] - 26s 896us/step - loss: 18.2553 - val_loss: 18.4833
Epoch 15/500
28980/28980 [==============================] - 26s 894us/step - loss: 18.4096 - val_loss: 19.1993
Epoch 16/500
28980/28980 [==============================] - 25s 858us/step - loss: 18.3940 - val_loss: 19.6327
Epoch 17/500
28980/28980 [==============================] - 26s 885us/step - loss: 18.0338 - val_loss: 18.4501
Epoch 18/500
28980/28980 [==============================] - 26s 899us/step - loss: 17.7694 - val_loss: 18.5048
Epoch 19/500
28980/28980 [==============================] - 28s 961us/step - loss: 17.9102 - val_loss: 18.6778
Epoch 20/500
28980/28980 [==============================] - 25s 870us/step - loss: 17.7565 - val_loss: 18.6434
Epoch 21/500
28980/28980 [==============================] - 26s 888us/step - loss: 17.7028 - val_loss: 19.2511
Epoch 22/500
28980/28980 [==============================] - 25s 856us/step - loss: 17.6456 - val_loss: 18.4190
Epoch 23/500
28980/28980 [==============================] - 25s 868us/step - loss: 18.2240 - val_loss: 20.5889
Epoch 24/500
28980/28980 [==============================] - 26s 896us/step - loss: 18.1400 - val_loss: 18.7231
Epoch 25/500
28980/28980 [==============================] - 25s 854us/step - loss: 17.9668 - val_loss: 18.6770
Epoch 26/500
28980/28980 [==============================] - 25s 870us/step - loss: 17.5749 - val_loss: 18.9966
Epoch 27/500
28980/28980 [==============================] - 26s 883us/step - loss: 18.1900 - val_loss: 19.0115
Epoch 28/500
28980/28980 [==============================] - 26s 897us/step - loss: 17.7269 - val_loss: 18.7525
Epoch 29/500
28980/28980 [==============================] - 25s 857us/step - loss: 17.6592 - val_loss: 18.4695
Epoch 30/500
28980/28980 [==============================] - 25s 855us/step - loss: 17.5752 - val_loss: 18.8279
Epoch 31/500
28980/28980 [==============================] - 25s 854us/step - loss: 17.4283 - val_loss: 18.4831
Epoch 32/500
28980/28980 [==============================] - 25s 855us/step - loss: 17.9928 - val_loss: 19.1919
Epoch 33/500
28980/28980 [==============================] - 25s 859us/step - loss: 17.7294 - val_loss: 18.6598
Epoch 34/500
28980/28980 [==============================] - 25s 862us/step - loss: 17.2858 - val_loss: 18.4306
Epoch 35/500
28980/28980 [==============================] - 25s 861us/step - loss: 17.1699 - val_loss: 18.5101
Epoch 36/500
28980/28980 [==============================] - 25s 860us/step - loss: 17.1928 - val_loss: 18.5126
Epoch 37/500
28980/28980 [==============================] - 25s 858us/step - loss: 17.1298 - val_loss: 19.0194
Epoch 38/500
28980/28980 [==============================] - 25s 861us/step - loss: 17.2599 - val_loss: 19.4636
Epoch 39/500
28980/28980 [==============================] - 25s 863us/step - loss: 17.7022 - val_loss: 18.8970
Epoch 40/500
28980/28980 [==============================] - 25s 863us/step - loss: 17.5718 - val_loss: 19.3160
Epoch 41/500
28980/28980 [==============================] - 25s 866us/step - loss: 17.2508 - val_loss: 18.2568
Epoch 42/500
28980/28980 [==============================] - 25s 866us/step - loss: 17.0167 - val_loss: 18.3947
Epoch 43/500
28980/28980 [==============================] - 25s 866us/step - loss: 16.9115 - val_loss: 18.2317
Epoch 44/500
28980/28980 [==============================] - 25s 861us/step - loss: 16.8473 - val_loss: 18.7825
Epoch 45/500
28980/28980 [==============================] - 25s 867us/step - loss: 16.9936 - val_loss: 18.1059
Epoch 46/500
28980/28980 [==============================] - 25s 862us/step - loss: 16.9068 - val_loss: 18.1938
Epoch 47/500
28980/28980 [==============================] - 25s 870us/step - loss: 16.8587 - val_loss: 18.2533
Epoch 48/500
28980/28980 [==============================] - 25s 865us/step - loss: 16.8790 - val_loss: 18.7083
Epoch 49/500
28980/28980 [==============================] - 25s 864us/step - loss: 16.9827 - val_loss: 18.2183
Epoch 50/500
28980/28980 [==============================] - 25s 866us/step - loss: 17.2098 - val_loss: 18.7636
Epoch 51/500
28980/28980 [==============================] - 25s 866us/step - loss: 17.2471 - val_loss: 18.2911
Epoch 52/500
28980/28980 [==============================] - 25s 867us/step - loss: 16.9363 - val_loss: 18.1349
Epoch 53/500
28980/28980 [==============================] - 25s 871us/step - loss: 16.8605 - val_loss: 18.3715
Epoch 54/500
28980/28980 [==============================] - 25s 870us/step - loss: 16.8884 - val_loss: 18.2134
Epoch 55/500
28980/28980 [==============================] - 25s 871us/step - loss: 16.6994 - val_loss: 18.1552
Epoch 56/500
28980/28980 [==============================] - 25s 873us/step - loss: 16.8498 - val_loss: 18.3429
Epoch 57/500
28980/28980 [==============================] - 25s 869us/step - loss: 16.8679 - val_loss: 18.0922
Epoch 58/500
28980/28980 [==============================] - 25s 864us/step - loss: 16.7477 - val_loss: 18.0476
Epoch 59/500
28980/28980 [==============================] - 25s 862us/step - loss: 16.6325 - val_loss: 19.1592
Epoch 60/500
28980/28980 [==============================] - 25s 866us/step - loss: 17.6144 - val_loss: 18.2439
Epoch 61/500
28980/28980 [==============================] - 25s 872us/step - loss: 17.0909 - val_loss: 18.1339
Epoch 62/500
28980/28980 [==============================] - 25s 868us/step - loss: 17.0838 - val_loss: 18.2780
Epoch 63/500
28980/28980 [==============================] - 25s 873us/step - loss: 16.8545 - val_loss: 18.2750
Epoch 64/500
28980/28980 [==============================] - 25s 867us/step - loss: 16.5677 - val_loss: 17.9482
Epoch 65/500
28980/28980 [==============================] - 25s 871us/step - loss: 16.5990 - val_loss: 18.2805
Epoch 66/500
28980/28980 [==============================] - 25s 871us/step - loss: 16.5391 - val_loss: 18.1168
Epoch 67/500
28980/28980 [==============================] - 25s 872us/step - loss: 16.6009 - val_loss: 18.0438
Epoch 68/500
28980/28980 [==============================] - 25s 872us/step - loss: 16.3369 - val_loss: 18.0773
Epoch 69/500
28980/28980 [==============================] - 25s 877us/step - loss: 16.4833 - val_loss: 18.7437
Epoch 70/500
28980/28980 [==============================] - 25s 873us/step - loss: 16.5934 - val_loss: 18.8879
Epoch 71/500
28980/28980 [==============================] - 25s 873us/step - loss: 16.7256 - val_loss: 18.0552
Epoch 72/500
28980/28980 [==============================] - 25s 872us/step - loss: 16.6449 - val_loss: 18.8085
Epoch 73/500
28980/28980 [==============================] - 25s 872us/step - loss: 16.4034 - val_loss: 18.7299
Epoch 74/500
28980/28980 [==============================] - 25s 876us/step - loss: 16.4718 - val_loss: 18.0467
Epoch 75/500
28980/28980 [==============================] - 25s 871us/step - loss: 16.4484 - val_loss: 18.2476
Epoch 76/500
28980/28980 [==============================] - 25s 876us/step - loss: 16.3981 - val_loss: 17.9387
Epoch 77/500
28980/28980 [==============================] - 25s 875us/step - loss: 16.8326 - val_loss: 18.5264
Epoch 78/500
28980/28980 [==============================] - 25s 871us/step - loss: 16.3726 - val_loss: 18.2145
Epoch 79/500
28980/28980 [==============================] - 25s 875us/step - loss: 16.3128 - val_loss: 18.3155
Epoch 80/500
28980/28980 [==============================] - 25s 873us/step - loss: 16.6455 - val_loss: 19.3435
Epoch 81/500
28980/28980 [==============================] - 25s 874us/step - loss: 16.7367 - val_loss: 18.3951
Epoch 82/500
28980/28980 [==============================] - 25s 876us/step - loss: 16.1787 - val_loss: 18.0889
Epoch 83/500
28980/28980 [==============================] - 26s 880us/step - loss: 16.4294 - val_loss: 18.1364
Epoch 84/500
28980/28980 [==============================] - 26s 882us/step - loss: 16.9014 - val_loss: 19.0907
Epoch 85/500
28980/28980 [==============================] - 25s 877us/step - loss: 16.7475 - val_loss: 18.5693
Epoch 86/500
28980/28980 [==============================] - 25s 874us/step - loss: 16.2954 - val_loss: 18.0340
Epoch 87/500
28980/28980 [==============================] - 25s 872us/step - loss: 16.2238 - val_loss: 18.0659
Epoch 88/500
28980/28980 [==============================] - 26s 880us/step - loss: 16.1291 - val_loss: 18.0140
Epoch 89/500
28980/28980 [==============================] - 25s 874us/step - loss: 16.0607 - val_loss: 18.5092
Epoch 90/500
28980/28980 [==============================] - 25s 873us/step - loss: 16.3061 - val_loss: 18.6763
Epoch 91/500
28980/28980 [==============================] - 25s 876us/step - loss: 16.0242 - val_loss: 17.9631
Epoch 92/500
28980/28980 [==============================] - 26s 881us/step - loss: 16.1912 - val_loss: 18.1580
Epoch 93/500
28980/28980 [==============================] - 25s 874us/step - loss: 16.1528 - val_loss: 17.9511
Epoch 94/500
28980/28980 [==============================] - 25s 880us/step - loss: 16.3236 - val_loss: 17.9455
Epoch 95/500
28980/28980 [==============================] - 25s 875us/step - loss: 16.2754 - val_loss: 18.3851
Epoch 96/500
28980/28980 [==============================] - 25s 876us/step - loss: 16.6475 - val_loss: 18.0434
Epoch 97/500
28980/28980 [==============================] - 25s 877us/step - loss: 16.8318 - val_loss: 18.8021
Epoch 98/500
28980/28980 [==============================] - 25s 875us/step - loss: 16.8570 - val_loss: 19.3507
Epoch 99/500
28980/28980 [==============================] - 25s 872us/step - loss: 16.2506 - val_loss: 17.9755
Epoch 100/500
28980/28980 [==============================] - 25s 873us/step - loss: 15.9581 - val_loss: 18.1785
Epoch 101/500
28980/28980 [==============================] - 25s 877us/step - loss: 16.0507 - val_loss: 17.9180
Epoch 102/500
28980/28980 [==============================] - 25s 874us/step - loss: 15.9166 - val_loss: 18.2366
Epoch 103/500
28980/28980 [==============================] - 25s 876us/step - loss: 16.1555 - val_loss: 18.6822
Epoch 104/500
28980/28980 [==============================] - 25s 876us/step - loss: 16.3462 - val_loss: 18.3168
Epoch 105/500
28980/28980 [==============================] - 25s 878us/step - loss: 16.3327 - val_loss: 17.9709
Epoch 106/500
28980/28980 [==============================] - 25s 876us/step - loss: 16.2215 - val_loss: 19.2577
Epoch 107/500
28980/28980 [==============================] - 25s 875us/step - loss: 17.0302 - val_loss: 20.3910
Epoch 108/500
28980/28980 [==============================] - 25s 878us/step - loss: 16.8994 - val_loss: 18.1760
Epoch 109/500
28980/28980 [==============================] - 26s 882us/step - loss: 16.1408 - val_loss: 18.0039
Epoch 110/500
28980/28980 [==============================] - 25s 879us/step - loss: 15.7090 - val_loss: 17.8619
Epoch 111/500
28980/28980 [==============================] - 25s 876us/step - loss: 15.7931 - val_loss: 17.8848
Epoch 112/500
28980/28980 [==============================] - 25s 879us/step - loss: 16.2790 - val_loss: 18.0171
Epoch 113/500
28980/28980 [==============================] - 25s 875us/step - loss: 15.7574 - val_loss: 17.9642
Epoch 114/500
28980/28980 [==============================] - 25s 878us/step - loss: 15.6897 - val_loss: 17.7899
Epoch 115/500
28980/28980 [==============================] - 25s 870us/step - loss: 15.7572 - val_loss: 18.0478
Epoch 116/500
28980/28980 [==============================] - 25s 875us/step - loss: 16.9707 - val_loss: 18.0658
Epoch 117/500
28980/28980 [==============================] - 25s 874us/step - loss: 15.9262 - val_loss: 18.2357
Epoch 118/500
28980/28980 [==============================] - 25s 879us/step - loss: 15.7939 - val_loss: 17.8761
Epoch 119/500
28980/28980 [==============================] - 25s 879us/step - loss: 15.8962 - val_loss: 19.5606
Epoch 120/500
28980/28980 [==============================] - 25s 876us/step - loss: 16.2069 - val_loss: 17.8800
Epoch 121/500
28980/28980 [==============================] - 25s 879us/step - loss: 15.7623 - val_loss: 18.0587
Epoch 122/500
28980/28980 [==============================] - 25s 877us/step - loss: 15.5575 - val_loss: 17.9596
Epoch 123/500
28980/28980 [==============================] - 25s 875us/step - loss: 15.6876 - val_loss: 17.9436
Epoch 124/500
28980/28980 [==============================] - 25s 877us/step - loss: 15.8766 - val_loss: 18.1289
Epoch 125/500
28980/28980 [==============================] - 25s 878us/step - loss: 15.8321 - val_loss: 18.1697
Epoch 126/500
28980/28980 [==============================] - 25s 879us/step - loss: 15.9706 - val_loss: 18.0509
Epoch 127/500
28980/28980 [==============================] - 26s 885us/step - loss: 15.9928 - val_loss: 17.8489
Epoch 128/500
28980/28980 [==============================] - 25s 878us/step - loss: 15.6633 - val_loss: 17.9469
Epoch 129/500
28980/28980 [==============================] - 25s 880us/step - loss: 15.6667 - val_loss: 18.1526
Epoch 130/500
28980/28980 [==============================] - 25s 878us/step - loss: 15.7456 - val_loss: 17.9859
Epoch 131/500
28980/28980 [==============================] - 26s 883us/step - loss: 15.8962 - val_loss: 18.7028
Epoch 132/500
28980/28980 [==============================] - 25s 877us/step - loss: 16.4922 - val_loss: 19.0277
Epoch 133/500
28980/28980 [==============================] - 25s 878us/step - loss: 15.9658 - val_loss: 18.5837
Epoch 134/500
28980/28980 [==============================] - 25s 879us/step - loss: 16.1959 - val_loss: 17.9434
Epoch 135/500
28980/28980 [==============================] - 25s 877us/step - loss: 15.7505 - val_loss: 17.7855
Epoch 136/500
28980/28980 [==============================] - 25s 879us/step - loss: 15.7127 - val_loss: 17.9695
Epoch 137/500
28980/28980 [==============================] - 25s 879us/step - loss: 15.4199 - val_loss: 17.8316
Epoch 138/500
28980/28980 [==============================] - 25s 876us/step - loss: 15.5373 - val_loss: 18.5140
Epoch 139/500
28980/28980 [==============================] - 25s 879us/step - loss: 16.0279 - val_loss: 18.5727
Epoch 140/500
28980/28980 [==============================] - 25s 873us/step - loss: 15.5935 - val_loss: 17.7774
Epoch 141/500
28980/28980 [==============================] - 25s 869us/step - loss: 15.3217 - val_loss: 18.5645
Epoch 142/500
28980/28980 [==============================] - 25s 875us/step - loss: 16.5579 - val_loss: 18.6321
Epoch 143/500
28980/28980 [==============================] - 25s 875us/step - loss: 15.8038 - val_loss: 18.0228
Epoch 144/500
28980/28980 [==============================] - 25s 877us/step - loss: 15.7416 - val_loss: 17.8815
Epoch 145/500
28980/28980 [==============================] - 25s 876us/step - loss: 15.3891 - val_loss: 17.8720
Epoch 146/500
28980/28980 [==============================] - 25s 878us/step - loss: 15.4576 - val_loss: 18.0187
Epoch 147/500
28980/28980 [==============================] - 25s 878us/step - loss: 15.3756 - val_loss: 17.8535
Epoch 148/500
28980/28980 [==============================] - 25s 875us/step - loss: 15.4064 - val_loss: 18.0242
Epoch 149/500
28980/28980 [==============================] - 25s 876us/step - loss: 15.5529 - val_loss: 17.9187
Epoch 150/500
28980/28980 [==============================] - 25s 878us/step - loss: 15.4909 - val_loss: 17.9391
Epoch 151/500
28980/28980 [==============================] - 25s 875us/step - loss: 15.4619 - val_loss: 17.8731
Epoch 152/500
28980/28980 [==============================] - 25s 875us/step - loss: 15.3299 - val_loss: 17.8177
Epoch 153/500
28980/28980 [==============================] - 25s 876us/step - loss: 15.1815 - val_loss: 17.7601
Epoch 154/500
28980/28980 [==============================] - 25s 872us/step - loss: 15.2761 - val_loss: 18.5971
Epoch 155/500
28980/28980 [==============================] - 25s 871us/step - loss: 16.2112 - val_loss: 18.4832
Epoch 156/500
28980/28980 [==============================] - 25s 873us/step - loss: 16.0129 - val_loss: 17.8605
Epoch 157/500
28980/28980 [==============================] - 25s 873us/step - loss: 15.5915 - val_loss: 18.1068
Epoch 158/500
28980/28980 [==============================] - 25s 873us/step - loss: 15.1271 - val_loss: 18.2995
Epoch 159/500
28980/28980 [==============================] - 25s 878us/step - loss: 15.2501 - val_loss: 17.9440
Epoch 160/500
28980/28980 [==============================] - 25s 878us/step - loss: 15.7454 - val_loss: 18.2429
Epoch 161/500
28980/28980 [==============================] - 25s 879us/step - loss: 15.4124 - val_loss: 18.2386
Epoch 162/500
28980/28980 [==============================] - 26s 880us/step - loss: 15.1821 - val_loss: 17.8117
Epoch 163/500
28980/28980 [==============================] - 25s 877us/step - loss: 15.1991 - val_loss: 18.1858
Epoch 164/500
28980/28980 [==============================] - 25s 878us/step - loss: 15.6640 - val_loss: 19.1717
Epoch 165/500
28980/28980 [==============================] - 25s 877us/step - loss: 15.2360 - val_loss: 17.7191
Epoch 166/500
28980/28980 [==============================] - 25s 873us/step - loss: 15.1898 - val_loss: 17.7787
Epoch 167/500
28980/28980 [==============================] - 25s 878us/step - loss: 15.2726 - val_loss: 17.8723
Epoch 168/500
28980/28980 [==============================] - 26s 880us/step - loss: 15.9269 - val_loss: 17.7591
Epoch 169/500
28980/28980 [==============================] - 25s 879us/step - loss: 16.1479 - val_loss: 18.4028
Epoch 170/500
28980/28980 [==============================] - 25s 877us/step - loss: 15.3518 - val_loss: 17.8243
Epoch 171/500
28980/28980 [==============================] - 25s 877us/step - loss: 15.2481 - val_loss: 17.7662
Epoch 172/500
28980/28980 [==============================] - 25s 877us/step - loss: 15.0295 - val_loss: 17.9164
Epoch 173/500
28980/28980 [==============================] - 26s 883us/step - loss: 15.0947 - val_loss: 17.7278
Epoch 174/500
28980/28980 [==============================] - 25s 879us/step - loss: 15.0335 - val_loss: 17.7947
Epoch 175/500
28980/28980 [==============================] - 26s 889us/step - loss: 15.3526 - val_loss: 18.6102
Epoch 176/500
28980/28980 [==============================] - 26s 883us/step - loss: 16.1174 - val_loss: 18.2760
Epoch 177/500
28980/28980 [==============================] - 25s 877us/step - loss: 15.0034 - val_loss: 19.1213
Epoch 178/500
28980/28980 [==============================] - 26s 880us/step - loss: 15.1331 - val_loss: 17.7874
Epoch 179/500
28980/28980 [==============================] - 25s 880us/step - loss: 14.9275 - val_loss: 18.3079
Epoch 180/500
28980/28980 [==============================] - 25s 878us/step - loss: 15.8335 - val_loss: 18.5644
Epoch 181/500
28980/28980 [==============================] - 26s 882us/step - loss: 15.8028 - val_loss: 18.9330
Epoch 182/500
28980/28980 [==============================] - 25s 878us/step - loss: 15.9088 - val_loss: 18.1705
Epoch 183/500
28980/28980 [==============================] - 25s 880us/step - loss: 15.3564 - val_loss: 18.3668
Epoch 184/500
28980/28980 [==============================] - 25s 878us/step - loss: 16.1709 - val_loss: 19.2262
Epoch 185/500
28980/28980 [==============================] - 25s 877us/step - loss: 15.4174 - val_loss: 18.2073
Epoch 186/500
28980/28980 [==============================] - 26s 883us/step - loss: 15.1431 - val_loss: 17.8498
Epoch 187/500
28980/28980 [==============================] - 25s 878us/step - loss: 15.3385 - val_loss: 19.5575
Epoch 188/500
28980/28980 [==============================] - 25s 877us/step - loss: 15.7463 - val_loss: 19.5784
Epoch 189/500
28980/28980 [==============================] - 25s 871us/step - loss: 16.0464 - val_loss: 18.9490
Epoch 190/500
28980/28980 [==============================] - 26s 886us/step - loss: 15.8596 - val_loss: 17.9390
Epoch 191/500
28980/28980 [==============================] - 25s 872us/step - loss: 15.4935 - val_loss: 17.9879
Epoch 192/500
28980/28980 [==============================] - 25s 875us/step - loss: 15.7344 - val_loss: 17.7087
Epoch 193/500
28980/28980 [==============================] - 26s 882us/step - loss: 15.0944 - val_loss: 18.0348
Epoch 194/500
28980/28980 [==============================] - 26s 881us/step - loss: 14.9956 - val_loss: 17.8099
Epoch 195/500
28980/28980 [==============================] - 26s 883us/step - loss: 15.2141 - val_loss: 19.0346
Epoch 196/500
28980/28980 [==============================] - 25s 878us/step - loss: 15.5683 - val_loss: 17.7228
Epoch 197/500
28980/28980 [==============================] - 26s 880us/step - loss: 15.0192 - val_loss: 20.0131
Epoch 198/500
28980/28980 [==============================] - 26s 884us/step - loss: 15.9237 - val_loss: 17.7790
Epoch 199/500
28980/28980 [==============================] - 26s 886us/step - loss: 14.8450 - val_loss: 17.8069
Epoch 200/500
28980/28980 [==============================] - 26s 883us/step - loss: 14.8579 - val_loss: 18.2154
Epoch 201/500
28980/28980 [==============================] - 26s 881us/step - loss: 14.8294 - val_loss: 17.8917
Epoch 202/500
28980/28980 [==============================] - 25s 877us/step - loss: 14.7903 - val_loss: 17.6820
Epoch 203/500
28980/28980 [==============================] - 25s 871us/step - loss: 14.8746 - val_loss: 17.7497
Epoch 204/500
28980/28980 [==============================] - 25s 877us/step - loss: 14.6989 - val_loss: 17.8308
Epoch 205/500
28980/28980 [==============================] - 25s 871us/step - loss: 14.8940 - val_loss: 17.8300
Epoch 206/500
28980/28980 [==============================] - 25s 876us/step - loss: 14.8261 - val_loss: 17.7849
Epoch 207/500
28980/28980 [==============================] - 25s 874us/step - loss: 14.7913 - val_loss: 17.8242
Epoch 208/500
28980/28980 [==============================] - 25s 880us/step - loss: 14.6638 - val_loss: 17.7846
Epoch 209/500
28980/28980 [==============================] - 26s 883us/step - loss: 14.7282 - val_loss: 18.1763
Epoch 210/500
28980/28980 [==============================] - 25s 877us/step - loss: 14.8384 - val_loss: 18.5417
Epoch 211/500
28980/28980 [==============================] - 25s 876us/step - loss: 14.8919 - val_loss: 17.7840
Epoch 212/500
28980/28980 [==============================] - 25s 873us/step - loss: 14.6990 - val_loss: 17.7125
Epoch 213/500
28980/28980 [==============================] - 25s 878us/step - loss: 14.6835 - val_loss: 17.8429
Epoch 214/500
28980/28980 [==============================] - 25s 878us/step - loss: 15.1896 - val_loss: 18.1378
Epoch 215/500
28980/28980 [==============================] - 25s 876us/step - loss: 15.0109 - val_loss: 18.0715
Epoch 216/500
28980/28980 [==============================] - 26s 881us/step - loss: 14.6193 - val_loss: 17.9460
Epoch 217/500
28980/28980 [==============================] - 27s 915us/step - loss: 14.7012 - val_loss: 17.7195
Epoch 218/500
28980/28980 [==============================] - 28s 950us/step - loss: 14.5013 - val_loss: 18.1905
Epoch 219/500
28980/28980 [==============================] - 30s 1ms/step - loss: 14.8112 - val_loss: 17.6699
Epoch 220/500
28980/28980 [==============================] - 27s 933us/step - loss: 14.6444 - val_loss: 17.8412
Epoch 221/500
28980/28980 [==============================] - 27s 928us/step - loss: 14.5981 - val_loss: 18.0769
Epoch 222/500
28980/28980 [==============================] - 29s 984us/step - loss: 14.7053 - val_loss: 17.7494
Epoch 223/500
28980/28980 [==============================] - 27s 942us/step - loss: 14.7455 - val_loss: 18.0379
Epoch 224/500
28980/28980 [==============================] - 28s 960us/step - loss: 15.9990 - val_loss: 18.4295
Epoch 225/500
28980/28980 [==============================] - 29s 993us/step - loss: 15.1248 - val_loss: 17.9626
Epoch 226/500
28980/28980 [==============================] - 28s 951us/step - loss: 14.5324 - val_loss: 17.7837
Epoch 227/500
28980/28980 [==============================] - 27s 930us/step - loss: 14.4955 - val_loss: 18.8074
Epoch 228/500
28980/28980 [==============================] - 27s 933us/step - loss: 15.6699 - val_loss: 19.2865
Epoch 229/500
28980/28980 [==============================] - 27s 933us/step - loss: 15.2814 - val_loss: 17.7216
Epoch 230/500
28980/28980 [==============================] - 27s 940us/step - loss: 15.0892 - val_loss: 20.4492
Epoch 231/500
28980/28980 [==============================] - 27s 916us/step - loss: 15.1957 - val_loss: 17.9086
Epoch 232/500
28980/28980 [==============================] - 27s 921us/step - loss: 15.3428 - val_loss: 18.3888
Epoch 233/500
28980/28980 [==============================] - 27s 915us/step - loss: 15.0616 - val_loss: 18.2651
Epoch 234/500
28980/28980 [==============================] - 27s 946us/step - loss: 14.7394 - val_loss: 17.9504
Epoch 235/500
28980/28980 [==============================] - 27s 922us/step - loss: 14.5234 - val_loss: 17.7875
Epoch 236/500
28980/28980 [==============================] - 27s 924us/step - loss: 14.3927 - val_loss: 17.8715
Epoch 237/500
28980/28980 [==============================] - 26s 914us/step - loss: 14.5128 - val_loss: 17.8030
Epoch 238/500
28980/28980 [==============================] - 28s 955us/step - loss: 14.6013 - val_loss: 17.7553
Epoch 239/500
28980/28980 [==============================] - 27s 929us/step - loss: 14.4573 - val_loss: 17.7417
Epoch 240/500
28980/28980 [==============================] - 26s 911us/step - loss: 15.2072 - val_loss: 18.4149
Epoch 241/500
28980/28980 [==============================] - 27s 919us/step - loss: 16.0202 - val_loss: 17.8290
Epoch 242/500
28980/28980 [==============================] - 26s 901us/step - loss: 15.1448 - val_loss: 18.7778
Epoch 243/500
28980/28980 [==============================] - 26s 913us/step - loss: 15.5775 - val_loss: 18.3861
Epoch 244/500
28980/28980 [==============================] - 27s 940us/step - loss: 14.5338 - val_loss: 18.0066
Epoch 245/500
28980/28980 [==============================] - 27s 933us/step - loss: 14.3935 - val_loss: 17.9169
Epoch 246/500
28980/28980 [==============================] - 27s 917us/step - loss: 14.3907 - val_loss: 17.8148
Epoch 247/500
28980/28980 [==============================] - 26s 913us/step - loss: 14.3852 - val_loss: 17.6759
Epoch 248/500
28980/28980 [==============================] - 26s 903us/step - loss: 14.2819 - val_loss: 17.9597
Epoch 249/500
28980/28980 [==============================] - 26s 896us/step - loss: 14.3571 - val_loss: 17.8163
Epoch 250/500
28980/28980 [==============================] - 27s 942us/step - loss: 14.4225 - val_loss: 18.2651
Epoch 251/500
28980/28980 [==============================] - 28s 970us/step - loss: 15.0028 - val_loss: 18.3955
Epoch 252/500
28980/28980 [==============================] - 26s 909us/step - loss: 15.3146 - val_loss: 18.0087
Epoch 253/500
28980/28980 [==============================] - 27s 915us/step - loss: 14.3180 - val_loss: 17.7084
Epoch 254/500
28980/28980 [==============================] - 26s 914us/step - loss: 14.3275 - val_loss: 17.7869
Epoch 255/500
28980/28980 [==============================] - 28s 974us/step - loss: 14.2250 - val_loss: 18.4524
Epoch 256/500
28980/28980 [==============================] - 28s 955us/step - loss: 14.5777 - val_loss: 17.8170
Epoch 257/500
28980/28980 [==============================] - 27s 927us/step - loss: 14.5327 - val_loss: 20.0827
Epoch 258/500
28980/28980 [==============================] - 26s 914us/step - loss: 15.3800 - val_loss: 18.0974
Epoch 259/500
28980/28980 [==============================] - 27s 936us/step - loss: 14.4420 - val_loss: 17.7147
Epoch 260/500
28980/28980 [==============================] - 30s 1ms/step - loss: 14.4367 - val_loss: 17.7919
Epoch 261/500
28980/28980 [==============================] - 26s 905us/step - loss: 14.2894 - val_loss: 17.9352
Epoch 262/500
28980/28980 [==============================] - 26s 912us/step - loss: 14.3909 - val_loss: 18.0957
Epoch 263/500
28980/28980 [==============================] - 27s 917us/step - loss: 15.0673 - val_loss: 18.7292
Epoch 264/500
28980/28980 [==============================] - 26s 910us/step - loss: 15.3448 - val_loss: 19.0810
Epoch 265/500
28980/28980 [==============================] - 26s 909us/step - loss: 14.8420 - val_loss: 17.9212
Epoch 266/500
28980/28980 [==============================] - 27s 933us/step - loss: 14.2136 - val_loss: 17.8454
Epoch 267/500
28980/28980 [==============================] - 27s 921us/step - loss: 14.2496 - val_loss: 18.1489
Epoch 268/500
28980/28980 [==============================] - 26s 910us/step - loss: 14.3134 - val_loss: 17.8977
Epoch 269/500
28980/28980 [==============================] - 26s 911us/step - loss: 14.2469 - val_loss: 17.9206
Epoch 270/500
28980/28980 [==============================] - 26s 909us/step - loss: 14.1963 - val_loss: 19.0163
Epoch 271/500
28980/28980 [==============================] - 28s 968us/step - loss: 14.5334 - val_loss: 17.9854
Epoch 272/500
28980/28980 [==============================] - 30s 1ms/step - loss: 14.3104 - val_loss: 17.8623
Epoch 273/500
28980/28980 [==============================] - 27s 919us/step - loss: 14.4609 - val_loss: 18.1626
Epoch 274/500
28980/28980 [==============================] - 26s 908us/step - loss: 14.7233 - val_loss: 18.0967
Epoch 275/500
28980/28980 [==============================] - 27s 919us/step - loss: 14.8395 - val_loss: 18.6658
Epoch 276/500
28980/28980 [==============================] - 28s 958us/step - loss: 15.0832 - val_loss: 17.7040
Epoch 277/500
28980/28980 [==============================] - 28s 951us/step - loss: 14.4367 - val_loss: 17.8020
Epoch 278/500
28980/28980 [==============================] - 30s 1ms/step - loss: 14.5544 - val_loss: 18.1528
Epoch 279/500
28980/28980 [==============================] - 28s 971us/step - loss: 14.1213 - val_loss: 18.0817
Epoch 280/500
28980/28980 [==============================] - 28s 967us/step - loss: 14.9917 - val_loss: 17.7820
Epoch 281/500
28980/28980 [==============================] - 28s 962us/step - loss: 14.1239 - val_loss: 17.6770
Epoch 282/500
28980/28980 [==============================] - 27s 920us/step - loss: 14.0611 - val_loss: 18.0333
Epoch 283/500
28980/28980 [==============================] - 28s 952us/step - loss: 14.2804 - val_loss: 17.7000
Epoch 284/500
28980/28980 [==============================] - 28s 957us/step - loss: 14.1106 - val_loss: 18.6022
Epoch 285/500
28980/28980 [==============================] - 27s 944us/step - loss: 14.5858 - val_loss: 17.8006
Epoch 286/500
28980/28980 [==============================] - 26s 890us/step - loss: 14.1484 - val_loss: 17.6849
Epoch 287/500
28980/28980 [==============================] - 25s 880us/step - loss: 14.0130 - val_loss: 17.6640
Epoch 288/500
28980/28980 [==============================] - 25s 871us/step - loss: 14.0304 - val_loss: 18.0171
Epoch 289/500
28980/28980 [==============================] - 26s 888us/step - loss: 14.3959 - val_loss: 19.5232
Epoch 290/500
28980/28980 [==============================] - 25s 877us/step - loss: 14.9242 - val_loss: 17.7252
Epoch 291/500
28980/28980 [==============================] - 25s 878us/step - loss: 14.1526 - val_loss: 18.2039
Epoch 292/500
28980/28980 [==============================] - 25s 879us/step - loss: 14.4378 - val_loss: 18.0948
Epoch 293/500
28980/28980 [==============================] - 25s 877us/step - loss: 14.1384 - val_loss: 19.0826
Epoch 294/500
28980/28980 [==============================] - 25s 875us/step - loss: 14.9932 - val_loss: 19.8120
Epoch 295/500
28980/28980 [==============================] - 25s 880us/step - loss: 14.4041 - val_loss: 17.8290
Epoch 296/500
28980/28980 [==============================] - 25s 878us/step - loss: 14.1074 - val_loss: 17.8000
Epoch 297/500
28980/28980 [==============================] - 26s 882us/step - loss: 13.9583 - val_loss: 18.1469
Epoch 298/500
28980/28980 [==============================] - 25s 879us/step - loss: 14.0039 - val_loss: 17.8288
Epoch 299/500
28980/28980 [==============================] - 25s 879us/step - loss: 13.9735 - val_loss: 18.4330
Epoch 300/500
28980/28980 [==============================] - 26s 880us/step - loss: 14.1697 - val_loss: 18.9184
Epoch 301/500
28980/28980 [==============================] - 25s 877us/step - loss: 14.1785 - val_loss: 17.8378
Epoch 302/500
28980/28980 [==============================] - 25s 876us/step - loss: 14.6268 - val_loss: 19.2334
Epoch 303/500
28980/28980 [==============================] - 25s 878us/step - loss: 14.3853 - val_loss: 18.7985
Epoch 304/500
28980/28980 [==============================] - 26s 880us/step - loss: 14.7833 - val_loss: 19.8526
Epoch 305/500
28980/28980 [==============================] - 25s 876us/step - loss: 15.1316 - val_loss: 17.8928
Epoch 306/500
28980/28980 [==============================] - 25s 878us/step - loss: 14.0832 - val_loss: 17.9829
Epoch 307/500
28980/28980 [==============================] - 26s 884us/step - loss: 13.7211 - val_loss: 17.7558
Epoch 308/500
28980/28980 [==============================] - 26s 882us/step - loss: 14.4211 - val_loss: 17.8675
Epoch 309/500
28980/28980 [==============================] - 25s 876us/step - loss: 14.1708 - val_loss: 18.0506
Epoch 310/500
28980/28980 [==============================] - 25s 879us/step - loss: 13.7861 - val_loss: 17.7478
Epoch 311/500
28980/28980 [==============================] - 25s 877us/step - loss: 14.0569 - val_loss: 17.8467
Epoch 312/500
28980/28980 [==============================] - 26s 881us/step - loss: 13.8321 - val_loss: 18.0406
Epoch 313/500
28980/28980 [==============================] - 25s 879us/step - loss: 13.9539 - val_loss: 17.8952
Epoch 314/500
28980/28980 [==============================] - 25s 878us/step - loss: 14.0644 - val_loss: 17.8086
Epoch 315/500
28980/28980 [==============================] - 25s 879us/step - loss: 13.7417 - val_loss: 17.5902
Epoch 316/500
28980/28980 [==============================] - 25s 872us/step - loss: 14.0140 - val_loss: 17.8176
Epoch 317/500
28980/28980 [==============================] - 26s 881us/step - loss: 14.1390 - val_loss: 17.8498
Epoch 318/500
28980/28980 [==============================] - 26s 883us/step - loss: 15.0125 - val_loss: 17.7312
Epoch 319/500
28980/28980 [==============================] - 25s 876us/step - loss: 14.4045 - val_loss: 18.9033
Epoch 320/500
28980/28980 [==============================] - 25s 880us/step - loss: 14.6873 - val_loss: 19.2985
Epoch 321/500
28980/28980 [==============================] - 25s 879us/step - loss: 14.6859 - val_loss: 18.6507
Epoch 322/500
28980/28980 [==============================] - 26s 883us/step - loss: 13.8602 - val_loss: 17.6606
Epoch 323/500
28980/28980 [==============================] - 26s 884us/step - loss: 13.6841 - val_loss: 17.7827
Epoch 324/500
28980/28980 [==============================] - 26s 885us/step - loss: 13.8066 - val_loss: 17.8618
Epoch 325/500
28980/28980 [==============================] - 25s 879us/step - loss: 13.8556 - val_loss: 17.9621
Epoch 326/500
28980/28980 [==============================] - 26s 881us/step - loss: 13.9357 - val_loss: 17.7831
Epoch 327/500
28980/28980 [==============================] - 26s 883us/step - loss: 13.5910 - val_loss: 17.9612
Epoch 328/500
28980/28980 [==============================] - 26s 883us/step - loss: 13.6290 - val_loss: 17.9340
Epoch 329/500
28980/28980 [==============================] - 26s 881us/step - loss: 13.6322 - val_loss: 18.0428
Epoch 330/500
28980/28980 [==============================] - 25s 855us/step - loss: 14.3046 - val_loss: 17.7070
Epoch 331/500
28980/28980 [==============================] - 24s 841us/step - loss: 13.7519 - val_loss: 17.8331
Epoch 332/500
28980/28980 [==============================] - 24s 835us/step - loss: 13.7414 - val_loss: 17.7213
Epoch 333/500
28980/28980 [==============================] - 24s 840us/step - loss: 13.7914 - val_loss: 17.6743
Epoch 334/500
28980/28980 [==============================] - 24s 837us/step - loss: 13.8370 - val_loss: 17.6817
Epoch 335/500
28980/28980 [==============================] - 24s 839us/step - loss: 13.5714 - val_loss: 17.7180
Epoch 336/500
28980/28980 [==============================] - 24s 840us/step - loss: 13.4716 - val_loss: 17.9200
Epoch 337/500
28980/28980 [==============================] - 24s 835us/step - loss: 14.3933 - val_loss: 20.0449
Epoch 338/500
28980/28980 [==============================] - 24s 836us/step - loss: 15.0771 - val_loss: 18.6873
Epoch 339/500
28980/28980 [==============================] - 24s 837us/step - loss: 13.8369 - val_loss: 17.8271
Epoch 340/500
28980/28980 [==============================] - 24s 837us/step - loss: 13.9021 - val_loss: 17.9160
Epoch 341/500
28980/28980 [==============================] - 24s 841us/step - loss: 13.8387 - val_loss: 17.8141
Epoch 342/500
28980/28980 [==============================] - 24s 845us/step - loss: 13.9612 - val_loss: 17.7228
Epoch 343/500
28980/28980 [==============================] - 25s 848us/step - loss: 13.5894 - val_loss: 18.0783
Epoch 344/500
28980/28980 [==============================] - 25s 847us/step - loss: 13.5236 - val_loss: 17.8390
Epoch 345/500
28980/28980 [==============================] - 25s 850us/step - loss: 13.5598 - val_loss: 17.8534
Epoch 346/500
28980/28980 [==============================] - 25s 850us/step - loss: 13.4963 - val_loss: 17.8100
Epoch 347/500
28980/28980 [==============================] - 25s 852us/step - loss: 13.4459 - val_loss: 17.6684
Epoch 348/500
28980/28980 [==============================] - 25s 870us/step - loss: 13.4179 - val_loss: 17.9117
Epoch 349/500
28980/28980 [==============================] - 27s 915us/step - loss: 13.6741 - val_loss: 17.7538
Epoch 350/500
28980/28980 [==============================] - 25s 872us/step - loss: 13.8488 - val_loss: 17.7464
Epoch 351/500
28980/28980 [==============================] - 25s 862us/step - loss: 13.5763 - val_loss: 17.7536
Epoch 352/500
28980/28980 [==============================] - 25s 863us/step - loss: 13.5970 - val_loss: 17.8716
Epoch 353/500
28980/28980 [==============================] - 25s 871us/step - loss: 13.5203 - val_loss: 17.7098
Epoch 354/500
28980/28980 [==============================] - 25s 865us/step - loss: 13.8312 - val_loss: 17.8022
Epoch 355/500
28980/28980 [==============================] - 25s 863us/step - loss: 13.5675 - val_loss: 18.2455
Epoch 356/500
28980/28980 [==============================] - 25s 863us/step - loss: 14.5369 - val_loss: 18.1906
Epoch 357/500
28980/28980 [==============================] - 25s 864us/step - loss: 13.8253 - val_loss: 18.5972
Epoch 358/500
28980/28980 [==============================] - 25s 865us/step - loss: 13.7917 - val_loss: 17.7996
Epoch 359/500
28980/28980 [==============================] - 25s 871us/step - loss: 13.4942 - val_loss: 17.7933
Epoch 360/500
28980/28980 [==============================] - 25s 871us/step - loss: 13.7305 - val_loss: 18.0121
Epoch 361/500
28980/28980 [==============================] - 25s 870us/step - loss: 14.3386 - val_loss: 18.0003
Epoch 362/500
28980/28980 [==============================] - 25s 872us/step - loss: 14.0206 - val_loss: 17.7231
Epoch 363/500
28980/28980 [==============================] - 25s 875us/step - loss: 13.8279 - val_loss: 18.2150
Epoch 364/500
28980/28980 [==============================] - 25s 874us/step - loss: 13.5276 - val_loss: 18.8590
Epoch 365/500
28980/28980 [==============================] - 25s 868us/step - loss: 14.3311 - val_loss: 18.7023
Epoch 366/500
28980/28980 [==============================] - 25s 873us/step - loss: 14.5628 - val_loss: 18.0412
Epoch 367/500
28980/28980 [==============================] - 26s 880us/step - loss: 14.3408 - val_loss: 18.0022
Epoch 368/500
28980/28980 [==============================] - 26s 880us/step - loss: 13.5706 - val_loss: 18.4721
Epoch 369/500
28980/28980 [==============================] - 25s 879us/step - loss: 13.6251 - val_loss: 18.0648
Epoch 370/500
28980/28980 [==============================] - 25s 878us/step - loss: 13.6344 - val_loss: 17.8252
Epoch 371/500
28980/28980 [==============================] - 25s 878us/step - loss: 13.5747 - val_loss: 17.7615
Epoch 372/500
28980/28980 [==============================] - 25s 875us/step - loss: 13.6878 - val_loss: 17.8973
Epoch 373/500
28980/28980 [==============================] - 25s 876us/step - loss: 13.4423 - val_loss: 18.0624
Epoch 374/500
28980/28980 [==============================] - 25s 877us/step - loss: 13.4241 - val_loss: 17.8366
Epoch 375/500
28980/28980 [==============================] - 25s 879us/step - loss: 13.3923 - val_loss: 17.7594
Epoch 376/500
28980/28980 [==============================] - 25s 877us/step - loss: 13.2686 - val_loss: 17.6922
Epoch 377/500
28980/28980 [==============================] - 25s 879us/step - loss: 13.2888 - val_loss: 18.0920
Epoch 378/500
28980/28980 [==============================] - 25s 877us/step - loss: 14.1980 - val_loss: 17.7228
Epoch 379/500
28980/28980 [==============================] - 26s 880us/step - loss: 14.6036 - val_loss: 21.1507
Epoch 380/500
28980/28980 [==============================] - 26s 883us/step - loss: 14.4857 - val_loss: 18.3232
Epoch 381/500
28980/28980 [==============================] - 26s 882us/step - loss: 13.4513 - val_loss: 17.8973
Epoch 382/500
28980/28980 [==============================] - 26s 883us/step - loss: 15.5323 - val_loss: 25.2124
Epoch 383/500
28980/28980 [==============================] - 26s 887us/step - loss: 15.1767 - val_loss: 17.8299
Epoch 384/500
28980/28980 [==============================] - 26s 885us/step - loss: 13.3279 - val_loss: 18.1214
Epoch 385/500
28980/28980 [==============================] - 26s 883us/step - loss: 13.2584 - val_loss: 17.7708
Epoch 386/500
28980/28980 [==============================] - 26s 883us/step - loss: 13.3799 - val_loss: 17.8352
Epoch 387/500
28980/28980 [==============================] - 26s 886us/step - loss: 13.1917 - val_loss: 17.6891
Epoch 388/500
28980/28980 [==============================] - 26s 886us/step - loss: 13.1681 - val_loss: 17.6843
Epoch 389/500
28980/28980 [==============================] - 26s 882us/step - loss: 13.0989 - val_loss: 18.6135
Epoch 390/500
28980/28980 [==============================] - 26s 883us/step - loss: 13.4596 - val_loss: 18.3941
Epoch 391/500
28980/28980 [==============================] - 26s 887us/step - loss: 13.4700 - val_loss: 18.0703
Epoch 392/500
28980/28980 [==============================] - 26s 887us/step - loss: 14.2205 - val_loss: 17.7152
Epoch 393/500
28980/28980 [==============================] - 26s 882us/step - loss: 13.4448 - val_loss: 17.8500
Epoch 394/500
28980/28980 [==============================] - 26s 885us/step - loss: 13.3302 - val_loss: 18.0429
Epoch 395/500
28980/28980 [==============================] - 26s 886us/step - loss: 13.2115 - val_loss: 18.0050
Epoch 396/500
28980/28980 [==============================] - 26s 888us/step - loss: 13.6017 - val_loss: 18.7105
Epoch 397/500
28980/28980 [==============================] - 26s 888us/step - loss: 13.1852 - val_loss: 17.7058
Epoch 398/500
28980/28980 [==============================] - 26s 887us/step - loss: 13.4323 - val_loss: 19.3941
Epoch 399/500
28980/28980 [==============================] - 26s 889us/step - loss: 14.2184 - val_loss: 17.8595
Epoch 400/500
28980/28980 [==============================] - 26s 887us/step - loss: 13.2255 - val_loss: 18.1405
Epoch 401/500
28980/28980 [==============================] - 26s 890us/step - loss: 14.2218 - val_loss: 20.0204
Epoch 402/500
28980/28980 [==============================] - 26s 888us/step - loss: 14.4437 - val_loss: 18.0154
Epoch 403/500
28980/28980 [==============================] - 26s 890us/step - loss: 13.3457 - val_loss: 17.7624
Epoch 404/500
28980/28980 [==============================] - 26s 888us/step - loss: 13.2385 - val_loss: 19.2223
Epoch 405/500
28980/28980 [==============================] - 26s 888us/step - loss: 13.9492 - val_loss: 18.2523
Epoch 406/500
28980/28980 [==============================] - 26s 889us/step - loss: 13.1668 - val_loss: 17.8220
Epoch 407/500
28980/28980 [==============================] - 26s 890us/step - loss: 13.3076 - val_loss: 18.9877
Epoch 408/500
28980/28980 [==============================] - 26s 889us/step - loss: 13.6488 - val_loss: 17.7789
Epoch 409/500
28980/28980 [==============================] - 26s 888us/step - loss: 13.1554 - val_loss: 17.9926
Epoch 410/500
28980/28980 [==============================] - 26s 887us/step - loss: 13.0880 - val_loss: 17.8323
Epoch 411/500
28980/28980 [==============================] - 26s 892us/step - loss: 12.9908 - val_loss: 17.7113
Epoch 412/500
28980/28980 [==============================] - 26s 889us/step - loss: 12.9841 - val_loss: 17.8832
Epoch 413/500
28980/28980 [==============================] - 26s 893us/step - loss: 13.1278 - val_loss: 17.7782
Epoch 414/500
28980/28980 [==============================] - 26s 890us/step - loss: 13.7134 - val_loss: 18.4029
Epoch 415/500
28980/28980 [==============================] - 26s 888us/step - loss: 13.2513 - val_loss: 17.8861
Epoch 416/500
28980/28980 [==============================] - 26s 893us/step - loss: 13.3393 - val_loss: 17.7990
Epoch 417/500
28980/28980 [==============================] - 26s 893us/step - loss: 13.0122 - val_loss: 17.7479
Epoch 418/500
28980/28980 [==============================] - 26s 892us/step - loss: 13.0275 - val_loss: 17.9747
Epoch 419/500
28980/28980 [==============================] - 26s 891us/step - loss: 13.0452 - val_loss: 18.1570
Epoch 420/500
28980/28980 [==============================] - 26s 889us/step - loss: 13.3429 - val_loss: 19.3194
Epoch 421/500
28980/28980 [==============================] - 26s 889us/step - loss: 13.1115 - val_loss: 17.8859
Epoch 422/500
28980/28980 [==============================] - 26s 891us/step - loss: 12.9128 - val_loss: 18.6886
Epoch 423/500
28980/28980 [==============================] - 26s 893us/step - loss: 13.2396 - val_loss: 18.0232
Epoch 424/500
28980/28980 [==============================] - 26s 894us/step - loss: 13.0820 - val_loss: 18.4142
Epoch 425/500
28980/28980 [==============================] - 26s 891us/step - loss: 14.0563 - val_loss: 18.0711
Epoch 426/500
28980/28980 [==============================] - 26s 896us/step - loss: 12.8931 - val_loss: 17.9076
Epoch 427/500
28980/28980 [==============================] - 26s 892us/step - loss: 13.0126 - val_loss: 18.2145
Epoch 428/500
28980/28980 [==============================] - 26s 895us/step - loss: 13.8223 - val_loss: 18.3134
Epoch 429/500
28980/28980 [==============================] - 26s 893us/step - loss: 13.1147 - val_loss: 17.7507
Epoch 430/500
28980/28980 [==============================] - 26s 889us/step - loss: 12.9219 - val_loss: 17.7707
Epoch 431/500
28980/28980 [==============================] - 26s 894us/step - loss: 13.1287 - val_loss: 18.0393
Epoch 432/500
28980/28980 [==============================] - 26s 891us/step - loss: 12.8642 - val_loss: 17.9433
Epoch 433/500
28980/28980 [==============================] - 26s 893us/step - loss: 13.0341 - val_loss: 17.9332
Epoch 434/500
28980/28980 [==============================] - 26s 890us/step - loss: 12.8886 - val_loss: 17.9520
Epoch 435/500
28980/28980 [==============================] - 26s 893us/step - loss: 12.9808 - val_loss: 17.9589
Epoch 436/500
28980/28980 [==============================] - 26s 890us/step - loss: 12.7755 - val_loss: 17.7173
Epoch 437/500
28980/28980 [==============================] - 26s 895us/step - loss: 12.8384 - val_loss: 18.1186
Epoch 438/500
28980/28980 [==============================] - 26s 892us/step - loss: 13.6907 - val_loss: 19.1280
Epoch 439/500
28980/28980 [==============================] - 26s 894us/step - loss: 14.2655 - val_loss: 19.0117
Epoch 440/500
28980/28980 [==============================] - 26s 891us/step - loss: 13.4450 - val_loss: 17.9265
Epoch 441/500
28980/28980 [==============================] - 26s 891us/step - loss: 12.8321 - val_loss: 18.1554
Epoch 442/500
28980/28980 [==============================] - 26s 891us/step - loss: 13.2408 - val_loss: 18.2578
Epoch 443/500
28980/28980 [==============================] - 26s 890us/step - loss: 13.0461 - val_loss: 17.8549
Epoch 444/500
28980/28980 [==============================] - 26s 892us/step - loss: 13.8581 - val_loss: 20.1468
Epoch 445/500
28980/28980 [==============================] - 26s 894us/step - loss: 13.0502 - val_loss: 17.8305
Epoch 446/500
28980/28980 [==============================] - 26s 894us/step - loss: 13.6074 - val_loss: 17.8360
Epoch 447/500
28980/28980 [==============================] - 26s 892us/step - loss: 13.4759 - val_loss: 17.8746
Epoch 448/500
28980/28980 [==============================] - 26s 897us/step - loss: 12.8595 - val_loss: 17.7726
Epoch 449/500
28980/28980 [==============================] - 26s 895us/step - loss: 12.9110 - val_loss: 17.9648
Epoch 450/500
28980/28980 [==============================] - 26s 892us/step - loss: 12.9015 - val_loss: 17.7962
Epoch 451/500
28980/28980 [==============================] - 26s 896us/step - loss: 12.8628 - val_loss: 17.8359
Epoch 452/500
28980/28980 [==============================] - 26s 896us/step - loss: 12.7295 - val_loss: 17.8511
Epoch 453/500
28980/28980 [==============================] - 26s 896us/step - loss: 13.0028 - val_loss: 18.7041
Epoch 454/500
28980/28980 [==============================] - 26s 891us/step - loss: 13.2029 - val_loss: 17.8979
Epoch 455/500
28980/28980 [==============================] - 26s 893us/step - loss: 12.7504 - val_loss: 18.5702
Epoch 456/500
28980/28980 [==============================] - 26s 889us/step - loss: 12.9300 - val_loss: 18.2275
Epoch 457/500
28980/28980 [==============================] - 26s 893us/step - loss: 13.0526 - val_loss: 18.1111
Epoch 458/500
28980/28980 [==============================] - 26s 890us/step - loss: 12.8400 - val_loss: 17.7376
Epoch 459/500
28980/28980 [==============================] - 26s 890us/step - loss: 12.7164 - val_loss: 17.8302
Epoch 460/500
28980/28980 [==============================] - 26s 893us/step - loss: 12.6589 - val_loss: 17.8182
Epoch 461/500
28980/28980 [==============================] - 26s 898us/step - loss: 12.5661 - val_loss: 18.2923
Epoch 462/500
28980/28980 [==============================] - 26s 894us/step - loss: 12.6964 - val_loss: 18.4645
Epoch 463/500
28980/28980 [==============================] - 26s 895us/step - loss: 12.9030 - val_loss: 17.8753
Epoch 464/500
28980/28980 [==============================] - 26s 895us/step - loss: 12.7278 - val_loss: 18.5978
Epoch 465/500
28980/28980 [==============================] - 26s 892us/step - loss: 12.8376 - val_loss: 17.8131
Epoch 466/500
28980/28980 [==============================] - 26s 895us/step - loss: 13.1034 - val_loss: 18.0637
Epoch 467/500
28980/28980 [==============================] - 26s 897us/step - loss: 13.7772 - val_loss: 20.0165
Epoch 468/500
28980/28980 [==============================] - 26s 894us/step - loss: 13.9755 - val_loss: 20.7305
Epoch 469/500
28980/28980 [==============================] - 26s 897us/step - loss: 14.4215 - val_loss: 18.1158
Epoch 470/500
28980/28980 [==============================] - 26s 893us/step - loss: 13.5313 - val_loss: 18.4969
Epoch 471/500
28980/28980 [==============================] - 26s 898us/step - loss: 13.2393 - val_loss: 18.2816
Epoch 472/500
28980/28980 [==============================] - 26s 893us/step - loss: 13.6004 - val_loss: 18.9898
Epoch 473/500
28980/28980 [==============================] - 26s 892us/step - loss: 13.3750 - val_loss: 17.8248
Epoch 474/500
28980/28980 [==============================] - 26s 892us/step - loss: 12.5617 - val_loss: 17.7102
Epoch 475/500
28980/28980 [==============================] - 26s 893us/step - loss: 12.5682 - val_loss: 17.7950
Epoch 476/500
28980/28980 [==============================] - 26s 897us/step - loss: 12.6888 - val_loss: 18.0098
Epoch 477/500
28980/28980 [==============================] - 26s 898us/step - loss: 12.5494 - val_loss: 18.0195
Epoch 478/500
28980/28980 [==============================] - 26s 892us/step - loss: 12.6061 - val_loss: 17.9285
Epoch 479/500
28980/28980 [==============================] - 26s 895us/step - loss: 12.8442 - val_loss: 18.3434
Epoch 480/500
28980/28980 [==============================] - 26s 895us/step - loss: 13.4371 - val_loss: 18.3581
Epoch 481/500
28980/28980 [==============================] - 26s 893us/step - loss: 13.0566 - val_loss: 18.2353
Epoch 482/500
28980/28980 [==============================] - 26s 887us/step - loss: 12.5950 - val_loss: 18.8697
Epoch 483/500
28980/28980 [==============================] - 26s 897us/step - loss: 12.5152 - val_loss: 17.9697
Epoch 484/500
28980/28980 [==============================] - 26s 896us/step - loss: 12.8081 - val_loss: 17.8816
Epoch 485/500
28980/28980 [==============================] - 26s 892us/step - loss: 12.5794 - val_loss: 17.9077
Epoch 486/500
28980/28980 [==============================] - 26s 895us/step - loss: 12.5888 - val_loss: 18.1360
Epoch 487/500
28980/28980 [==============================] - 26s 893us/step - loss: 12.8371 - val_loss: 17.8966
Epoch 488/500
28980/28980 [==============================] - 26s 894us/step - loss: 12.4363 - val_loss: 17.9723
Epoch 489/500
28980/28980 [==============================] - 26s 895us/step - loss: 12.6611 - val_loss: 18.3529
Epoch 490/500
28980/28980 [==============================] - 26s 895us/step - loss: 13.5002 - val_loss: 18.7100
Epoch 491/500
28980/28980 [==============================] - 26s 898us/step - loss: 12.6923 - val_loss: 18.7075
Epoch 492/500
28980/28980 [==============================] - 26s 891us/step - loss: 12.7650 - val_loss: 18.5169
Epoch 493/500
28980/28980 [==============================] - 26s 895us/step - loss: 13.2575 - val_loss: 18.4541
Epoch 494/500
28980/28980 [==============================] - 26s 896us/step - loss: 12.7281 - val_loss: 17.8814
Epoch 495/500
28980/28980 [==============================] - 26s 900us/step - loss: 12.4158 - val_loss: 17.9786
Epoch 496/500
28980/28980 [==============================] - 26s 897us/step - loss: 12.5746 - val_loss: 17.8243
Epoch 497/500
28980/28980 [==============================] - 26s 900us/step - loss: 12.6771 - val_loss: 18.0970
Epoch 498/500
28980/28980 [==============================] - 26s 893us/step - loss: 12.6453 - val_loss: 18.0879
Epoch 499/500
28980/28980 [==============================] - 26s 897us/step - loss: 12.4915 - val_loss: 17.8543
Epoch 500/500
28980/28980 [==============================] - 26s 897us/step - loss: 12.3564 - val_loss: 17.9233

a question about milk examples

in the data_generator code:

def data_generator(x_full, y_full, bs):
    def split(arr, size):
        arrays = []
        while len(arr) > size:
            slice_ = arr[:size]
            arrays.append(slice_)
            arr = arr[size:]
        arrays.append(arr)
        return arrays
    while True:
        for rr in split((x_full, y_full), bs):
            yield rr

the parameters of function ’split‘ is ’(arr, size)‘, but the actual is split((x_full, y_full), bs),

the (x_full, y_full) and arr is the same thing?

while len(arr) > size is always false, because arr=(x_full, y_full), len(arr)=2, but batch_size is at least 10。
this means the examples always use full data to train model, not the batch data to train model

Is torchvision really a requirement?

I am having issues installing for Windows based on a requirement for torchvision.

In the setup.py file, the following requirements are listed:

    INSTALL_REQUIRES.extend([
        'torch',
        'torchvision'
    ])

But I don't find any usage of torchvision in the code. Is this really a needed requirement?

No module named 'nbeats_keras'

I downloaded the requirement library pip install nbeats-keras, but when I tried to import it, this error appeared
No module named 'nbeats_keras'.

Any help with this issue?
Thanks

Loading batches incorrectly in the example

It looks like in the data_generator() function of example, the while loop is never executed since len((x_full, y_full)) = 2 < batch_size. So for every iteration you are taking the whole dataset as your batch.

Trend coefficients in pytorch implementation

I'm not able to match the trend coefficients used here with those in the paper's github repo (https://github.com/ElementAI/N-BEATS)

here, iI think the trend coefficients are calculated as:

>>> bn=15; fn=5; p=4  #15 backcasts,5 foreeasts, p=thetas
>>> b,f=linspace(bn,fn)
>>> f
array([0.78947368, 1.84210526, 2.89473684, 3.94736842, 5.        ])
>>> torch.tensor([f ** i for i in range(p)])
tensor([[  1.0000,   1.0000,   1.0000,   1.0000,   1.0000],
        [  0.7895,   1.8421,   2.8947,   3.9474,   5.0000],
        [  0.6233,   3.3934,   8.3795,  15.5817,  25.0000],
        [  0.4921,   6.2509,  24.2565,  61.5068, 125.0000]],
       dtype=torch.float64)

I think the N-Beats repository (and the paper, on page 5) calculates the trend coefficients as:

>>> torch.tensor(np.concatenate([np.power(np.arange(fn) / fn, i)[None, :] for i in range(p)]))
tensor([[1.0000, 1.0000, 1.0000, 1.0000, 1.0000],
        [0.0000, 0.2000, 0.4000, 0.6000, 0.8000],
        [0.0000, 0.0400, 0.1600, 0.3600, 0.6400],
        [0.0000, 0.0080, 0.0640, 0.2160, 0.5120]], dtype=torch.float64)

the main difference is factors from linpace are not divided by the number of forecast periods;
there's a smaller discrepancy in the linspace periods vs the arange periods.

thanks for looking at this (and thanks for the useful repo on nbeats)

Extra bias in Thetas calculation

Hey guys I think the θ calulcation in both models is being done incorrectly.

Section 3.1 of the paper spcifies that: θ = Linear(hid_4) but in both models this is done with a fully connected or dense layer (i.e., has bias=True by default).

NBeatsNet initialisation error.

When trying to implement notebook "NBeats-GPU.ipynb" from examples, at the code cell where the net initialisation is done using,

net = NBeatsNet(device=device,
                stack_types=(NBeatsNet.GENERIC_BLOCK, NBeatsNet.GENERIC_BLOCK),
                forecast_length=forecast_length,
                backcast_length=backcast_length,
                hidden_layer_units=128,
                share_weights_in_stack=True,
                )

I got the following error;

| N-Beats
| --  Stack Generic (#0) (share_weights_in_stack=True)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-41-dfdb76bc5848> in <module>()
      4                 backcast_length=backcast_length,
      5                 hidden_layer_units=128,
----> 6                 share_weights_in_stack=True,
      7                 )
      8 optimiser = optim.Adam(net.parameters())

1 frames
/usr/local/lib/python3.6/dist-packages/nbeats_pytorch/model.py in create_stack(self, stack_id)
     48             else:
     49                 block = block_init(self.hidden_layer_units, self.thetas_dim[stack_id],
---> 50                                    self.device, self.backcast_length, self.forecast_length, self.nb_harmonics)
     51                 self.parameters.extend(block.parameters())
     52             print(f'     | -- {block}')

TypeError: __init__() takes from 4 to 6 positional arguments but 7 were given

When I looked into the model.py code, in the block_init, we have;
block_init = NBeatsNet.select_block(stack_type). The error says, that we have 7 positional arguments which is true in bock_init initialisation. Please look after the error and throw some light.

Thank you, stay home, stay safe..

Delete

I made a mistake, sorry

Installation issue with tensor flow 2.5.0

Hi Philip,

Trying to pip install on my Mac m1. I get an error:

I use a Tensorflow 2.5.0 - is there a way to install NBEATS for Tf version 2.5.0?

The error is:

Collecting nbeats-keras
Using cached nbeats_keras-1.7.0-py3-none-any.whl (6.9 kB)
Requirement already satisfied: numpy in /Users/praveen/miniforge3/lib/python3.9/site-packages (from nbeats-keras) (1.21.2)
Using cached nbeats_keras-1.6.0-py3-none-any.whl (6.5 kB)
Using cached nbeats_keras-1.5.0-py3-none-any.whl (6.4 kB)
Using cached nbeats_keras-1.4.0-py3-none-any.whl (6.2 kB)
Using cached nbeats_keras-1.3.4-py3-none-any.whl (5.9 kB)
Using cached nbeats_keras-1.3.3-py3-none-any.whl (5.9 kB)
Using cached nbeats_keras-1.3.1-py3-none-any.whl (5.3 kB)
Requirement already satisfied: matplotlib>=3.0 in /Users/praveen/miniforge3/lib/python3.9/site-packages (from nbeats-keras) (3.4.3)
Requirement already satisfied: pandas>=0.25.3 in /Users/praveen/miniforge3/lib/python3.9/site-packages (from nbeats-keras) (1.3.2)
Using cached nbeats_keras-1.3.0-py3-none-any.whl (5.2 kB)
Collecting numpy==1.16.2
Using cached numpy-1.16.2.zip (5.1 MB)
Collecting nbeats-keras
Using cached nbeats_keras-1.2.0-py3-none-any.whl (4.9 kB)
Using cached nbeats_keras-1.1.0-py3-none-any.whl (4.7 kB)
Collecting keras
Using cached keras-2.8.0-py2.py3-none-any.whl (1.4 MB)
Collecting nbeats-keras
Using cached nbeats_keras-1.0.0-py3-none-any.whl (4.3 kB)
�[31mERROR: Cannot install nbeats-keras==1.0.0, nbeats-keras==1.1.0, nbeats-keras==1.2.0, nbeats-keras==1.3.0, nbeats-keras==1.3.1, nbeats-keras==1.3.3, nbeats-keras==1.3.4, nbeats-keras==1.4.0, nbeats-keras==1.5.0, nbeats-keras==1.6.0 and nbeats-keras==1.7.0 because these package versions have conflicting dependencies.�[0m

The conflict is caused by:
nbeats-keras 1.7.0 depends on tensorflow
nbeats-keras 1.6.0 depends on tensorflow
nbeats-keras 1.5.0 depends on tensorflow
nbeats-keras 1.4.0 depends on tensorflow
nbeats-keras 1.3.4 depends on tensorflow
nbeats-keras 1.3.3 depends on tensorflow
nbeats-keras 1.3.1 depends on tensorflow==2.0
nbeats-keras 1.3.0 depends on tensorflow==2.0
nbeats-keras 1.2.0 depends on tensorflow
nbeats-keras 1.1.0 depends on tensorflow
nbeats-keras 1.0.0 depends on tensorflow

To fix this you could try to:

  1. loosen the range of package versions you've specified
  2. remove package versions to allow pip attempt to solve the dependency conflict

�[31mERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/user_guide/#fixing-conflicting-dependencies�[0m
�[33mWARNING: You are using pip version 21.2.4; however, version 22.0.3 is available.
You should consider upgrading via the '/Users/praveenkadam/miniforge3/bin/python -m pip install --upgrade pip' command.�[0m
Note: you may need to restart the kernel to use updated packages.

Question on Equation(3) in paper

Hi, I have a question on implementing equation(3).

According to the code in "seasonality_model" in nbeats_keras/model.py, the summation is over dim of thetas, i.e.,

p = dim of theta
y = \sum_{i=1}^{p/2} theta_{i=1:p/2} * cos (2*pi i t) + theta_{i=p/2:p} * sin (2pi *i t)

However in the paper(eqn 3 on page 5) the summation is over dim of time vector, i.e. H.

May i know if it is a typo in the paper or i misunderstand it.

Thanks in advance.

NBeats.ipynb not running

I am getting error when running this example when running NBeats.ipynb while running the following command. If I remove stack_types or set it as ('trend','seasonality') it works fine. But it gives error with GENERIC_BLOCK

net = NBeatsNet(device=device, stack_types=(NBeatsNet.GENERIC_BLOCK, NBeatsNet.GENERIC_BLOCK),
forecast_length=forecast_length,
backcast_length=backcast_length,
hidden_layer_units=128,
share_weights_in_stack=False,
)

Error Statement

TypeError Traceback (most recent call last)
in ()
4 backcast_length=backcast_length,
5 hidden_layer_units=128,
----> 6 share_weights_in_stack=False,
7 )

~/anaconda3/envs/pytorch_p36/lib/python3.6/site-packages/nbeats_pytorch/model.py in init(self, device, stack_types, nb_blocks_per_stack, forecast_length, backcast_length, thetas_dims, share_weights_in_stack, hidden_layer_units, nb_harmonics)
34 print(f'| N-Beats')
35 for stack_id in range(len(self.stack_types)):
---> 36 self.stacks.append(self.create_stack(stack_id))
37 self.parameters = nn.ParameterList(self.parameters)
38 self.to(self.device)

~/anaconda3/envs/pytorch_p36/lib/python3.6/site-packages/nbeats_pytorch/model.py in create_stack(self, stack_id)
48 else:
49 block = block_init(self.hidden_layer_units, self.thetas_dim[stack_id],
---> 50 self.device, self.backcast_length, self.forecast_length, self.nb_harmonics)
51 self.parameters.extend(block.parameters())
52 print(f' | -- {block}')

TypeError: init() takes from 4 to 6 positional arguments but 7 were given

GENERIC_BLOCK usage generating TypeError

Using Google Colab and nbeats-pytorch==1.3.1, when setting up the NBeatNet model with the following parameters:

        net = NBeatsNet(
            stack_types=[NBeatsNet.GENERIC_BLOCK, NBeatsNet.GENERIC_BLOCK],
            forecast_length=60,
            thetas_dims=[7, 8],
            nb_blocks_per_stack=3,
            backcast_length=60,
            hidden_layer_units=128,
            share_weights_in_stack=False,
            device=torch.device("cuda")
        )

I am receiving the following error:

/usr/local/lib/python3.6/dist-packages/nbeats_pytorch/model.py in __init__(self, device, stack_types, nb_blocks_per_stack, forecast_length, backcast_length, thetas_dims, share_weights_in_stack, hidden_layer_units, nb_harmonics)
     34         print(f'| N-Beats')
     35         for stack_id in range(len(self.stack_types)):
---> 36             self.stacks.append(self.create_stack(stack_id))
     37         self.parameters = nn.ParameterList(self.parameters)
     38         self.to(self.device)

/usr/local/lib/python3.6/dist-packages/nbeats_pytorch/model.py in create_stack(self, stack_id)
     48             else:
     49                 block = block_init(self.hidden_layer_units, self.thetas_dim[stack_id],
---> 50                                    self.device, self.backcast_length, self.forecast_length, self.nb_harmonics)
     51                 self.parameters.extend(block.parameters())
     52             print(f'     | -- {block}')

TypeError: __init__() takes from 4 to 6 positional arguments but 7 were given

If I use NBeatsNet.TREND_BLOCK and NBeatsNet.SEASONALITY_BLOCK the stacks build with no issue, but NBeatsNet.GENERIC_BLOCK fails.

The issue appears to be that in the create_stack method, you are including self.nb_harmonics as a parameter:

                block = block_init(self.hidden_layer_units, self.thetas_dim[stack_id],
                                   self.device, self.backcast_length, self.forecast_length, self.nb_harmonics)

yet in the initalization for the GENERIC_BLOCK, this parameter is omitted:

class GenericBlock(Block):

    def __init__(self, units, thetas_dim, device, backcast_length=10, forecast_length=5):

Toy Example - Milk data set

The link provided for the toy example no longer has the data that I believe is being described. Could the link be updated?

Incorporating deterministic exogenous features

Hi,

First off, thank you very much for this fantastic repo.

I have a quick question: How would you implement deterministic features in this model. By this, I mean, we know the values of these features for the forecast period. Such as holidays that do not follow regular seasonalities (e.g. Eid) or some big events or some pre-planned promotions. In ARIMA, for instance, you can include these types of features as exogenous regressors in the model and you feed the model with the future values of these regressors.

I know this may be too vague, but I was wondering if something along the lines presented in this blog post was possible: https://www.angioi.com/time-series-encoder-decoder-tensorflow/

Thanks in advance.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.