In [1]:
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf

keras = tf.keras
In [2]:
def plot_series(time, series, format="-", start=0, end=None, label=None):
    plt.plot(time[start:end], series[start:end], format, label=label)
    plt.xlabel("Time")
    plt.ylabel("Value")
    if label:
        plt.legend(fontsize=14)
    plt.grid(True)
    
def trend(time, slope=0):
    return slope * time
  
  
def seasonal_pattern(season_time):
    """Just an arbitrary pattern, you can change it if you wish"""
    return np.where(season_time < 0.4,
                    np.cos(season_time * 2 * np.pi),
                    1 / np.exp(3 * season_time))

  
def seasonality(time, period, amplitude=1, phase=0):
    """Repeats the same pattern at each period"""
    season_time = ((time + phase) % period) / period
    return amplitude * seasonal_pattern(season_time)
  
  
def white_noise(time, noise_level=1, seed=None):
    rnd = np.random.RandomState(seed)
    return rnd.randn(len(time)) * noise_level
In [3]:
time = np.arange(4 * 365 + 1)

slope = 0.05
baseline = 10
amplitude = 40
series = baseline + trend(time, slope) + seasonality(time, period=365, amplitude=amplitude)

noise_level = 5
noise = white_noise(time, noise_level, seed=42)

series += noise

plt.figure(figsize=(10, 6))
plot_series(time, series)
plt.show()
In [4]:
split_time = 1000
time_train = time[:split_time]
x_train = series[:split_time]
time_valid = time[split_time:]
x_valid = series[split_time:]

Stateful RNN Forecasting

In [5]:
def sequential_window_dataset(series, window_size):
    series = tf.expand_dims(series, axis=-1)
    ds = tf.data.Dataset.from_tensor_slices(series)
    ds = ds.window(window_size + 1, shift=window_size, drop_remainder=True)
    ds = ds.flat_map(lambda window: window.batch(window_size + 1))
    ds = ds.map(lambda window: (window[:-1], window[1:]))
    return ds.batch(1).prefetch(1)
In [6]:
for X_batch, y_batch in sequential_window_dataset(tf.range(10), 3):
    print(X_batch.numpy(), y_batch.numpy())
[[[0]
  [1]
  [2]]] [[[1]
  [2]
  [3]]]
[[[3]
  [4]
  [5]]] [[[4]
  [5]
  [6]]]
[[[6]
  [7]
  [8]]] [[[7]
  [8]
  [9]]]
In [7]:
class ResetStatesCallback(keras.callbacks.Callback):
    def on_epoch_begin(self, epoch, logs):
        self.model.reset_states()
In [8]:
keras.backend.clear_session()
tf.random.set_seed(42)
np.random.seed(42)

window_size = 30
train_set = sequential_window_dataset(x_train, window_size)

model = keras.models.Sequential([
  keras.layers.SimpleRNN(100, return_sequences=True, stateful=True,
                         batch_input_shape=[1, None, 1]),
  keras.layers.SimpleRNN(100, return_sequences=True, stateful=True),
  keras.layers.Dense(1),
  keras.layers.Lambda(lambda x: x * 200.0)
])
lr_schedule = keras.callbacks.LearningRateScheduler(
    lambda epoch: 1e-8 * 10**(epoch / 30))
reset_states = ResetStatesCallback()
optimizer = keras.optimizers.SGD(lr=1e-8, momentum=0.9)
model.compile(loss=keras.losses.Huber(),
              optimizer=optimizer,
              metrics=["mae"])
history = model.fit(train_set, epochs=100,
                    callbacks=[lr_schedule, reset_states])
Epoch 1/100
33/33 [==============================] - 1s 23ms/step - loss: 105.9340 - mae: 106.4340
Epoch 2/100
33/33 [==============================] - 1s 27ms/step - loss: 70.8572 - mae: 71.3572
Epoch 3/100
33/33 [==============================] - 1s 25ms/step - loss: 39.8080 - mae: 40.3048
Epoch 4/100
33/33 [==============================] - 1s 24ms/step - loss: 27.3450 - mae: 27.8404
Epoch 5/100
33/33 [==============================] - 1s 22ms/step - loss: 24.4956 - mae: 24.9892
Epoch 6/100
33/33 [==============================] - 1s 21ms/step - loss: 23.2601 - mae: 23.7517
Epoch 7/100
33/33 [==============================] - 1s 22ms/step - loss: 22.0604 - mae: 22.5533
Epoch 8/100
33/33 [==============================] - 1s 22ms/step - loss: 20.8543 - mae: 21.3463
Epoch 9/100
33/33 [==============================] - 1s 21ms/step - loss: 19.8307 - mae: 20.3245
Epoch 10/100
33/33 [==============================] - 1s 22ms/step - loss: 18.9399 - mae: 19.4319
Epoch 11/100
33/33 [==============================] - 1s 22ms/step - loss: 18.2618 - mae: 18.7534
Epoch 12/100
33/33 [==============================] - 1s 26ms/step - loss: 17.8208 - mae: 18.3103
Epoch 13/100
33/33 [==============================] - 1s 22ms/step - loss: 17.5456 - mae: 18.0350
Epoch 14/100
33/33 [==============================] - 1s 22ms/step - loss: 17.3178 - mae: 17.8066
Epoch 15/100
33/33 [==============================] - 1s 27ms/step - loss: 17.1075 - mae: 17.5962
Epoch 16/100
33/33 [==============================] - 1s 22ms/step - loss: 16.8930 - mae: 17.3833
Epoch 17/100
33/33 [==============================] - 1s 26ms/step - loss: 16.6635 - mae: 17.1554
Epoch 18/100
33/33 [==============================] - 1s 22ms/step - loss: 16.4183 - mae: 16.9092
Epoch 19/100
33/33 [==============================] - 1s 22ms/step - loss: 16.1545 - mae: 16.6440
Epoch 20/100
33/33 [==============================] - 1s 23ms/step - loss: 15.8707 - mae: 16.3592
Epoch 21/100
33/33 [==============================] - 1s 27ms/step - loss: 15.5813 - mae: 16.0698
Epoch 22/100
33/33 [==============================] - 1s 22ms/step - loss: 15.2826 - mae: 15.7715
Epoch 23/100
33/33 [==============================] - 1s 22ms/step - loss: 14.9790 - mae: 15.4695
Epoch 24/100
33/33 [==============================] - 1s 22ms/step - loss: 14.6615 - mae: 15.1514
Epoch 25/100
33/33 [==============================] - 1s 23ms/step - loss: 14.3330 - mae: 14.8220
Epoch 26/100
33/33 [==============================] - 1s 22ms/step - loss: 13.9788 - mae: 14.4693
Epoch 27/100
33/33 [==============================] - 1s 22ms/step - loss: 13.5956 - mae: 14.0828
Epoch 28/100
33/33 [==============================] - 1s 23ms/step - loss: 13.2027 - mae: 13.6894
Epoch 29/100
33/33 [==============================] - 1s 21ms/step - loss: 12.8240 - mae: 13.3102
Epoch 30/100
33/33 [==============================] - 1s 21ms/step - loss: 12.4855 - mae: 12.9692
Epoch 31/100
33/33 [==============================] - 1s 21ms/step - loss: 12.1524 - mae: 12.6349
Epoch 32/100
33/33 [==============================] - 1s 21ms/step - loss: 11.8552 - mae: 12.3387
Epoch 33/100
33/33 [==============================] - 1s 21ms/step - loss: 11.5994 - mae: 12.0845
Epoch 34/100
33/33 [==============================] - 1s 21ms/step - loss: 11.3511 - mae: 11.8377
Epoch 35/100
33/33 [==============================] - 1s 21ms/step - loss: 11.0647 - mae: 11.5519
Epoch 36/100
33/33 [==============================] - 1s 24ms/step - loss: 10.7654 - mae: 11.2513
Epoch 37/100
33/33 [==============================] - 1s 21ms/step - loss: 10.4346 - mae: 10.9200
Epoch 38/100
33/33 [==============================] - 1s 21ms/step - loss: 10.0617 - mae: 10.5416
Epoch 39/100
33/33 [==============================] - 1s 22ms/step - loss: 9.8111 - mae: 10.2907
Epoch 40/100
33/33 [==============================] - 1s 22ms/step - loss: 9.7208 - mae: 10.2041
Epoch 41/100
33/33 [==============================] - 1s 21ms/step - loss: 9.5675 - mae: 10.0504
Epoch 42/100
33/33 [==============================] - 1s 25ms/step - loss: 9.4666 - mae: 9.9515
Epoch 43/100
33/33 [==============================] - 1s 27ms/step - loss: 9.1888 - mae: 9.6736
Epoch 44/100
33/33 [==============================] - 1s 21ms/step - loss: 9.1645 - mae: 9.6502
Epoch 45/100
33/33 [==============================] - 1s 28ms/step - loss: 9.0252 - mae: 9.5096
Epoch 46/100
33/33 [==============================] - 1s 22ms/step - loss: 8.9602 - mae: 9.4419
Epoch 47/100
33/33 [==============================] - 1s 21ms/step - loss: 8.7674 - mae: 9.2507
Epoch 48/100
33/33 [==============================] - 1s 21ms/step - loss: 8.7665 - mae: 9.2488
Epoch 49/100
33/33 [==============================] - 1s 21ms/step - loss: 9.2734 - mae: 9.7596
Epoch 50/100
33/33 [==============================] - 1s 24ms/step - loss: 9.4916 - mae: 9.9780
Epoch 51/100
33/33 [==============================] - 1s 22ms/step - loss: 8.4910 - mae: 8.9760
Epoch 52/100
33/33 [==============================] - 1s 22ms/step - loss: 8.2837 - mae: 8.7682
Epoch 53/100
33/33 [==============================] - 1s 24ms/step - loss: 9.8092 - mae: 10.2953
Epoch 54/100
33/33 [==============================] - 1s 21ms/step - loss: 8.9973 - mae: 9.4818
Epoch 55/100
33/33 [==============================] - 1s 22ms/step - loss: 10.5219 - mae: 11.0108
Epoch 56/100
33/33 [==============================] - 1s 22ms/step - loss: 7.9181 - mae: 8.3953
Epoch 57/100
33/33 [==============================] - 1s 22ms/step - loss: 7.9338 - mae: 8.4177
Epoch 58/100
33/33 [==============================] - 1s 28ms/step - loss: 8.6849 - mae: 9.1687
Epoch 59/100
33/33 [==============================] - 1s 25ms/step - loss: 10.0228 - mae: 10.5122
Epoch 60/100
33/33 [==============================] - 1s 24ms/step - loss: 8.6575 - mae: 9.1461
Epoch 61/100
33/33 [==============================] - 1s 24ms/step - loss: 12.2865 - mae: 12.7783
Epoch 62/100
33/33 [==============================] - 1s 22ms/step - loss: 9.3346 - mae: 9.8191
Epoch 63/100
33/33 [==============================] - 1s 29ms/step - loss: 12.3715 - mae: 12.8623
Epoch 64/100
33/33 [==============================] - 1s 22ms/step - loss: 13.8637 - mae: 14.3582
Epoch 65/100
33/33 [==============================] - 1s 27ms/step - loss: 11.6707 - mae: 12.1626
Epoch 66/100
33/33 [==============================] - 1s 21ms/step - loss: 11.3471 - mae: 11.8379
Epoch 67/100
33/33 [==============================] - 1s 23ms/step - loss: 11.4835 - mae: 11.9729
Epoch 68/100
33/33 [==============================] - 1s 22ms/step - loss: 13.9734 - mae: 14.4679
Epoch 69/100
33/33 [==============================] - 1s 23ms/step - loss: 8.7353 - mae: 9.2216
Epoch 70/100
33/33 [==============================] - 1s 23ms/step - loss: 16.1163 - mae: 16.6077
Epoch 71/100
33/33 [==============================] - 1s 23ms/step - loss: 10.9883 - mae: 11.4798
Epoch 72/100
33/33 [==============================] - 1s 22ms/step - loss: 15.5617 - mae: 16.0539
Epoch 73/100
33/33 [==============================] - 1s 21ms/step - loss: 15.7534 - mae: 16.2480
Epoch 74/100
33/33 [==============================] - 1s 21ms/step - loss: 18.0310 - mae: 18.5269
Epoch 75/100
33/33 [==============================] - 1s 21ms/step - loss: 22.1629 - mae: 22.6602
Epoch 76/100
33/33 [==============================] - 1s 22ms/step - loss: 16.0302 - mae: 16.5252
Epoch 77/100
33/33 [==============================] - 1s 22ms/step - loss: 11.9460 - mae: 12.4373
Epoch 78/100
33/33 [==============================] - 1s 21ms/step - loss: 21.2708 - mae: 21.7663
Epoch 79/100
33/33 [==============================] - 1s 25ms/step - loss: 20.9082 - mae: 21.4057
Epoch 80/100
33/33 [==============================] - 1s 27ms/step - loss: 19.2159 - mae: 19.7120
Epoch 81/100
33/33 [==============================] - 1s 22ms/step - loss: 20.3005 - mae: 20.7939
Epoch 82/100
33/33 [==============================] - 1s 22ms/step - loss: 20.0288 - mae: 20.5254
Epoch 83/100
33/33 [==============================] - 1s 27ms/step - loss: 28.0086 - mae: 28.5054
Epoch 84/100
33/33 [==============================] - 1s 21ms/step - loss: 33.6154 - mae: 34.1111
Epoch 85/100
33/33 [==============================] - 1s 21ms/step - loss: 31.1728 - mae: 31.6693
Epoch 86/100
33/33 [==============================] - 1s 22ms/step - loss: 32.0257 - mae: 32.5232
Epoch 87/100
33/33 [==============================] - 1s 21ms/step - loss: 24.0584 - mae: 24.5548
Epoch 88/100
33/33 [==============================] - 1s 22ms/step - loss: 33.1891 - mae: 33.6864
Epoch 89/100
33/33 [==============================] - 1s 21ms/step - loss: 36.6421 - mae: 37.1394
Epoch 90/100
33/33 [==============================] - 1s 22ms/step - loss: 36.5337 - mae: 37.0328
Epoch 91/100
33/33 [==============================] - 1s 22ms/step - loss: 29.9145 - mae: 30.4110
Epoch 92/100
33/33 [==============================] - 1s 22ms/step - loss: 34.7765 - mae: 35.2757
Epoch 93/100
33/33 [==============================] - 1s 26ms/step - loss: 40.7977 - mae: 41.2954
Epoch 94/100
33/33 [==============================] - 1s 30ms/step - loss: 39.6836 - mae: 40.1829
Epoch 95/100
33/33 [==============================] - 1s 23ms/step - loss: 34.3425 - mae: 34.8412
Epoch 96/100
33/33 [==============================] - 1s 24ms/step - loss: 33.4872 - mae: 33.9847
Epoch 97/100
33/33 [==============================] - 1s 22ms/step - loss: 32.3557 - mae: 32.8527
Epoch 98/100
33/33 [==============================] - 1s 22ms/step - loss: 35.9574 - mae: 36.4554
Epoch 99/100
33/33 [==============================] - 1s 21ms/step - loss: 65.2889 - mae: 65.7878
Epoch 100/100
33/33 [==============================] - 1s 22ms/step - loss: 41.6229 - mae: 42.1221
In [9]:
plt.semilogx(history.history["lr"], history.history["loss"])
plt.axis([1e-8, 1e-4, 0, 30])
Out[9]:
(1e-08, 0.0001, 0.0, 30.0)
In [10]:
keras.backend.clear_session()
tf.random.set_seed(42)
np.random.seed(42)

window_size = 30
train_set = sequential_window_dataset(x_train, window_size)
valid_set = sequential_window_dataset(x_valid, window_size)

model = keras.models.Sequential([
  keras.layers.SimpleRNN(100, return_sequences=True, stateful=True,
                         batch_input_shape=[1, None, 1]),
  keras.layers.SimpleRNN(100, return_sequences=True, stateful=True),
  keras.layers.Dense(1),
  keras.layers.Lambda(lambda x: x * 200.0)
])
optimizer = keras.optimizers.SGD(lr=1e-7, momentum=0.9)
model.compile(loss=keras.losses.Huber(),
              optimizer=optimizer,
              metrics=["mae"])
reset_states = ResetStatesCallback()
model_checkpoint = keras.callbacks.ModelCheckpoint(
    "my_checkpoint.h5", save_best_only=True)
early_stopping = keras.callbacks.EarlyStopping(patience=50)
model.fit(train_set, epochs=500,
          validation_data=valid_set,
          callbacks=[early_stopping, model_checkpoint, reset_states])
Epoch 1/500
33/33 [==============================] - 1s 34ms/step - loss: 60.2499 - mae: 60.7478 - val_loss: 25.0218 - val_mae: 25.5179
Epoch 2/500
33/33 [==============================] - 1s 26ms/step - loss: 21.4714 - mae: 21.9618 - val_loss: 10.9142 - val_mae: 11.4074
Epoch 3/500
33/33 [==============================] - 1s 24ms/step - loss: 18.7249 - mae: 19.2166 - val_loss: 12.0569 - val_mae: 12.5479
Epoch 4/500
33/33 [==============================] - 1s 26ms/step - loss: 17.5231 - mae: 18.0143 - val_loss: 10.4488 - val_mae: 10.9391
Epoch 5/500
33/33 [==============================] - 1s 27ms/step - loss: 16.6983 - mae: 17.1891 - val_loss: 9.9581 - val_mae: 10.4500
Epoch 6/500
33/33 [==============================] - 1s 25ms/step - loss: 15.9090 - mae: 16.3984 - val_loss: 9.1539 - val_mae: 9.6415
Epoch 7/500
33/33 [==============================] - 1s 25ms/step - loss: 15.2155 - mae: 15.7027 - val_loss: 8.3393 - val_mae: 8.8249
Epoch 8/500
33/33 [==============================] - 1s 27ms/step - loss: 14.5099 - mae: 14.9961 - val_loss: 7.8259 - val_mae: 8.3124
Epoch 9/500
33/33 [==============================] - 1s 25ms/step - loss: 13.9258 - mae: 14.4126 - val_loss: 7.3023 - val_mae: 7.7879
Epoch 10/500
33/33 [==============================] - 1s 31ms/step - loss: 13.4064 - mae: 13.8968 - val_loss: 6.8635 - val_mae: 7.3454
Epoch 11/500
33/33 [==============================] - 1s 25ms/step - loss: 12.9188 - mae: 13.4082 - val_loss: 6.5419 - val_mae: 7.0255
Epoch 12/500
33/33 [==============================] - 1s 26ms/step - loss: 12.4920 - mae: 12.9762 - val_loss: 6.3125 - val_mae: 6.7950
Epoch 13/500
33/33 [==============================] - 1s 25ms/step - loss: 12.1188 - mae: 12.6026 - val_loss: 6.1875 - val_mae: 6.6707
Epoch 14/500
33/33 [==============================] - 1s 25ms/step - loss: 11.7833 - mae: 12.2670 - val_loss: 6.0323 - val_mae: 6.5165
Epoch 15/500
33/33 [==============================] - 1s 25ms/step - loss: 11.4780 - mae: 11.9594 - val_loss: 5.9862 - val_mae: 6.4694
Epoch 16/500
33/33 [==============================] - 1s 25ms/step - loss: 11.1839 - mae: 11.6646 - val_loss: 5.9122 - val_mae: 6.3947
Epoch 17/500
33/33 [==============================] - 1s 26ms/step - loss: 10.9185 - mae: 11.3992 - val_loss: 5.8466 - val_mae: 6.3273
Epoch 18/500
33/33 [==============================] - 1s 25ms/step - loss: 10.6848 - mae: 11.1675 - val_loss: 5.7965 - val_mae: 6.2760
Epoch 19/500
33/33 [==============================] - 1s 30ms/step - loss: 10.4679 - mae: 10.9499 - val_loss: 5.7591 - val_mae: 6.2378
Epoch 20/500
33/33 [==============================] - 1s 25ms/step - loss: 10.2666 - mae: 10.7485 - val_loss: 5.7192 - val_mae: 6.1963
Epoch 21/500
33/33 [==============================] - 1s 30ms/step - loss: 10.0846 - mae: 10.5658 - val_loss: 5.7028 - val_mae: 6.1786
Epoch 22/500
33/33 [==============================] - 1s 25ms/step - loss: 9.9236 - mae: 10.4026 - val_loss: 5.7120 - val_mae: 6.1868
Epoch 23/500
33/33 [==============================] - 1s 30ms/step - loss: 9.7868 - mae: 10.2649 - val_loss: 5.7474 - val_mae: 6.2220
Epoch 24/500
33/33 [==============================] - 1s 25ms/step - loss: 9.6725 - mae: 10.1518 - val_loss: 5.8241 - val_mae: 6.3029
Epoch 25/500
33/33 [==============================] - 1s 25ms/step - loss: 9.5742 - mae: 10.0551 - val_loss: 5.9584 - val_mae: 6.4395
Epoch 26/500
33/33 [==============================] - 1s 26ms/step - loss: 9.4785 - mae: 9.9604 - val_loss: 6.0587 - val_mae: 6.5404
Epoch 27/500
33/33 [==============================] - 1s 29ms/step - loss: 9.3864 - mae: 9.8687 - val_loss: 6.1350 - val_mae: 6.6168
Epoch 28/500
33/33 [==============================] - 1s 25ms/step - loss: 9.3000 - mae: 9.7817 - val_loss: 6.2112 - val_mae: 6.6921
Epoch 29/500
33/33 [==============================] - 1s 26ms/step - loss: 9.2202 - mae: 9.6999 - val_loss: 6.3077 - val_mae: 6.7892
Epoch 30/500
33/33 [==============================] - 1s 25ms/step - loss: 9.1452 - mae: 9.6252 - val_loss: 6.4202 - val_mae: 6.9007
Epoch 31/500
33/33 [==============================] - 1s 24ms/step - loss: 9.0753 - mae: 9.5556 - val_loss: 6.5523 - val_mae: 7.0327
Epoch 32/500
33/33 [==============================] - 1s 24ms/step - loss: 9.0090 - mae: 9.4910 - val_loss: 6.6859 - val_mae: 7.1654
Epoch 33/500
33/33 [==============================] - 1s 26ms/step - loss: 8.9432 - mae: 9.4252 - val_loss: 6.8139 - val_mae: 7.2942
Epoch 34/500
33/33 [==============================] - 1s 24ms/step - loss: 8.8776 - mae: 9.3592 - val_loss: 6.8729 - val_mae: 7.3541
Epoch 35/500
33/33 [==============================] - 1s 25ms/step - loss: 8.8143 - mae: 9.2940 - val_loss: 6.8389 - val_mae: 7.3182
Epoch 36/500
33/33 [==============================] - 1s 28ms/step - loss: 8.7465 - mae: 9.2257 - val_loss: 6.7921 - val_mae: 7.2707
Epoch 37/500
33/33 [==============================] - 1s 27ms/step - loss: 8.6807 - mae: 9.1613 - val_loss: 6.7235 - val_mae: 7.2015
Epoch 38/500
33/33 [==============================] - 1s 28ms/step - loss: 8.6150 - mae: 9.0962 - val_loss: 6.6948 - val_mae: 7.1732
Epoch 39/500
33/33 [==============================] - 1s 27ms/step - loss: 8.5511 - mae: 9.0316 - val_loss: 6.6938 - val_mae: 7.1731
Epoch 40/500
33/33 [==============================] - 1s 25ms/step - loss: 8.4998 - mae: 8.9825 - val_loss: 6.7496 - val_mae: 7.2292
Epoch 41/500
33/33 [==============================] - 1s 25ms/step - loss: 8.4619 - mae: 8.9458 - val_loss: 6.8581 - val_mae: 7.3382
Epoch 42/500
33/33 [==============================] - 1s 24ms/step - loss: 8.4213 - mae: 8.9042 - val_loss: 6.9451 - val_mae: 7.4273
Epoch 43/500
33/33 [==============================] - 1s 25ms/step - loss: 8.3727 - mae: 8.8558 - val_loss: 6.9883 - val_mae: 7.4710
Epoch 44/500
33/33 [==============================] - 1s 25ms/step - loss: 8.3164 - mae: 8.7984 - val_loss: 6.9494 - val_mae: 7.4307
Epoch 45/500
33/33 [==============================] - 1s 28ms/step - loss: 8.2595 - mae: 8.7403 - val_loss: 6.8680 - val_mae: 7.3469
Epoch 46/500
33/33 [==============================] - 1s 25ms/step - loss: 8.2019 - mae: 8.6818 - val_loss: 6.7928 - val_mae: 7.2708
Epoch 47/500
33/33 [==============================] - 1s 25ms/step - loss: 8.1484 - mae: 8.6291 - val_loss: 6.7779 - val_mae: 7.2560
Epoch 48/500
33/33 [==============================] - 1s 24ms/step - loss: 8.1042 - mae: 8.5858 - val_loss: 6.8247 - val_mae: 7.3038
Epoch 49/500
33/33 [==============================] - 1s 25ms/step - loss: 8.0652 - mae: 8.5466 - val_loss: 6.9032 - val_mae: 7.3848
Epoch 50/500
33/33 [==============================] - 1s 24ms/step - loss: 8.0286 - mae: 8.5106 - val_loss: 6.9969 - val_mae: 7.4815
Epoch 51/500
33/33 [==============================] - 1s 25ms/step - loss: 7.9923 - mae: 8.4729 - val_loss: 7.0717 - val_mae: 7.5577
Epoch 52/500
33/33 [==============================] - 1s 25ms/step - loss: 7.9519 - mae: 8.4323 - val_loss: 7.0975 - val_mae: 7.5837
Epoch 53/500
33/33 [==============================] - 1s 25ms/step - loss: 7.9087 - mae: 8.3885 - val_loss: 7.0847 - val_mae: 7.5708
Epoch 54/500
33/33 [==============================] - 1s 25ms/step - loss: 7.8640 - mae: 8.3437 - val_loss: 7.0536 - val_mae: 7.5395
Epoch 55/500
33/33 [==============================] - 1s 27ms/step - loss: 7.8203 - mae: 8.3001 - val_loss: 7.0385 - val_mae: 7.5244
Epoch 56/500
33/33 [==============================] - 1s 24ms/step - loss: 7.7814 - mae: 8.2609 - val_loss: 7.0592 - val_mae: 7.5455
Epoch 57/500
33/33 [==============================] - 1s 25ms/step - loss: 7.7475 - mae: 8.2261 - val_loss: 7.1071 - val_mae: 7.5936
Epoch 58/500
33/33 [==============================] - 1s 25ms/step - loss: 7.7155 - mae: 8.1939 - val_loss: 7.1585 - val_mae: 7.6450
Epoch 59/500
33/33 [==============================] - 1s 25ms/step - loss: 7.6826 - mae: 8.1608 - val_loss: 7.2046 - val_mae: 7.6913
Epoch 60/500
33/33 [==============================] - 1s 25ms/step - loss: 7.6470 - mae: 8.1249 - val_loss: 7.2325 - val_mae: 7.7194
Epoch 61/500
33/33 [==============================] - 1s 26ms/step - loss: 7.6084 - mae: 8.0859 - val_loss: 7.2379 - val_mae: 7.7247
Epoch 62/500
33/33 [==============================] - 1s 25ms/step - loss: 7.5705 - mae: 8.0485 - val_loss: 7.2325 - val_mae: 7.7192
Epoch 63/500
33/33 [==============================] - 1s 25ms/step - loss: 7.5344 - mae: 8.0126 - val_loss: 7.2253 - val_mae: 7.7120
Epoch 64/500
33/33 [==============================] - 1s 27ms/step - loss: 7.5009 - mae: 7.9792 - val_loss: 7.2330 - val_mae: 7.7198
Epoch 65/500
33/33 [==============================] - 1s 25ms/step - loss: 7.4706 - mae: 7.9491 - val_loss: 7.2639 - val_mae: 7.7507
Epoch 66/500
33/33 [==============================] - 1s 25ms/step - loss: 7.4424 - mae: 7.9210 - val_loss: 7.3071 - val_mae: 7.7941
Epoch 67/500
33/33 [==============================] - 1s 25ms/step - loss: 7.4135 - mae: 7.8922 - val_loss: 7.3386 - val_mae: 7.8257
Epoch 68/500
33/33 [==============================] - 1s 29ms/step - loss: 7.3803 - mae: 7.8593 - val_loss: 7.3363 - val_mae: 7.8234
Epoch 69/500
33/33 [==============================] - 1s 26ms/step - loss: 7.3444 - mae: 7.8234 - val_loss: 7.3156 - val_mae: 7.8026
Epoch 70/500
33/33 [==============================] - 1s 25ms/step - loss: 7.3099 - mae: 7.7897 - val_loss: 7.2992 - val_mae: 7.7861
Epoch 71/500
33/33 [==============================] - 1s 27ms/step - loss: 7.2791 - mae: 7.7590 - val_loss: 7.3036 - val_mae: 7.7906
Out[10]:
<tensorflow.python.keras.callbacks.History at 0x7ff48be92d68>
In [11]:
model = keras.models.load_model("my_checkpoint.h5")
In [12]:
model.reset_states()
rnn_forecast = model.predict(series[np.newaxis, :, np.newaxis])
rnn_forecast = rnn_forecast[0, split_time - 1:-1, 0]
In [13]:
rnn_forecast.shape
Out[13]:
(461,)
In [14]:
plt.figure(figsize=(10, 6))
plot_series(time_valid, x_valid)
plot_series(time_valid, rnn_forecast)
In [15]:
keras.metrics.mean_absolute_error(x_valid, rnn_forecast).numpy()
Out[15]:
6.2778373