Informer model¶
In [1]:
Copied!
#!pip install deepts_forecasting
#!pip install deepts_forecasting
Import libraries¶
In [1]:
Copied!
import numpy as np
import torch
from torch.utils.data import DataLoader
import pytorch_lightning as pl
from pytorch_lightning.callbacks import EarlyStopping, LearningRateMonitor
from pytorch_lightning.loggers import TensorBoardLogger
from deepts_forecasting.utils.data import TimeSeriesDataSet
from deepts_forecasting.utils.data.encoders import TorchNormalizer
from deepts_forecasting.datasets import AirPassengersDataset
from deepts_forecasting.models.autoformer import Autoformer
import numpy as np
import torch
from torch.utils.data import DataLoader
import pytorch_lightning as pl
from pytorch_lightning.callbacks import EarlyStopping, LearningRateMonitor
from pytorch_lightning.loggers import TensorBoardLogger
from deepts_forecasting.utils.data import TimeSeriesDataSet
from deepts_forecasting.utils.data.encoders import TorchNormalizer
from deepts_forecasting.datasets import AirPassengersDataset
from deepts_forecasting.models.autoformer import Autoformer
D:\Anaconda3\envs\DeepTS_Forecasting\lib\site-packages\tqdm\auto.py:22: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html from .autonotebook import tqdm as notebook_tqdm
Dataset¶
In [2]:
Copied!
data = AirPassengersDataset().load()
data['year'] = data['Month'].dt.year
data['month'] = data['Month'].dt.month
data['group'] = '0'
data['time_idx'] = np.arange(len(data))
data['Passengers'] = data['Passengers'].astype(float)
data['month'] = data['month'].astype('str')
data.head()
data = AirPassengersDataset().load()
data['year'] = data['Month'].dt.year
data['month'] = data['Month'].dt.month
data['group'] = '0'
data['time_idx'] = np.arange(len(data))
data['Passengers'] = data['Passengers'].astype(float)
data['month'] = data['month'].astype('str')
data.head()
Out[2]:
Month | Passengers | year | month | group | time_idx | |
---|---|---|---|---|---|---|
0 | 1949-01-01 | 112.0 | 1949 | 1 | 0 | 0 |
1 | 1949-02-01 | 118.0 | 1949 | 2 | 0 | 1 |
2 | 1949-03-01 | 132.0 | 1949 | 3 | 0 | 2 |
3 | 1949-04-01 | 129.0 | 1949 | 4 | 0 | 3 |
4 | 1949-05-01 | 121.0 | 1949 | 5 | 0 | 4 |
Split train/test sets¶
In [3]:
Copied!
max_encoder_length = 18
max_prediction_length = 12
training_cutoff = data["time_idx"].max() - max_encoder_length - max_prediction_length
training = TimeSeriesDataSet(
data[lambda x: x.time_idx <= training_cutoff],
max_encoder_length= max_encoder_length,
min_encoder_length=max_encoder_length,
max_prediction_length=max_prediction_length,
min_prediction_length=max_prediction_length,
time_idx="time_idx",
target="Passengers",
group_ids=["group"],
static_categoricals=[],
static_reals=[],
time_varying_known_categoricals=['month'],
time_varying_known_reals=[],
time_varying_unknown_reals=["Passengers"],
time_varying_unknown_categoricals=[],
target_normalizer=TorchNormalizer(method="standard",
transformation=None),
)
training.get_parameters()
validation = TimeSeriesDataSet.from_dataset(training,
data[lambda x: x.time_idx > training_cutoff])
batch_size = 16
train_dataloader = DataLoader(training, batch_size=batch_size, shuffle=False, drop_last=False)
val_dataloader = DataLoader(validation, batch_size=batch_size, shuffle=False, drop_last=False)
max_encoder_length = 18
max_prediction_length = 12
training_cutoff = data["time_idx"].max() - max_encoder_length - max_prediction_length
training = TimeSeriesDataSet(
data[lambda x: x.time_idx <= training_cutoff],
max_encoder_length= max_encoder_length,
min_encoder_length=max_encoder_length,
max_prediction_length=max_prediction_length,
min_prediction_length=max_prediction_length,
time_idx="time_idx",
target="Passengers",
group_ids=["group"],
static_categoricals=[],
static_reals=[],
time_varying_known_categoricals=['month'],
time_varying_known_reals=[],
time_varying_unknown_reals=["Passengers"],
time_varying_unknown_categoricals=[],
target_normalizer=TorchNormalizer(method="standard",
transformation=None),
)
training.get_parameters()
validation = TimeSeriesDataSet.from_dataset(training,
data[lambda x: x.time_idx > training_cutoff])
batch_size = 16
train_dataloader = DataLoader(training, batch_size=batch_size, shuffle=False, drop_last=False)
val_dataloader = DataLoader(validation, batch_size=batch_size, shuffle=False, drop_last=False)
Define model¶
In [4]:
Copied!
pl.seed_everything(1234)
# create PyTorch Lighning Trainer with early stopping
early_stop_callback = EarlyStopping(monitor="val_loss", min_delta=1e-4,
patience=60, verbose=False, mode="min")
lr_logger = LearningRateMonitor()
trainer = pl.Trainer(
max_epochs=300,
gpus=0, # run on CPU, if on multiple GPUs, use accelerator="ddp"
gradient_clip_val=0.1,
limit_train_batches=30, # 30 batches per epoch
callbacks=[lr_logger, early_stop_callback],
logger=TensorBoardLogger("lightning_logs")
)
model = Autoformer.from_dataset(training,
d_model=28,
d_ff=56,
n_heads=2,
num_layers=2,
moving_avg=12,
)
model.summarize
pl.seed_everything(1234)
# create PyTorch Lighning Trainer with early stopping
early_stop_callback = EarlyStopping(monitor="val_loss", min_delta=1e-4,
patience=60, verbose=False, mode="min")
lr_logger = LearningRateMonitor()
trainer = pl.Trainer(
max_epochs=300,
gpus=0, # run on CPU, if on multiple GPUs, use accelerator="ddp"
gradient_clip_val=0.1,
limit_train_batches=30, # 30 batches per epoch
callbacks=[lr_logger, early_stop_callback],
logger=TensorBoardLogger("lightning_logs")
)
model = Autoformer.from_dataset(training,
d_model=28,
d_ff=56,
n_heads=2,
num_layers=2,
moving_avg=12,
)
model.summarize
Global seed set to 1234 GPU available: False, used: False TPU available: False, using: 0 TPU cores IPU available: False, using: 0 IPUs
Out[4]:
<bound method LightningModule.summarize of Autoformer( (loss): L1Loss() (logging_metrics): ModuleList() (decomp): SeriesDecompose( (moving_avg): MovingAvg( (avg): AvgPool1d(kernel_size=(12,), stride=(1,), padding=(0,)) ) ) (embeddings): ModuleDict( (month): Embedding(12, 6) ) (encoder_input_linear): TokenEmbedding( (tokenConv): Conv1d(7, 28, kernel_size=(3,), stride=(1,), padding=(1,), bias=False, padding_mode=circular) ) (decoder_input_linear): TokenEmbedding( (tokenConv): Conv1d(6, 28, kernel_size=(3,), stride=(1,), padding=(1,), bias=False, padding_mode=circular) ) (out_linear): Linear(in_features=28, out_features=1, bias=True) (encoder): Encoder( (attn_layers): ModuleList( (0): EncoderLayer( (attention): AutoCorrelationLayer( (inner_correlation): AutoCorrelation( (dropout): Dropout(p=0.1, inplace=False) ) (query_projection): Linear(in_features=28, out_features=28, bias=True) (key_projection): Linear(in_features=28, out_features=28, bias=True) (value_projection): Linear(in_features=28, out_features=28, bias=True) (out_projection): Linear(in_features=28, out_features=28, bias=True) ) (conv1): Conv1d(28, 56, kernel_size=(1,), stride=(1,), bias=False) (conv2): Conv1d(56, 28, kernel_size=(1,), stride=(1,), bias=False) (decomp1): SeriesDecompose( (moving_avg): MovingAvg( (avg): AvgPool1d(kernel_size=(12,), stride=(1,), padding=(0,)) ) ) (decomp2): SeriesDecompose( (moving_avg): MovingAvg( (avg): AvgPool1d(kernel_size=(12,), stride=(1,), padding=(0,)) ) ) (dropout): Dropout(p=0.1, inplace=False) ) (1): EncoderLayer( (attention): AutoCorrelationLayer( (inner_correlation): AutoCorrelation( (dropout): Dropout(p=0.1, inplace=False) ) (query_projection): Linear(in_features=28, out_features=28, bias=True) (key_projection): Linear(in_features=28, out_features=28, bias=True) (value_projection): Linear(in_features=28, out_features=28, bias=True) (out_projection): Linear(in_features=28, out_features=28, bias=True) ) (conv1): Conv1d(28, 56, kernel_size=(1,), stride=(1,), bias=False) (conv2): Conv1d(56, 28, kernel_size=(1,), stride=(1,), bias=False) (decomp1): SeriesDecompose( (moving_avg): MovingAvg( (avg): AvgPool1d(kernel_size=(12,), stride=(1,), padding=(0,)) ) ) (decomp2): SeriesDecompose( (moving_avg): MovingAvg( (avg): AvgPool1d(kernel_size=(12,), stride=(1,), padding=(0,)) ) ) (dropout): Dropout(p=0.1, inplace=False) ) ) (norm): MyLayerNorm( (layernorm): LayerNorm((28,), eps=1e-05, elementwise_affine=True) ) ) (decoder): Decoder( (layers): ModuleList( (0): DecoderLayer( (self_attention): AutoCorrelationLayer( (inner_correlation): AutoCorrelation( (dropout): Dropout(p=0.1, inplace=False) ) (query_projection): Linear(in_features=28, out_features=28, bias=True) (key_projection): Linear(in_features=28, out_features=28, bias=True) (value_projection): Linear(in_features=28, out_features=28, bias=True) (out_projection): Linear(in_features=28, out_features=28, bias=True) ) (cross_attention): AutoCorrelationLayer( (inner_correlation): AutoCorrelation( (dropout): Dropout(p=0.1, inplace=False) ) (query_projection): Linear(in_features=28, out_features=28, bias=True) (key_projection): Linear(in_features=28, out_features=28, bias=True) (value_projection): Linear(in_features=28, out_features=28, bias=True) (out_projection): Linear(in_features=28, out_features=28, bias=True) ) (conv1): Conv1d(28, 56, kernel_size=(1,), stride=(1,), bias=False) (conv2): Conv1d(56, 28, kernel_size=(1,), stride=(1,), bias=False) (decomp1): SeriesDecompose( (moving_avg): MovingAvg( (avg): AvgPool1d(kernel_size=(12,), stride=(1,), padding=(0,)) ) ) (decomp2): SeriesDecompose( (moving_avg): MovingAvg( (avg): AvgPool1d(kernel_size=(12,), stride=(1,), padding=(0,)) ) ) (decomp3): SeriesDecompose( (moving_avg): MovingAvg( (avg): AvgPool1d(kernel_size=(12,), stride=(1,), padding=(0,)) ) ) (dropout): Dropout(p=0.1, inplace=False) (projection): Conv1d(28, 28, kernel_size=(3,), stride=(1,), padding=(1,), bias=False, padding_mode=circular) ) (1): DecoderLayer( (self_attention): AutoCorrelationLayer( (inner_correlation): AutoCorrelation( (dropout): Dropout(p=0.1, inplace=False) ) (query_projection): Linear(in_features=28, out_features=28, bias=True) (key_projection): Linear(in_features=28, out_features=28, bias=True) (value_projection): Linear(in_features=28, out_features=28, bias=True) (out_projection): Linear(in_features=28, out_features=28, bias=True) ) (cross_attention): AutoCorrelationLayer( (inner_correlation): AutoCorrelation( (dropout): Dropout(p=0.1, inplace=False) ) (query_projection): Linear(in_features=28, out_features=28, bias=True) (key_projection): Linear(in_features=28, out_features=28, bias=True) (value_projection): Linear(in_features=28, out_features=28, bias=True) (out_projection): Linear(in_features=28, out_features=28, bias=True) ) (conv1): Conv1d(28, 56, kernel_size=(1,), stride=(1,), bias=False) (conv2): Conv1d(56, 28, kernel_size=(1,), stride=(1,), bias=False) (decomp1): SeriesDecompose( (moving_avg): MovingAvg( (avg): AvgPool1d(kernel_size=(12,), stride=(1,), padding=(0,)) ) ) (decomp2): SeriesDecompose( (moving_avg): MovingAvg( (avg): AvgPool1d(kernel_size=(12,), stride=(1,), padding=(0,)) ) ) (decomp3): SeriesDecompose( (moving_avg): MovingAvg( (avg): AvgPool1d(kernel_size=(12,), stride=(1,), padding=(0,)) ) ) (dropout): Dropout(p=0.1, inplace=False) (projection): Conv1d(28, 28, kernel_size=(3,), stride=(1,), padding=(1,), bias=False, padding_mode=circular) ) ) (norm): MyLayerNorm( (layernorm): LayerNorm((28,), eps=1e-05, elementwise_affine=True) ) ) )>
In [5]:
Copied!
model.hparams
model.hparams
Out[5]:
"activation": relu "categorical_groups": {} "d_ff": 56 "d_model": 28 "dropout": 0.1 "embedding_labels": {'month': array(['1', '10', '11', '12', '2', '3', '4', '5', '6', '7', '8', '9'], dtype=object)} "embedding_paddings": [] "embedding_sizes": {'month': [12, 6]} "factor": 5 "learning_rate": 0.001 "log_interval": -1 "log_val_interval": None "logging_metrics": ModuleList() "loss": L1Loss() "max_encoder_length": 18 "max_prediction_length": 12 "monotone_constaints": {} "moving_avg": 12 "n_heads": 2 "num_layers": 2 "output_size": 1 "output_transformer": TorchNormalizer() "static_categoricals": [] "static_reals": [] "time_varying_categoricals_decoder": ['month'] "time_varying_categoricals_encoder": ['month'] "time_varying_reals_decoder": [] "time_varying_reals_encoder": ['Passengers'] "x_categoricals": ['month'] "x_reals": ['Passengers']
Train model with early stopping¶
In [6]:
Copied!
trainer.fit(
model, train_dataloader=train_dataloader, val_dataloaders=val_dataloader,
)
# (given that we use early stopping, this is not necessarily the last epoch)
best_model_path = trainer.checkpoint_callback.best_model_path
best_model = Autoformer.load_from_checkpoint(best_model_path)
# calcualte mean absolute error on validation set
actuals = torch.cat([model.transform_output(prediction=y, target_scale=x['target_scale'])
for x, y in iter(val_dataloader)])
predictions, x_index = best_model.predict(val_dataloader)
mae = (actuals - predictions).abs().mean()
# print('predictions shape is:', predictions.shape)
# print('actuals shape is:', actuals.shape)
print(torch.cat([actuals, predictions]))
print('MAE is:', mae)
trainer.fit(
model, train_dataloader=train_dataloader, val_dataloaders=val_dataloader,
)
# (given that we use early stopping, this is not necessarily the last epoch)
best_model_path = trainer.checkpoint_callback.best_model_path
best_model = Autoformer.load_from_checkpoint(best_model_path)
# calcualte mean absolute error on validation set
actuals = torch.cat([model.transform_output(prediction=y, target_scale=x['target_scale'])
for x, y in iter(val_dataloader)])
predictions, x_index = best_model.predict(val_dataloader)
mae = (actuals - predictions).abs().mean()
# print('predictions shape is:', predictions.shape)
# print('actuals shape is:', actuals.shape)
print(torch.cat([actuals, predictions]))
print('MAE is:', mae)
D:\Anaconda3\envs\DeepTS_Forecasting\lib\site-packages\pytorch_lightning\trainer\trainer.py:735: LightningDeprecationWarning: `trainer.fit(train_dataloader)` is deprecated in v1.4 and will be removed in v1.6. Use `trainer.fit(train_dataloaders)` instead. HINT: added 's' rank_zero_deprecation( | Name | Type | Params --------------------------------------------------------- 0 | loss | L1Loss | 0 1 | logging_metrics | ModuleList | 0 2 | decomp | SeriesDecompose | 0 3 | embeddings | ModuleDict | 72 4 | encoder_input_linear | TokenEmbedding | 588 5 | decoder_input_linear | TokenEmbedding | 504 6 | out_linear | Linear | 29 7 | encoder | Encoder | 12.8 K 8 | decoder | Decoder | 24.0 K --------------------------------------------------------- 38.0 K Trainable params 0 Non-trainable params 38.0 K Total params 0.152 Total estimated model params size (MB)
D:\Anaconda3\envs\DeepTS_Forecasting\lib\site-packages\pytorch_lightning\trainer\data_loading.py:132: UserWarning: The dataloader, val_dataloader 0, does not have many workers which may be a bottleneck. Consider increasing the value of the `num_workers` argument` (try 16 which is the number of cpus on this machine) in the `DataLoader` init to improve performance. rank_zero_warn( Global seed set to 1234 D:\Anaconda3\envs\DeepTS_Forecasting\lib\site-packages\pytorch_lightning\trainer\data_loading.py:132: UserWarning: The dataloader, train_dataloader, does not have many workers which may be a bottleneck. Consider increasing the value of the `num_workers` argument` (try 16 which is the number of cpus on this machine) in the `DataLoader` init to improve performance. rank_zero_warn( D:\Anaconda3\envs\DeepTS_Forecasting\lib\site-packages\pytorch_lightning\trainer\data_loading.py:432: UserWarning: The number of training samples (6) is smaller than the logging interval Trainer(log_every_n_steps=50). Set a lower value for log_every_n_steps if you want to see logs for the training epoch. rank_zero_warn(
Epoch 0: 86%|████████▌ | 6/7 [00:00<00:00, 11.97it/s, loss=1.23, v_num=24] Validating: 0it [00:00, ?it/s] Epoch 0: 100%|██████████| 7/7 [00:00<00:00, 13.06it/s, loss=1.23, v_num=24, val_loss=2.990] Epoch 1: 86%|████████▌ | 6/7 [00:00<00:00, 9.66it/s, loss=1.19, v_num=24, val_loss=2.990, train_loss=1.120] Validating: 0it [00:00, ?it/s] Epoch 1: 100%|██████████| 7/7 [00:00<00:00, 10.57it/s, loss=1.19, v_num=24, val_loss=5.780, train_loss=1.120] Epoch 2: 86%|████████▌ | 6/7 [00:00<00:00, 7.78it/s, loss=1.06, v_num=24, val_loss=5.780, train_loss=0.958] Validating: 0it [00:00, ?it/s] Epoch 2: 100%|██████████| 7/7 [00:00<00:00, 8.51it/s, loss=1.06, v_num=24, val_loss=0.821, train_loss=0.958] Epoch 3: 86%|████████▌ | 6/7 [00:00<00:00, 6.96it/s, loss=1.02, v_num=24, val_loss=0.821, train_loss=0.763] Validating: 0it [00:00, ?it/s] Epoch 3: 100%|██████████| 7/7 [00:00<00:00, 7.77it/s, loss=1.02, v_num=24, val_loss=2.830, train_loss=0.763] Epoch 4: 86%|████████▌ | 6/7 [00:00<00:00, 8.16it/s, loss=0.876, v_num=24, val_loss=2.830, train_loss=0.893] Validating: 0it [00:00, ?it/s] Epoch 4: 100%|██████████| 7/7 [00:00<00:00, 9.08it/s, loss=0.876, v_num=24, val_loss=4.130, train_loss=0.893] Epoch 5: 86%|████████▌ | 6/7 [00:00<00:00, 8.89it/s, loss=0.816, v_num=24, val_loss=4.130, train_loss=0.631] Validating: 0it [00:00, ?it/s] Epoch 5: 100%|██████████| 7/7 [00:00<00:00, 9.84it/s, loss=0.816, v_num=24, val_loss=1.370, train_loss=0.631] Epoch 6: 86%|████████▌ | 6/7 [00:00<00:00, 9.79it/s, loss=0.715, v_num=24, val_loss=1.370, train_loss=0.674] Validating: 0it [00:00, ?it/s] Epoch 6: 100%|██████████| 7/7 [00:00<00:00, 11.00it/s, loss=0.715, v_num=24, val_loss=1.640, train_loss=0.674] Epoch 7: 86%|████████▌ | 6/7 [00:00<00:00, 10.59it/s, loss=0.714, v_num=24, val_loss=1.640, train_loss=0.529] Validating: 0it [00:00, ?it/s] Epoch 7: 100%|██████████| 7/7 [00:00<00:00, 11.82it/s, loss=0.714, v_num=24, val_loss=2.800, train_loss=0.529] Epoch 8: 86%|████████▌ | 6/7 [00:00<00:00, 11.40it/s, loss=0.742, v_num=24, val_loss=2.800, train_loss=0.717] Validating: 0it [00:00, ?it/s] Epoch 8: 100%|██████████| 7/7 [00:00<00:00, 12.67it/s, loss=0.742, v_num=24, val_loss=1.950, train_loss=0.717] Epoch 9: 86%|████████▌ | 6/7 [00:00<00:00, 11.76it/s, loss=0.752, v_num=24, val_loss=1.950, train_loss=0.547] Validating: 0it [00:00, ?it/s] Epoch 9: 100%|██████████| 7/7 [00:00<00:00, 13.03it/s, loss=0.752, v_num=24, val_loss=2.240, train_loss=0.547] Epoch 10: 86%|████████▌ | 6/7 [00:00<00:00, 12.41it/s, loss=0.849, v_num=24, val_loss=2.240, train_loss=0.791] Validating: 0it [00:00, ?it/s] Epoch 10: 100%|██████████| 7/7 [00:00<00:00, 13.60it/s, loss=0.849, v_num=24, val_loss=3.090, train_loss=0.791] Epoch 11: 86%|████████▌ | 6/7 [00:00<00:00, 10.81it/s, loss=1, v_num=24, val_loss=3.090, train_loss=0.891] Validating: 0it [00:00, ?it/s] Epoch 11: 100%|██████████| 7/7 [00:00<00:00, 12.04it/s, loss=1, v_num=24, val_loss=0.645, train_loss=0.891] Epoch 12: 86%|████████▌ | 6/7 [00:00<00:00, 10.88it/s, loss=1.08, v_num=24, val_loss=0.645, train_loss=1.150] Validating: 0it [00:00, ?it/s] Epoch 12: 100%|██████████| 7/7 [00:00<00:00, 12.02it/s, loss=1.08, v_num=24, val_loss=1.740, train_loss=1.150] Epoch 13: 86%|████████▌ | 6/7 [00:00<00:00, 12.70it/s, loss=1.06, v_num=24, val_loss=1.740, train_loss=0.840] Validating: 0it [00:00, ?it/s] Epoch 13: 100%|██████████| 7/7 [00:00<00:00, 14.10it/s, loss=1.06, v_num=24, val_loss=2.350, train_loss=0.840] Epoch 14: 86%|████████▌ | 6/7 [00:00<00:00, 12.18it/s, loss=1.09, v_num=24, val_loss=2.350, train_loss=0.835] Validating: 0it [00:00, ?it/s] Epoch 14: 100%|██████████| 7/7 [00:00<00:00, 13.49it/s, loss=1.09, v_num=24, val_loss=1.990, train_loss=0.835] Epoch 15: 86%|████████▌ | 6/7 [00:00<00:00, 12.36it/s, loss=1.1, v_num=24, val_loss=1.990, train_loss=1.120] Validating: 0it [00:00, ?it/s] Epoch 15: 100%|██████████| 7/7 [00:00<00:00, 13.78it/s, loss=1.1, v_num=24, val_loss=5.380, train_loss=1.120] Epoch 16: 86%|████████▌ | 6/7 [00:00<00:00, 12.22it/s, loss=1.06, v_num=24, val_loss=5.380, train_loss=1.040] Validating: 0it [00:00, ?it/s] Epoch 16: 100%|██████████| 7/7 [00:00<00:00, 13.51it/s, loss=1.06, v_num=24, val_loss=3.980, train_loss=1.040] Epoch 17: 86%|████████▌ | 6/7 [00:00<00:00, 12.78it/s, loss=0.897, v_num=24, val_loss=3.980, train_loss=0.556] Validating: 0it [00:00, ?it/s] Epoch 17: 100%|██████████| 7/7 [00:00<00:00, 14.17it/s, loss=0.897, v_num=24, val_loss=1.440, train_loss=0.556] Epoch 18: 86%|████████▌ | 6/7 [00:00<00:00, 11.93it/s, loss=0.876, v_num=24, val_loss=1.440, train_loss=0.719] Validating: 0it [00:00, ?it/s] Epoch 18: 100%|██████████| 7/7 [00:00<00:00, 13.26it/s, loss=0.876, v_num=24, val_loss=3.420, train_loss=0.719] Epoch 19: 86%|████████▌ | 6/7 [00:00<00:00, 12.74it/s, loss=0.908, v_num=24, val_loss=3.420, train_loss=1.000] Validating: 0it [00:00, ?it/s] Epoch 19: 100%|██████████| 7/7 [00:00<00:00, 14.21it/s, loss=0.908, v_num=24, val_loss=2.180, train_loss=1.000] Epoch 20: 86%|████████▌ | 6/7 [00:00<00:00, 12.96it/s, loss=0.906, v_num=24, val_loss=2.180, train_loss=0.857] Validating: 0it [00:00, ?it/s] Epoch 20: 100%|██████████| 7/7 [00:00<00:00, 14.39it/s, loss=0.906, v_num=24, val_loss=0.780, train_loss=0.857] Epoch 21: 86%|████████▌ | 6/7 [00:00<00:00, 12.93it/s, loss=0.81, v_num=24, val_loss=0.780, train_loss=0.682] Validating: 0it [00:00, ?it/s] Epoch 21: 100%|██████████| 7/7 [00:00<00:00, 14.31it/s, loss=0.81, v_num=24, val_loss=2.160, train_loss=0.682] Epoch 22: 86%|████████▌ | 6/7 [00:00<00:00, 13.11it/s, loss=0.778, v_num=24, val_loss=2.160, train_loss=0.721] Validating: 0it [00:00, ?it/s] Epoch 22: 100%|██████████| 7/7 [00:00<00:00, 14.55it/s, loss=0.778, v_num=24, val_loss=3.110, train_loss=0.721] Epoch 23: 86%|████████▌ | 6/7 [00:00<00:00, 13.07it/s, loss=0.74, v_num=24, val_loss=3.110, train_loss=0.637] Validating: 0it [00:00, ?it/s] Epoch 23: 100%|██████████| 7/7 [00:00<00:00, 14.51it/s, loss=0.74, v_num=24, val_loss=3.700, train_loss=0.637] Epoch 24: 86%|████████▌ | 6/7 [00:00<00:00, 12.66it/s, loss=0.696, v_num=24, val_loss=3.700, train_loss=0.477] Validating: 0it [00:00, ?it/s] Epoch 24: 100%|██████████| 7/7 [00:00<00:00, 13.94it/s, loss=0.696, v_num=24, val_loss=3.580, train_loss=0.477] Epoch 25: 86%|████████▌ | 6/7 [00:00<00:00, 11.37it/s, loss=0.682, v_num=24, val_loss=3.580, train_loss=0.737] Validating: 0it [00:00, ?it/s] Epoch 25: 100%|██████████| 7/7 [00:00<00:00, 12.62it/s, loss=0.682, v_num=24, val_loss=3.410, train_loss=0.737] Epoch 26: 86%|████████▌ | 6/7 [00:00<00:00, 11.67it/s, loss=0.859, v_num=24, val_loss=3.410, train_loss=0.544] Validating: 0it [00:00, ?it/s] Epoch 26: 100%|██████████| 7/7 [00:00<00:00, 13.02it/s, loss=0.859, v_num=24, val_loss=0.840, train_loss=0.544] Epoch 27: 86%|████████▌ | 6/7 [00:00<00:00, 14.17it/s, loss=0.792, v_num=24, val_loss=0.840, train_loss=1.040] Validating: 0it [00:00, ?it/s] Epoch 27: 100%|██████████| 7/7 [00:00<00:00, 15.69it/s, loss=0.792, v_num=24, val_loss=1.180, train_loss=1.040] Epoch 28: 86%|████████▌ | 6/7 [00:00<00:00, 14.76it/s, loss=0.88, v_num=24, val_loss=1.180, train_loss=0.644] Validating: 0it [00:00, ?it/s] Epoch 28: 100%|██████████| 7/7 [00:00<00:00, 16.33it/s, loss=0.88, v_num=24, val_loss=1.640, train_loss=0.644] Epoch 29: 86%|████████▌ | 6/7 [00:00<00:00, 12.09it/s, loss=0.852, v_num=24, val_loss=1.640, train_loss=0.636] Validating: 0it [00:00, ?it/s] Epoch 29: 100%|██████████| 7/7 [00:00<00:00, 13.32it/s, loss=0.852, v_num=24, val_loss=1.820, train_loss=0.636] Epoch 30: 86%|████████▌ | 6/7 [00:00<00:00, 12.54it/s, loss=0.805, v_num=24, val_loss=1.820, train_loss=0.778] Validating: 0it [00:00, ?it/s] Epoch 30: 100%|██████████| 7/7 [00:00<00:00, 13.68it/s, loss=0.805, v_num=24, val_loss=1.480, train_loss=0.778] Epoch 31: 86%|████████▌ | 6/7 [00:00<00:00, 12.28it/s, loss=0.766, v_num=24, val_loss=1.480, train_loss=0.801] Validating: 0it [00:00, ?it/s] Epoch 31: 100%|██████████| 7/7 [00:00<00:00, 13.59it/s, loss=0.766, v_num=24, val_loss=2.980, train_loss=0.801] Epoch 32: 86%|████████▌ | 6/7 [00:00<00:00, 12.24it/s, loss=0.735, v_num=24, val_loss=2.980, train_loss=0.506] Validating: 0it [00:00, ?it/s] Epoch 32: 100%|██████████| 7/7 [00:00<00:00, 13.55it/s, loss=0.735, v_num=24, val_loss=3.710, train_loss=0.506] Epoch 33: 86%|████████▌ | 6/7 [00:00<00:00, 12.19it/s, loss=0.814, v_num=24, val_loss=3.710, train_loss=0.653] Validating: 0it [00:00, ?it/s] Epoch 33: 100%|██████████| 7/7 [00:00<00:00, 13.66it/s, loss=0.814, v_num=24, val_loss=0.582, train_loss=0.653] Epoch 34: 86%|████████▌ | 6/7 [00:00<00:00, 11.91it/s, loss=0.879, v_num=24, val_loss=0.582, train_loss=1.040] Validating: 0it [00:00, ?it/s] Epoch 34: 100%|██████████| 7/7 [00:00<00:00, 13.31it/s, loss=0.879, v_num=24, val_loss=1.280, train_loss=1.040] Epoch 35: 86%|████████▌ | 6/7 [00:00<00:00, 12.43it/s, loss=0.971, v_num=24, val_loss=1.280, train_loss=0.693] Validating: 0it [00:00, ?it/s] Epoch 35: 100%|██████████| 7/7 [00:00<00:00, 13.72it/s, loss=0.971, v_num=24, val_loss=3.720, train_loss=0.693] Epoch 36: 86%|████████▌ | 6/7 [00:00<00:00, 11.90it/s, loss=0.975, v_num=24, val_loss=3.720, train_loss=0.839] Validating: 0it [00:00, ?it/s] Epoch 36: 100%|██████████| 7/7 [00:00<00:00, 13.16it/s, loss=0.975, v_num=24, val_loss=1.990, train_loss=0.839] Epoch 37: 86%|████████▌ | 6/7 [00:00<00:00, 11.86it/s, loss=1.04, v_num=24, val_loss=1.990, train_loss=0.973] Validating: 0it [00:00, ?it/s] Epoch 37: 100%|██████████| 7/7 [00:00<00:00, 13.14it/s, loss=1.04, v_num=24, val_loss=1.680, train_loss=0.973] Epoch 38: 86%|████████▌ | 6/7 [00:00<00:00, 12.41it/s, loss=1.17, v_num=24, val_loss=1.680, train_loss=1.130] Validating: 0it [00:00, ?it/s] Epoch 38: 100%|██████████| 7/7 [00:00<00:00, 13.80it/s, loss=1.17, v_num=24, val_loss=1.910, train_loss=1.130] Epoch 39: 86%|████████▌ | 6/7 [00:00<00:00, 12.98it/s, loss=1.05, v_num=24, val_loss=1.910, train_loss=1.130] Validating: 0it [00:00, ?it/s] Epoch 39: 100%|██████████| 7/7 [00:00<00:00, 14.33it/s, loss=1.05, v_num=24, val_loss=2.370, train_loss=1.130] Epoch 40: 86%|████████▌ | 6/7 [00:00<00:00, 12.54it/s, loss=0.984, v_num=24, val_loss=2.370, train_loss=0.713] Validating: 0it [00:00, ?it/s] Epoch 40: 100%|██████████| 7/7 [00:00<00:00, 13.96it/s, loss=0.984, v_num=24, val_loss=1.630, train_loss=0.713] Epoch 41: 86%|████████▌ | 6/7 [00:00<00:00, 13.30it/s, loss=0.819, v_num=24, val_loss=1.630, train_loss=0.697] Validating: 0it [00:00, ?it/s] Epoch 41: 100%|██████████| 7/7 [00:00<00:00, 14.77it/s, loss=0.819, v_num=24, val_loss=1.300, train_loss=0.697] Epoch 42: 86%|████████▌ | 6/7 [00:00<00:00, 14.61it/s, loss=0.906, v_num=24, val_loss=1.300, train_loss=0.802] Validating: 0it [00:00, ?it/s] Epoch 42: 100%|██████████| 7/7 [00:00<00:00, 16.07it/s, loss=0.906, v_num=24, val_loss=1.570, train_loss=0.802] Epoch 43: 86%|████████▌ | 6/7 [00:00<00:00, 14.63it/s, loss=0.971, v_num=24, val_loss=1.570, train_loss=1.070] Validating: 0it [00:00, ?it/s] Epoch 43: 100%|██████████| 7/7 [00:00<00:00, 16.14it/s, loss=0.971, v_num=24, val_loss=0.752, train_loss=1.070] Epoch 44: 86%|████████▌ | 6/7 [00:00<00:00, 14.08it/s, loss=0.926, v_num=24, val_loss=0.752, train_loss=0.693] Validating: 0it [00:00, ?it/s] Epoch 44: 100%|██████████| 7/7 [00:00<00:00, 15.62it/s, loss=0.926, v_num=24, val_loss=1.120, train_loss=0.693] Epoch 45: 86%|████████▌ | 6/7 [00:00<00:00, 13.47it/s, loss=0.931, v_num=24, val_loss=1.120, train_loss=0.580] Validating: 0it [00:00, ?it/s] Epoch 45: 100%|██████████| 7/7 [00:00<00:00, 14.92it/s, loss=0.931, v_num=24, val_loss=2.540, train_loss=0.580] Epoch 46: 86%|████████▌ | 6/7 [00:00<00:00, 14.51it/s, loss=0.903, v_num=24, val_loss=2.540, train_loss=0.942] Validating: 0it [00:00, ?it/s] Epoch 46: 100%|██████████| 7/7 [00:00<00:00, 16.13it/s, loss=0.903, v_num=24, val_loss=2.130, train_loss=0.942] Epoch 47: 86%|████████▌ | 6/7 [00:00<00:00, 13.20it/s, loss=0.946, v_num=24, val_loss=2.130, train_loss=0.744] Validating: 0it [00:00, ?it/s] Epoch 47: 100%|██████████| 7/7 [00:00<00:00, 14.67it/s, loss=0.946, v_num=24, val_loss=2.130, train_loss=0.744] Epoch 48: 86%|████████▌ | 6/7 [00:00<00:00, 11.50it/s, loss=0.773, v_num=24, val_loss=2.130, train_loss=0.694] Validating: 0it [00:00, ?it/s] Epoch 48: 100%|██████████| 7/7 [00:00<00:00, 12.77it/s, loss=0.773, v_num=24, val_loss=2.050, train_loss=0.694] Epoch 49: 86%|████████▌ | 6/7 [00:00<00:00, 12.58it/s, loss=0.734, v_num=24, val_loss=2.050, train_loss=0.583] Validating: 0it [00:00, ?it/s] Epoch 49: 100%|██████████| 7/7 [00:00<00:00, 14.04it/s, loss=0.734, v_num=24, val_loss=2.890, train_loss=0.583] Epoch 50: 86%|████████▌ | 6/7 [00:00<00:00, 14.94it/s, loss=0.759, v_num=24, val_loss=2.890, train_loss=0.838] Validating: 0it [00:00, ?it/s] Epoch 50: 100%|██████████| 7/7 [00:00<00:00, 16.33it/s, loss=0.759, v_num=24, val_loss=2.270, train_loss=0.838] Epoch 51: 86%|████████▌ | 6/7 [00:00<00:00, 13.04it/s, loss=0.738, v_num=24, val_loss=2.270, train_loss=0.801] Validating: 0it [00:00, ?it/s] Epoch 51: 100%|██████████| 7/7 [00:00<00:00, 14.48it/s, loss=0.738, v_num=24, val_loss=3.080, train_loss=0.801] Epoch 52: 86%|████████▌ | 6/7 [00:00<00:00, 11.42it/s, loss=0.697, v_num=24, val_loss=3.080, train_loss=0.482] Validating: 0it [00:00, ?it/s] Epoch 52: 100%|██████████| 7/7 [00:00<00:00, 12.40it/s, loss=0.697, v_num=24, val_loss=2.680, train_loss=0.482] Epoch 53: 86%|████████▌ | 6/7 [00:00<00:00, 12.43it/s, loss=0.689, v_num=24, val_loss=2.680, train_loss=0.726] Validating: 0it [00:00, ?it/s] Epoch 53: 100%|██████████| 7/7 [00:00<00:00, 13.90it/s, loss=0.689, v_num=24, val_loss=4.100, train_loss=0.726] Epoch 54: 86%|████████▌ | 6/7 [00:00<00:00, 9.92it/s, loss=0.701, v_num=24, val_loss=4.100, train_loss=0.663] Validating: 0it [00:00, ?it/s] Epoch 54: 100%|██████████| 7/7 [00:00<00:00, 11.07it/s, loss=0.701, v_num=24, val_loss=2.820, train_loss=0.663] Epoch 55: 86%|████████▌ | 6/7 [00:00<00:00, 10.91it/s, loss=0.712, v_num=24, val_loss=2.820, train_loss=0.670] Validating: 0it [00:00, ?it/s] Epoch 55: 100%|██████████| 7/7 [00:00<00:00, 12.17it/s, loss=0.712, v_num=24, val_loss=4.220, train_loss=0.670] Epoch 56: 86%|████████▌ | 6/7 [00:00<00:00, 13.53it/s, loss=0.731, v_num=24, val_loss=4.220, train_loss=0.822] Validating: 0it [00:00, ?it/s] Epoch 56: 100%|██████████| 7/7 [00:00<00:00, 14.92it/s, loss=0.731, v_num=24, val_loss=0.705, train_loss=0.822] Epoch 57: 86%|████████▌ | 6/7 [00:00<00:00, 13.08it/s, loss=0.736, v_num=24, val_loss=0.705, train_loss=0.540] Validating: 0it [00:00, ?it/s] Epoch 57: 100%|██████████| 7/7 [00:00<00:00, 14.61it/s, loss=0.736, v_num=24, val_loss=2.040, train_loss=0.540] Epoch 58: 86%|████████▌ | 6/7 [00:00<00:00, 11.40it/s, loss=0.786, v_num=24, val_loss=2.040, train_loss=0.844] Validating: 0it [00:00, ?it/s] Epoch 58: 100%|██████████| 7/7 [00:00<00:00, 12.76it/s, loss=0.786, v_num=24, val_loss=2.770, train_loss=0.844] Epoch 59: 86%|████████▌ | 6/7 [00:00<00:00, 11.80it/s, loss=0.883, v_num=24, val_loss=2.770, train_loss=0.813] Validating: 0it [00:00, ?it/s] Epoch 59: 100%|██████████| 7/7 [00:00<00:00, 13.21it/s, loss=0.883, v_num=24, val_loss=2.680, train_loss=0.813] Epoch 60: 86%|████████▌ | 6/7 [00:00<00:00, 11.87it/s, loss=0.874, v_num=24, val_loss=2.680, train_loss=0.726] Validating: 0it [00:00, ?it/s] Epoch 60: 100%|██████████| 7/7 [00:00<00:00, 13.29it/s, loss=0.874, v_num=24, val_loss=1.730, train_loss=0.726] Epoch 61: 86%|████████▌ | 6/7 [00:00<00:00, 12.85it/s, loss=0.853, v_num=24, val_loss=1.730, train_loss=0.804] Validating: 0it [00:00, ?it/s] Epoch 61: 100%|██████████| 7/7 [00:00<00:00, 14.30it/s, loss=0.853, v_num=24, val_loss=0.964, train_loss=0.804] Epoch 62: 86%|████████▌ | 6/7 [00:00<00:00, 12.64it/s, loss=0.813, v_num=24, val_loss=0.964, train_loss=0.639] Validating: 0it [00:00, ?it/s] Epoch 62: 100%|██████████| 7/7 [00:00<00:00, 14.10it/s, loss=0.813, v_num=24, val_loss=3.420, train_loss=0.639] Epoch 63: 86%|████████▌ | 6/7 [00:00<00:00, 13.65it/s, loss=0.721, v_num=24, val_loss=3.420, train_loss=0.632] Validating: 0it [00:00, ?it/s] Epoch 63: 100%|██████████| 7/7 [00:00<00:00, 14.99it/s, loss=0.721, v_num=24, val_loss=0.618, train_loss=0.632] Epoch 64: 86%|████████▌ | 6/7 [00:00<00:00, 11.93it/s, loss=0.735, v_num=24, val_loss=0.618, train_loss=0.562] Validating: 0it [00:00, ?it/s] Epoch 64: 100%|██████████| 7/7 [00:00<00:00, 13.37it/s, loss=0.735, v_num=24, val_loss=2.180, train_loss=0.562] Epoch 65: 86%|████████▌ | 6/7 [00:00<00:00, 13.30it/s, loss=0.726, v_num=24, val_loss=2.180, train_loss=0.816] Validating: 0it [00:00, ?it/s] Epoch 65: 100%|██████████| 7/7 [00:00<00:00, 14.69it/s, loss=0.726, v_num=24, val_loss=0.863, train_loss=0.816] Epoch 66: 86%|████████▌ | 6/7 [00:00<00:00, 13.45it/s, loss=0.803, v_num=24, val_loss=0.863, train_loss=0.416] Validating: 0it [00:00, ?it/s] Epoch 66: 100%|██████████| 7/7 [00:00<00:00, 14.83it/s, loss=0.803, v_num=24, val_loss=2.730, train_loss=0.416] Epoch 67: 86%|████████▌ | 6/7 [00:00<00:00, 12.64it/s, loss=0.834, v_num=24, val_loss=2.730, train_loss=1.130] Validating: 0it [00:00, ?it/s] Epoch 67: 100%|██████████| 7/7 [00:00<00:00, 14.00it/s, loss=0.834, v_num=24, val_loss=1.910, train_loss=1.130] Epoch 68: 86%|████████▌ | 6/7 [00:00<00:00, 13.01it/s, loss=0.889, v_num=24, val_loss=1.910, train_loss=0.906] Validating: 0it [00:00, ?it/s] Epoch 68: 100%|██████████| 7/7 [00:00<00:00, 14.15it/s, loss=0.889, v_num=24, val_loss=2.780, train_loss=0.906] Epoch 69: 86%|████████▌ | 6/7 [00:00<00:00, 13.17it/s, loss=0.778, v_num=24, val_loss=2.780, train_loss=0.734] Validating: 0it [00:00, ?it/s] Epoch 69: 100%|██████████| 7/7 [00:00<00:00, 14.58it/s, loss=0.778, v_num=24, val_loss=1.650, train_loss=0.734] Epoch 70: 86%|████████▌ | 6/7 [00:00<00:00, 13.73it/s, loss=0.755, v_num=24, val_loss=1.650, train_loss=0.598] Validating: 0it [00:00, ?it/s] Epoch 70: 100%|██████████| 7/7 [00:00<00:00, 15.20it/s, loss=0.755, v_num=24, val_loss=0.878, train_loss=0.598] Epoch 71: 86%|████████▌ | 6/7 [00:00<00:00, 12.89it/s, loss=0.743, v_num=24, val_loss=0.878, train_loss=0.751] Validating: 0it [00:00, ?it/s] Epoch 71: 100%|██████████| 7/7 [00:00<00:00, 14.24it/s, loss=0.743, v_num=24, val_loss=3.950, train_loss=0.751] Epoch 72: 86%|████████▌ | 6/7 [00:00<00:00, 13.48it/s, loss=0.768, v_num=24, val_loss=3.950, train_loss=0.768] Validating: 0it [00:00, ?it/s] Epoch 72: 100%|██████████| 7/7 [00:00<00:00, 15.02it/s, loss=0.768, v_num=24, val_loss=2.490, train_loss=0.768] Epoch 73: 86%|████████▌ | 6/7 [00:00<00:00, 13.00it/s, loss=0.742, v_num=24, val_loss=2.490, train_loss=0.649] Validating: 0it [00:00, ?it/s] Epoch 73: 100%|██████████| 7/7 [00:00<00:00, 14.49it/s, loss=0.742, v_num=24, val_loss=4.750, train_loss=0.649] Epoch 74: 86%|████████▌ | 6/7 [00:00<00:00, 13.70it/s, loss=0.821, v_num=24, val_loss=4.750, train_loss=0.512] Validating: 0it [00:00, ?it/s] Epoch 74: 100%|██████████| 7/7 [00:00<00:00, 15.13it/s, loss=0.821, v_num=24, val_loss=2.910, train_loss=0.512] Epoch 75: 86%|████████▌ | 6/7 [00:00<00:00, 12.86it/s, loss=0.871, v_num=24, val_loss=2.910, train_loss=0.990] Validating: 0it [00:00, ?it/s] Epoch 75: 100%|██████████| 7/7 [00:00<00:00, 14.24it/s, loss=0.871, v_num=24, val_loss=2.790, train_loss=0.990] Epoch 76: 86%|████████▌ | 6/7 [00:00<00:00, 12.47it/s, loss=0.933, v_num=24, val_loss=2.790, train_loss=0.815] Validating: 0it [00:00, ?it/s] Epoch 76: 100%|██████████| 7/7 [00:00<00:00, 13.94it/s, loss=0.933, v_num=24, val_loss=2.410, train_loss=0.815] Epoch 77: 86%|████████▌ | 6/7 [00:00<00:00, 12.87it/s, loss=0.811, v_num=24, val_loss=2.410, train_loss=0.753] Validating: 0it [00:00, ?it/s] Epoch 77: 100%|██████████| 7/7 [00:00<00:00, 14.30it/s, loss=0.811, v_num=24, val_loss=1.600, train_loss=0.753] Epoch 78: 86%|████████▌ | 6/7 [00:00<00:00, 11.34it/s, loss=0.723, v_num=24, val_loss=1.600, train_loss=0.534] Validating: 0it [00:00, ?it/s] Epoch 78: 100%|██████████| 7/7 [00:00<00:00, 12.63it/s, loss=0.723, v_num=24, val_loss=2.090, train_loss=0.534] Epoch 79: 86%|████████▌ | 6/7 [00:00<00:00, 11.21it/s, loss=0.662, v_num=24, val_loss=2.090, train_loss=0.669] Validating: 0it [00:00, ?it/s] Epoch 79: 100%|██████████| 7/7 [00:00<00:00, 12.43it/s, loss=0.662, v_num=24, val_loss=2.160, train_loss=0.669] Epoch 80: 86%|████████▌ | 6/7 [00:00<00:00, 12.80it/s, loss=0.69, v_num=24, val_loss=2.160, train_loss=0.665] Validating: 0it [00:00, ?it/s] Epoch 80: 100%|██████████| 7/7 [00:00<00:00, 14.17it/s, loss=0.69, v_num=24, val_loss=2.730, train_loss=0.665] Epoch 81: 86%|████████▌ | 6/7 [00:00<00:00, 13.03it/s, loss=0.763, v_num=24, val_loss=2.730, train_loss=0.675] Validating: 0it [00:00, ?it/s] Epoch 81: 100%|██████████| 7/7 [00:00<00:00, 14.46it/s, loss=0.763, v_num=24, val_loss=2.470, train_loss=0.675] Epoch 82: 86%|████████▌ | 6/7 [00:00<00:00, 12.90it/s, loss=0.911, v_num=24, val_loss=2.470, train_loss=0.850] Validating: 0it [00:00, ?it/s] Epoch 82: 100%|██████████| 7/7 [00:00<00:00, 14.34it/s, loss=0.911, v_num=24, val_loss=1.790, train_loss=0.850] Epoch 83: 86%|████████▌ | 6/7 [00:00<00:00, 12.90it/s, loss=0.949, v_num=24, val_loss=1.790, train_loss=0.931] Validating: 0it [00:00, ?it/s] Epoch 83: 100%|██████████| 7/7 [00:00<00:00, 14.28it/s, loss=0.949, v_num=24, val_loss=3.270, train_loss=0.931] Epoch 84: 86%|████████▌ | 6/7 [00:00<00:00, 12.90it/s, loss=0.913, v_num=24, val_loss=3.270, train_loss=0.752] Validating: 0it [00:00, ?it/s] Epoch 84: 100%|██████████| 7/7 [00:00<00:00, 14.33it/s, loss=0.913, v_num=24, val_loss=1.330, train_loss=0.752] Epoch 85: 86%|████████▌ | 6/7 [00:00<00:00, 12.97it/s, loss=0.909, v_num=24, val_loss=1.330, train_loss=0.743] Validating: 0it [00:00, ?it/s] Epoch 85: 100%|██████████| 7/7 [00:00<00:00, 14.39it/s, loss=0.909, v_num=24, val_loss=2.120, train_loss=0.743] Epoch 86: 86%|████████▌ | 6/7 [00:00<00:00, 11.83it/s, loss=0.892, v_num=24, val_loss=2.120, train_loss=0.875] Validating: 0it [00:00, ?it/s] Epoch 86: 100%|██████████| 7/7 [00:00<00:00, 13.21it/s, loss=0.892, v_num=24, val_loss=2.000, train_loss=0.875] Epoch 87: 86%|████████▌ | 6/7 [00:00<00:00, 10.71it/s, loss=0.8, v_num=24, val_loss=2.000, train_loss=0.655] Validating: 0it [00:00, ?it/s] Epoch 87: 100%|██████████| 7/7 [00:00<00:00, 11.84it/s, loss=0.8, v_num=24, val_loss=2.250, train_loss=0.655] Epoch 88: 86%|████████▌ | 6/7 [00:00<00:00, 10.43it/s, loss=0.851, v_num=24, val_loss=2.250, train_loss=0.710] Validating: 0it [00:00, ?it/s] Epoch 88: 100%|██████████| 7/7 [00:00<00:00, 11.57it/s, loss=0.851, v_num=24, val_loss=0.758, train_loss=0.710] Epoch 89: 86%|████████▌ | 6/7 [00:00<00:00, 10.17it/s, loss=0.864, v_num=24, val_loss=0.758, train_loss=0.847] Validating: 0it [00:00, ?it/s] Epoch 89: 100%|██████████| 7/7 [00:00<00:00, 11.19it/s, loss=0.864, v_num=24, val_loss=1.470, train_loss=0.847] Epoch 90: 86%|████████▌ | 6/7 [00:00<00:00, 13.11it/s, loss=0.846, v_num=24, val_loss=1.470, train_loss=0.816] Validating: 0it [00:00, ?it/s] Epoch 90: 100%|██████████| 7/7 [00:00<00:00, 14.51it/s, loss=0.846, v_num=24, val_loss=2.560, train_loss=0.816] Epoch 91: 86%|████████▌ | 6/7 [00:00<00:00, 10.03it/s, loss=0.909, v_num=24, val_loss=2.560, train_loss=0.705] Validating: 0it [00:00, ?it/s] Epoch 91: 100%|██████████| 7/7 [00:00<00:00, 11.05it/s, loss=0.909, v_num=24, val_loss=2.680, train_loss=0.705] Epoch 92: 86%|████████▌ | 6/7 [00:00<00:00, 11.44it/s, loss=0.887, v_num=24, val_loss=2.680, train_loss=1.070] Validating: 0it [00:00, ?it/s] Epoch 92: 100%|██████████| 7/7 [00:00<00:00, 12.67it/s, loss=0.887, v_num=24, val_loss=2.890, train_loss=1.070] Epoch 93: 86%|████████▌ | 6/7 [00:00<00:00, 11.74it/s, loss=0.827, v_num=24, val_loss=2.890, train_loss=0.628] Validating: 0it [00:00, ?it/s] Epoch 93: 100%|██████████| 7/7 [00:00<00:00, 13.00it/s, loss=0.827, v_num=24, val_loss=1.550, train_loss=0.628] Epoch 93: 100%|██████████| 7/7 [00:00<00:00, 12.43it/s, loss=0.827, v_num=24, val_loss=1.550, train_loss=0.620] tensor([[[417.0000], [391.0000], [419.0000], [461.0000], [472.0000], [535.0000], [622.0000], [606.0000], [508.0000], [461.0000], [390.0000], [432.0000]], [[314.3913], [305.7869], [300.9393], [293.1549], [295.4145], [318.7093], [316.6139], [312.3857], [319.6606], [308.3625], [300.6173], [284.2262]]], dtype=torch.float64) MAE is: tensor(170.3115, dtype=torch.float64)