David John Gagne
The goal of this notebook is to provide an introductory example showing how deep learning could be used to calculate information on a thermodynamic diagram.
%matplotlib inline
import numpy as np
import pandas as pd
from metpy.calc import dry_lapse, moist_lapse, saturation_mixing_ratio
from metpy.plots import SkewT
import pint
import matplotlib.pyplot as plt
from keras.layers import Dense, Input, Activation, Conv1D, AveragePooling1D, Reshape, Flatten, Dropout, AlphaDropout, LeakyReLU
from keras.models import Model
from keras.regularizers import l2
from keras.optimizers import SGD
from metpy.constants import Cp_d, epsilon, g, kappa, Lv, P0, Rd
from metpy.calc.thermo import *
The moist adiabat or pseudo-adiabat is the temperature trajectory taken by a saturated parcel as it ascends in the atmosphere. The change in temperature with pressue, or moist adiabatic lapse rate is
\begin{equation} \frac{dT}{dP} = \frac{1}{P} \frac{R_d T + L_v r_s}{C_{pd} + \frac{L_v^2 r_s \epsilon}{R_d T^2}} \end{equation}The equation does not have an analytic solution and must be integrated numerically. We do this below for a range of temperatures and a fixed set of pressure values.
ureg = pint.UnitRegistry()
train_temps = np.arange(230, 330, 2) * ureg.K
test_temps = np.arange(231, 331, 2) * ureg.K
pressures = np.arange(100, 1020, 20)[::-1] * ureg.hPa
print(train_temps.shape, pressures.shape)
(50,) (46,)
train_data = np.zeros((train_temps.size, pressures.size))
test_data = np.zeros((test_temps.size, pressures.size))
for t, temp in enumerate(train_temps):
print(temp)
train_data[t] = moist_lapse(pressures, temp)
for t, temp in enumerate(test_temps):
print(temp)
test_data[t] = moist_lapse(pressures, temp)
230 kelvin 232 kelvin 234 kelvin 236 kelvin 238 kelvin 240 kelvin 242 kelvin 244 kelvin 246 kelvin 248 kelvin 250 kelvin 252 kelvin 254 kelvin 256 kelvin 258 kelvin 260 kelvin 262 kelvin 264 kelvin 266 kelvin 268 kelvin 270 kelvin 272 kelvin 274 kelvin 276 kelvin 278 kelvin 280 kelvin 282 kelvin 284 kelvin 286 kelvin 288 kelvin 290 kelvin 292 kelvin 294 kelvin 296 kelvin 298 kelvin 300 kelvin 302 kelvin 304 kelvin 306 kelvin 308 kelvin 310 kelvin 312 kelvin 314 kelvin 316 kelvin 318 kelvin 320 kelvin 322 kelvin 324 kelvin 326 kelvin 328 kelvin 231 kelvin 233 kelvin 235 kelvin 237 kelvin 239 kelvin 241 kelvin 243 kelvin 245 kelvin 247 kelvin 249 kelvin 251 kelvin 253 kelvin 255 kelvin 257 kelvin 259 kelvin 261 kelvin 263 kelvin 265 kelvin 267 kelvin 269 kelvin 271 kelvin 273 kelvin 275 kelvin 277 kelvin 279 kelvin 281 kelvin 283 kelvin 285 kelvin 287 kelvin 289 kelvin 291 kelvin 293 kelvin 295 kelvin 297 kelvin 299 kelvin 301 kelvin 303 kelvin 305 kelvin 307 kelvin 309 kelvin 311 kelvin 313 kelvin 315 kelvin 317 kelvin 319 kelvin 321 kelvin 323 kelvin 325 kelvin 327 kelvin 329 kelvin
l_mean = train_data.mean(axis=0)
l_sd = train_data.std(axis=0)
t_mean = train_temps.m.mean()
t_sd = train_temps.m.std()
norm_train_data = (train_data - l_mean) / l_sd
norm_train_input = (train_temps.m.reshape(-1, 1) - t_mean) / t_sd
norm_test_input = (test_temps.m.reshape(-1, 1) - t_mean) / t_sd
nn_moist_in = Input(shape=(1,))
nn_moist_lapse = Dense(46 * 4,)(nn_moist_in)
nn_moist_lapse = LeakyReLU(0.1)(nn_moist_lapse)
nn_moist_lapse = Reshape((46 * 4, 1))(nn_moist_lapse)
nn_moist_lapse = Conv1D(16, 5, padding="same")(nn_moist_lapse)
nn_moist_lapse = LeakyReLU(0.1)(nn_moist_lapse)
nn_moist_lapse = AveragePooling1D()(nn_moist_lapse)
nn_moist_lapse = Conv1D(24, 5, padding="same")(nn_moist_lapse)
nn_moist_lapse = LeakyReLU(0.1)(nn_moist_lapse)
nn_moist_lapse = AveragePooling1D()(nn_moist_lapse)
nn_moist_lapse = Conv1D(32, 5, padding="same")(nn_moist_lapse)
nn_moist_lapse = LeakyReLU(0.1)(nn_moist_lapse)
nn_moist_lapse = Conv1D(1, 5, padding="same")(nn_moist_lapse)
nn_moist_lapse = Flatten()(nn_moist_lapse)
nn_moist_mod = Model(nn_moist_in, nn_moist_lapse)
opt = SGD(lr=0.001, momentum=0.99, decay=1e-6, nesterov=True)
nn_moist_mod.compile("adam", "mse")
nn_moist_mod.summary()
_________________________________________________________________ Layer (type) Output Shape Param # ================================================================= input_42 (InputLayer) (None, 1) 0 _________________________________________________________________ dense_90 (Dense) (None, 184) 368 _________________________________________________________________ reshape_17 (Reshape) (None, 184, 1) 0 _________________________________________________________________ conv1d_45 (Conv1D) (None, 184, 16) 96 _________________________________________________________________ average_pooling1d_28 (Averag (None, 92, 16) 0 _________________________________________________________________ conv1d_46 (Conv1D) (None, 92, 24) 1944 _________________________________________________________________ average_pooling1d_29 (Averag (None, 46, 24) 0 _________________________________________________________________ conv1d_47 (Conv1D) (None, 46, 32) 3872 _________________________________________________________________ conv1d_48 (Conv1D) (None, 46, 1) 161 _________________________________________________________________ flatten_11 (Flatten) (None, 46) 0 ================================================================= Total params: 6,441 Trainable params: 6,441 Non-trainable params: 0 _________________________________________________________________
nn_moist_mod.fit(norm_train_input, norm_train_data, epochs=500,batch_size=5)
Epoch 1/500 50/50 [==============================] - 0s - loss: 1.0025 Epoch 2/500 50/50 [==============================] - 0s - loss: 0.9908 Epoch 3/500 50/50 [==============================] - 0s - loss: 0.9686 Epoch 4/500 50/50 [==============================] - 0s - loss: 0.8758 Epoch 5/500 50/50 [==============================] - 0s - loss: 0.6228 Epoch 6/500 50/50 [==============================] - 0s - loss: 0.3613 Epoch 7/500 50/50 [==============================] - 0s - loss: 0.1985 Epoch 8/500 50/50 [==============================] - 0s - loss: 0.1369 Epoch 9/500 50/50 [==============================] - 0s - loss: 0.0917 Epoch 10/500 50/50 [==============================] - 0s - loss: 0.0664 Epoch 11/500 50/50 [==============================] - 0s - loss: 0.0537 Epoch 12/500 50/50 [==============================] - 0s - loss: 0.0507 Epoch 13/500 50/50 [==============================] - 0s - loss: 0.0455 Epoch 14/500 50/50 [==============================] - 0s - loss: 0.0379 Epoch 15/500 50/50 [==============================] - 0s - loss: 0.0321 Epoch 16/500 50/50 [==============================] - 0s - loss: 0.0294 Epoch 17/500 50/50 [==============================] - 0s - loss: 0.0243 Epoch 18/500 50/50 [==============================] - 0s - loss: 0.0211 Epoch 19/500 50/50 [==============================] - 0s - loss: 0.0187 Epoch 20/500 50/50 [==============================] - 0s - loss: 0.0172 Epoch 21/500 50/50 [==============================] - 0s - loss: 0.0160 Epoch 22/500 50/50 [==============================] - 0s - loss: 0.0148 Epoch 23/500 50/50 [==============================] - 0s - loss: 0.0140 Epoch 24/500 50/50 [==============================] - 0s - loss: 0.0133 Epoch 25/500 50/50 [==============================] - 0s - loss: 0.0135 Epoch 26/500 50/50 [==============================] - 0s - loss: 0.0127 Epoch 27/500 50/50 [==============================] - 0s - loss: 0.0126 Epoch 28/500 50/50 [==============================] - 0s - loss: 0.0115 Epoch 29/500 50/50 [==============================] - 0s - loss: 0.0107 Epoch 30/500 50/50 [==============================] - 0s - loss: 0.0104 Epoch 31/500 50/50 [==============================] - 0s - loss: 0.0102 Epoch 32/500 50/50 [==============================] - 0s - loss: 0.0092 Epoch 33/500 50/50 [==============================] - 0s - loss: 0.0086 Epoch 34/500 50/50 [==============================] - 0s - loss: 0.0083 Epoch 35/500 50/50 [==============================] - 0s - loss: 0.0080 Epoch 36/500 50/50 [==============================] - 0s - loss: 0.0079 Epoch 37/500 50/50 [==============================] - 0s - loss: 0.0075 Epoch 38/500 50/50 [==============================] - 0s - loss: 0.0072 Epoch 39/500 50/50 [==============================] - 0s - loss: 0.0075 Epoch 40/500 50/50 [==============================] - 0s - loss: 0.0077 Epoch 41/500 50/50 [==============================] - 0s - loss: 0.0069 Epoch 42/500 50/50 [==============================] - 0s - loss: 0.0065 Epoch 43/500 50/50 [==============================] - 0s - loss: 0.0060 Epoch 44/500 50/50 [==============================] - 0s - loss: 0.0058 Epoch 45/500 50/50 [==============================] - 0s - loss: 0.0056 Epoch 46/500 50/50 [==============================] - 0s - loss: 0.0054 Epoch 47/500 50/50 [==============================] - 0s - loss: 0.0054 Epoch 48/500 50/50 [==============================] - 0s - loss: 0.0056 Epoch 49/500 50/50 [==============================] - 0s - loss: 0.0050 Epoch 50/500 50/50 [==============================] - 0s - loss: 0.0052 Epoch 51/500 50/50 [==============================] - 0s - loss: 0.0046 Epoch 52/500 50/50 [==============================] - 0s - loss: 0.0044 Epoch 53/500 50/50 [==============================] - 0s - loss: 0.0042 Epoch 54/500 50/50 [==============================] - 0s - loss: 0.0040 Epoch 55/500 50/50 [==============================] - 0s - loss: 0.0039 Epoch 56/500 50/50 [==============================] - 0s - loss: 0.0038 Epoch 57/500 50/50 [==============================] - 0s - loss: 0.0037 Epoch 58/500 50/50 [==============================] - 0s - loss: 0.0038 Epoch 59/500 50/50 [==============================] - 0s - loss: 0.0034 Epoch 60/500 50/50 [==============================] - 0s - loss: 0.0035 Epoch 61/500 50/50 [==============================] - 0s - loss: 0.0036 Epoch 62/500 50/50 [==============================] - 0s - loss: 0.0034 Epoch 63/500 50/50 [==============================] - 0s - loss: 0.0031 Epoch 64/500 50/50 [==============================] - 0s - loss: 0.0031 Epoch 65/500 50/50 [==============================] - 0s - loss: 0.0028 Epoch 66/500 50/50 [==============================] - 0s - loss: 0.0027 Epoch 67/500 50/50 [==============================] - 0s - loss: 0.0025 Epoch 68/500 50/50 [==============================] - 0s - loss: 0.0028 Epoch 69/500 50/50 [==============================] - 0s - loss: 0.0026 Epoch 70/500 50/50 [==============================] - 0s - loss: 0.0026 Epoch 71/500 50/50 [==============================] - 0s - loss: 0.0024 Epoch 72/500 50/50 [==============================] - 0s - loss: 0.0025 Epoch 73/500 50/50 [==============================] - 0s - loss: 0.0023 Epoch 74/500 50/50 [==============================] - 0s - loss: 0.0021 Epoch 75/500 50/50 [==============================] - 0s - loss: 0.0021 - ETA: 0s - loss: 0.002 Epoch 76/500 50/50 [==============================] - 0s - loss: 0.0022 Epoch 77/500 50/50 [==============================] - 0s - loss: 0.0032 Epoch 78/500 50/50 [==============================] - 0s - loss: 0.0071 Epoch 79/500 50/50 [==============================] - 0s - loss: 0.0109 Epoch 80/500 50/50 [==============================] - 0s - loss: 0.0062 Epoch 81/500 50/50 [==============================] - 0s - loss: 0.0036 Epoch 82/500 50/50 [==============================] - 0s - loss: 0.0032 Epoch 83/500 50/50 [==============================] - 0s - loss: 0.0033 Epoch 84/500 50/50 [==============================] - 0s - loss: 0.0031 Epoch 85/500 50/50 [==============================] - 0s - loss: 0.0018 Epoch 86/500 50/50 [==============================] - 0s - loss: 0.0016 Epoch 87/500 50/50 [==============================] - 0s - loss: 0.0016 Epoch 88/500 50/50 [==============================] - 0s - loss: 0.0016 Epoch 89/500 50/50 [==============================] - 0s - loss: 0.0014 Epoch 90/500 50/50 [==============================] - 0s - loss: 0.0014 Epoch 91/500 50/50 [==============================] - 0s - loss: 0.0013 Epoch 92/500 50/50 [==============================] - 0s - loss: 0.0013 Epoch 93/500 50/50 [==============================] - 0s - loss: 0.0013 Epoch 94/500 50/50 [==============================] - 0s - loss: 0.0013 Epoch 95/500 50/50 [==============================] - 0s - loss: 0.0012 Epoch 96/500 50/50 [==============================] - 0s - loss: 0.0012 Epoch 97/500 50/50 [==============================] - 0s - loss: 0.0012 Epoch 98/500 50/50 [==============================] - 0s - loss: 0.0012 Epoch 99/500 50/50 [==============================] - 0s - loss: 0.0012 Epoch 100/500 50/50 [==============================] - 0s - loss: 0.0011 Epoch 101/500 50/50 [==============================] - 0s - loss: 0.0011 Epoch 102/500 50/50 [==============================] - 0s - loss: 0.0010 Epoch 103/500 50/50 [==============================] - 0s - loss: 9.9540e-04 Epoch 104/500 50/50 [==============================] - 0s - loss: 0.0012 Epoch 105/500 50/50 [==============================] - 0s - loss: 0.0010 Epoch 106/500 50/50 [==============================] - 0s - loss: 9.3900e-04 Epoch 107/500 50/50 [==============================] - 0s - loss: 8.6306e-04 Epoch 108/500 50/50 [==============================] - 0s - loss: 9.7012e-04 Epoch 109/500 50/50 [==============================] - 0s - loss: 8.7211e-04 Epoch 110/500 50/50 [==============================] - 0s - loss: 8.2063e-04 Epoch 111/500 50/50 [==============================] - 0s - loss: 8.4548e-04 Epoch 112/500 50/50 [==============================] - 0s - loss: 8.4234e-04 Epoch 113/500 50/50 [==============================] - 0s - loss: 8.3152e-04 Epoch 114/500 50/50 [==============================] - 0s - loss: 7.2001e-04 Epoch 115/500 50/50 [==============================] - 0s - loss: 7.1898e-04 Epoch 116/500 50/50 [==============================] - 0s - loss: 7.3957e-04 Epoch 117/500 50/50 [==============================] - 0s - loss: 6.6625e-04 Epoch 118/500 50/50 [==============================] - 0s - loss: 6.4070e-04 Epoch 119/500 50/50 [==============================] - 0s - loss: 6.3508e-04 Epoch 120/500 50/50 [==============================] - 0s - loss: 6.2142e-04 Epoch 121/500 50/50 [==============================] - 0s - loss: 6.2765e-04 Epoch 122/500 50/50 [==============================] - 0s - loss: 5.8295e-04 Epoch 123/500 50/50 [==============================] - 0s - loss: 6.0148e-04 Epoch 124/500 50/50 [==============================] - 0s - loss: 6.2649e-04 Epoch 125/500 50/50 [==============================] - 0s - loss: 6.5747e-04 Epoch 126/500 50/50 [==============================] - 0s - loss: 5.8412e-04 Epoch 127/500 50/50 [==============================] - 0s - loss: 5.8410e-04 Epoch 128/500 50/50 [==============================] - 0s - loss: 5.7684e-04 Epoch 129/500 50/50 [==============================] - 0s - loss: 5.5215e-04 Epoch 130/500 50/50 [==============================] - 0s - loss: 5.0752e-04 Epoch 131/500 50/50 [==============================] - 0s - loss: 6.2825e-04 Epoch 132/500 50/50 [==============================] - 0s - loss: 5.9073e-04 Epoch 133/500 50/50 [==============================] - 0s - loss: 5.2371e-04 Epoch 134/500 50/50 [==============================] - 0s - loss: 5.3094e-04 Epoch 135/500 50/50 [==============================] - 0s - loss: 5.5685e-04 Epoch 136/500 50/50 [==============================] - 0s - loss: 6.0214e-04 Epoch 137/500 50/50 [==============================] - 0s - loss: 5.5475e-04 Epoch 138/500 50/50 [==============================] - 0s - loss: 6.0385e-04 Epoch 139/500 50/50 [==============================] - 0s - loss: 6.2732e-04 Epoch 140/500 50/50 [==============================] - 0s - loss: 5.3687e-04 Epoch 141/500 50/50 [==============================] - 0s - loss: 4.6819e-04 Epoch 142/500 50/50 [==============================] - 0s - loss: 4.2603e-04 Epoch 143/500 50/50 [==============================] - 0s - loss: 4.3863e-04 Epoch 144/500 50/50 [==============================] - 0s - loss: 4.7734e-04 Epoch 145/500 50/50 [==============================] - 0s - loss: 4.7682e-04 Epoch 146/500 50/50 [==============================] - 0s - loss: 6.8893e-04 Epoch 147/500 50/50 [==============================] - 0s - loss: 6.0450e-04 Epoch 148/500 50/50 [==============================] - 0s - loss: 7.4836e-04 Epoch 149/500 50/50 [==============================] - 0s - loss: 6.4839e-04 Epoch 150/500 50/50 [==============================] - 0s - loss: 4.3505e-04 Epoch 151/500 50/50 [==============================] - 0s - loss: 4.6765e-04 Epoch 152/500 50/50 [==============================] - 0s - loss: 7.7781e-04 Epoch 153/500 50/50 [==============================] - 0s - loss: 4.4484e-04 Epoch 154/500 50/50 [==============================] - 0s - loss: 3.9103e-04 Epoch 155/500 50/50 [==============================] - 0s - loss: 3.6901e-04 Epoch 156/500 50/50 [==============================] - 0s - loss: 3.9295e-04 Epoch 157/500 50/50 [==============================] - 0s - loss: 5.4332e-04 Epoch 158/500 50/50 [==============================] - 0s - loss: 5.0417e-04 Epoch 159/500 50/50 [==============================] - 0s - loss: 3.8884e-04 Epoch 160/500 50/50 [==============================] - 0s - loss: 5.1077e-04 Epoch 161/500 50/50 [==============================] - 0s - loss: 5.1659e-04 Epoch 162/500 50/50 [==============================] - 0s - loss: 4.2155e-04 Epoch 163/500 50/50 [==============================] - 0s - loss: 4.1924e-04 Epoch 164/500 50/50 [==============================] - 0s - loss: 4.5399e-04 Epoch 165/500 50/50 [==============================] - 0s - loss: 4.4368e-04 Epoch 166/500 50/50 [==============================] - 0s - loss: 6.7781e-04 Epoch 167/500 50/50 [==============================] - 0s - loss: 8.0861e-04 Epoch 168/500 50/50 [==============================] - 0s - loss: 7.2386e-04 Epoch 169/500 50/50 [==============================] - 0s - loss: 6.6802e-04 Epoch 170/500 50/50 [==============================] - 0s - loss: 7.4168e-04 Epoch 171/500 50/50 [==============================] - 0s - loss: 7.4797e-04 Epoch 172/500 50/50 [==============================] - 0s - loss: 8.7365e-04 Epoch 173/500 50/50 [==============================] - 0s - loss: 0.0012 Epoch 174/500 50/50 [==============================] - 0s - loss: 0.0015 Epoch 175/500 50/50 [==============================] - 0s - loss: 9.7627e-04 Epoch 176/500 50/50 [==============================] - 0s - loss: 0.0012 Epoch 177/500 50/50 [==============================] - 0s - loss: 0.0030 Epoch 178/500 50/50 [==============================] - 0s - loss: 0.0049 Epoch 179/500 50/50 [==============================] - 0s - loss: 0.0048 Epoch 180/500 50/50 [==============================] - 0s - loss: 0.0040 Epoch 181/500 50/50 [==============================] - 0s - loss: 0.0018 Epoch 182/500 50/50 [==============================] - 0s - loss: 0.0012 Epoch 183/500 50/50 [==============================] - 0s - loss: 6.2884e-04 Epoch 184/500 50/50 [==============================] - 0s - loss: 5.2463e-04 Epoch 185/500 50/50 [==============================] - 0s - loss: 4.0351e-04 Epoch 186/500 50/50 [==============================] - 0s - loss: 4.0223e-04 Epoch 187/500 50/50 [==============================] - 0s - loss: 3.1661e-04 Epoch 188/500 50/50 [==============================] - 0s - loss: 2.9531e-04 Epoch 189/500 50/50 [==============================] - 0s - loss: 3.2701e-04 Epoch 190/500 50/50 [==============================] - 0s - loss: 3.2263e-04 Epoch 191/500 50/50 [==============================] - 0s - loss: 2.8106e-04 Epoch 192/500 50/50 [==============================] - 0s - loss: 3.2185e-04 Epoch 193/500 50/50 [==============================] - 0s - loss: 3.5287e-04 Epoch 194/500 50/50 [==============================] - 0s - loss: 4.5820e-04 Epoch 195/500 50/50 [==============================] - 0s - loss: 4.4261e-04 Epoch 196/500 50/50 [==============================] - 0s - loss: 2.9419e-04 Epoch 197/500 50/50 [==============================] - 0s - loss: 3.0149e-04 Epoch 198/500 50/50 [==============================] - 0s - loss: 3.0429e-04 Epoch 199/500 50/50 [==============================] - 0s - loss: 3.2660e-04 Epoch 200/500 50/50 [==============================] - 0s - loss: 3.3344e-04 Epoch 201/500 50/50 [==============================] - 0s - loss: 3.1503e-04 Epoch 202/500 50/50 [==============================] - 0s - loss: 3.2051e-04 Epoch 203/500 50/50 [==============================] - 0s - loss: 3.4153e-04 Epoch 204/500 50/50 [==============================] - 0s - loss: 2.9351e-04 Epoch 205/500 50/50 [==============================] - 0s - loss: 2.9367e-04 Epoch 206/500 50/50 [==============================] - 0s - loss: 4.2652e-04 Epoch 207/500 50/50 [==============================] - 0s - loss: 3.2714e-04 Epoch 208/500 50/50 [==============================] - 0s - loss: 2.5145e-04 Epoch 209/500 50/50 [==============================] - 0s - loss: 2.4544e-04 Epoch 210/500 50/50 [==============================] - 0s - loss: 2.3658e-04 Epoch 211/500 50/50 [==============================] - 0s - loss: 2.5982e-04 Epoch 212/500 50/50 [==============================] - 0s - loss: 2.5750e-04 Epoch 213/500 50/50 [==============================] - 0s - loss: 2.6585e-04 Epoch 214/500 50/50 [==============================] - 0s - loss: 2.3055e-04 Epoch 215/500 50/50 [==============================] - 0s - loss: 2.3492e-04 Epoch 216/500 50/50 [==============================] - 0s - loss: 2.6619e-04 Epoch 217/500 50/50 [==============================] - 0s - loss: 3.6358e-04 Epoch 218/500 50/50 [==============================] - 0s - loss: 3.1374e-04 Epoch 219/500 50/50 [==============================] - 0s - loss: 3.2507e-04 Epoch 220/500 50/50 [==============================] - 0s - loss: 3.0830e-04 Epoch 221/500 50/50 [==============================] - 0s - loss: 5.8492e-04 Epoch 222/500 50/50 [==============================] - 0s - loss: 0.0011 Epoch 223/500 50/50 [==============================] - 0s - loss: 4.5097e-04 Epoch 224/500 50/50 [==============================] - 0s - loss: 3.2624e-04 Epoch 225/500 50/50 [==============================] - 0s - loss: 4.2638e-04 Epoch 226/500 50/50 [==============================] - 0s - loss: 6.6101e-04 Epoch 227/500 50/50 [==============================] - 0s - loss: 4.8701e-04 Epoch 228/500 50/50 [==============================] - 0s - loss: 2.9974e-04 Epoch 229/500 50/50 [==============================] - 0s - loss: 3.0616e-04 Epoch 230/500 50/50 [==============================] - 0s - loss: 3.3078e-04 Epoch 231/500 50/50 [==============================] - 0s - loss: 3.0372e-04 Epoch 232/500 50/50 [==============================] - 0s - loss: 2.8556e-04 Epoch 233/500 50/50 [==============================] - 0s - loss: 2.3768e-04 Epoch 234/500 50/50 [==============================] - 0s - loss: 2.3714e-04 Epoch 235/500 50/50 [==============================] - 0s - loss: 2.0852e-04 Epoch 236/500 50/50 [==============================] - 0s - loss: 2.1143e-04 Epoch 237/500 50/50 [==============================] - 0s - loss: 2.1716e-04 Epoch 238/500 50/50 [==============================] - 0s - loss: 2.2629e-04 Epoch 239/500 50/50 [==============================] - 0s - loss: 2.4910e-04 Epoch 240/500 50/50 [==============================] - 0s - loss: 2.3781e-04 Epoch 241/500 50/50 [==============================] - 0s - loss: 2.0425e-04 Epoch 242/500 50/50 [==============================] - 0s - loss: 1.9270e-04 Epoch 243/500 50/50 [==============================] - 0s - loss: 1.8579e-04 Epoch 244/500 50/50 [==============================] - 0s - loss: 1.9801e-04 Epoch 245/500 50/50 [==============================] - 0s - loss: 2.1311e-04 Epoch 246/500 50/50 [==============================] - 0s - loss: 2.9330e-04 Epoch 247/500 50/50 [==============================] - 0s - loss: 3.4217e-04 Epoch 248/500 50/50 [==============================] - 0s - loss: 3.3469e-04 Epoch 249/500 50/50 [==============================] - 0s - loss: 6.2751e-04 Epoch 250/500 50/50 [==============================] - 0s - loss: 0.0010 Epoch 251/500 50/50 [==============================] - 0s - loss: 0.0019 Epoch 252/500 50/50 [==============================] - 0s - loss: 0.0018 Epoch 253/500 50/50 [==============================] - 0s - loss: 8.2607e-04 Epoch 254/500 50/50 [==============================] - 0s - loss: 9.7295e-04 Epoch 255/500 50/50 [==============================] - 0s - loss: 8.9717e-04 Epoch 256/500 50/50 [==============================] - 0s - loss: 0.0012 Epoch 257/500 50/50 [==============================] - 0s - loss: 4.6826e-04 Epoch 258/500 50/50 [==============================] - 0s - loss: 5.2367e-04 Epoch 259/500 50/50 [==============================] - 0s - loss: 4.3869e-04 Epoch 260/500 50/50 [==============================] - 0s - loss: 3.1204e-04 Epoch 261/500 50/50 [==============================] - 0s - loss: 2.8442e-04 Epoch 262/500 50/50 [==============================] - 0s - loss: 3.4017e-04 Epoch 263/500 50/50 [==============================] - 0s - loss: 2.3892e-04 Epoch 264/500 50/50 [==============================] - 0s - loss: 1.6401e-04 Epoch 265/500 50/50 [==============================] - 0s - loss: 1.7688e-04 Epoch 266/500 50/50 [==============================] - 0s - loss: 1.8120e-04 Epoch 267/500 50/50 [==============================] - 0s - loss: 1.9500e-04 Epoch 268/500 50/50 [==============================] - 0s - loss: 2.1498e-04 Epoch 269/500 50/50 [==============================] - 0s - loss: 2.2383e-04 Epoch 270/500 50/50 [==============================] - 0s - loss: 3.5013e-04 Epoch 271/500 50/50 [==============================] - 0s - loss: 2.8964e-04 Epoch 272/500 50/50 [==============================] - 0s - loss: 2.4384e-04 Epoch 273/500 50/50 [==============================] - 0s - loss: 2.0750e-04 Epoch 274/500 50/50 [==============================] - 0s - loss: 1.9713e-04 Epoch 275/500 50/50 [==============================] - 0s - loss: 1.9325e-04 Epoch 276/500 50/50 [==============================] - 0s - loss: 1.7192e-04 Epoch 277/500 50/50 [==============================] - 0s - loss: 2.0703e-04 Epoch 278/500 50/50 [==============================] - 0s - loss: 1.7470e-04 Epoch 279/500 50/50 [==============================] - 0s - loss: 1.9346e-04 Epoch 280/500 50/50 [==============================] - 0s - loss: 1.7791e-04 Epoch 281/500 50/50 [==============================] - 0s - loss: 1.6172e-04 Epoch 282/500 50/50 [==============================] - 0s - loss: 1.5737e-04 Epoch 283/500 50/50 [==============================] - 0s - loss: 1.6304e-04 Epoch 284/500 50/50 [==============================] - 0s - loss: 1.3964e-04 Epoch 285/500 50/50 [==============================] - 0s - loss: 1.4456e-04 Epoch 286/500 50/50 [==============================] - 0s - loss: 1.4176e-04 Epoch 287/500 50/50 [==============================] - 0s - loss: 1.4758e-04 Epoch 288/500 50/50 [==============================] - 0s - loss: 1.5645e-04 Epoch 289/500 50/50 [==============================] - 0s - loss: 1.5490e-04 Epoch 290/500 50/50 [==============================] - 0s - loss: 1.6918e-04 Epoch 291/500 50/50 [==============================] - 0s - loss: 1.5733e-04 Epoch 292/500 50/50 [==============================] - 0s - loss: 1.7729e-04 Epoch 293/500 50/50 [==============================] - 0s - loss: 1.5604e-04 Epoch 294/500 50/50 [==============================] - 0s - loss: 1.5673e-04 Epoch 295/500 50/50 [==============================] - 0s - loss: 1.6785e-04 Epoch 296/500 50/50 [==============================] - 0s - loss: 2.3351e-04 Epoch 297/500 50/50 [==============================] - 0s - loss: 3.4187e-04 Epoch 298/500 50/50 [==============================] - 0s - loss: 2.8274e-04 Epoch 299/500 50/50 [==============================] - 0s - loss: 7.4605e-04 Epoch 300/500 50/50 [==============================] - 0s - loss: 7.1247e-04 Epoch 301/500 50/50 [==============================] - 0s - loss: 0.0018 Epoch 302/500 50/50 [==============================] - 0s - loss: 0.0012 Epoch 303/500 50/50 [==============================] - 0s - loss: 0.0013 Epoch 304/500 50/50 [==============================] - 0s - loss: 8.2988e-04 Epoch 305/500 50/50 [==============================] - 0s - loss: 0.0014 Epoch 306/500 50/50 [==============================] - 0s - loss: 0.0010 Epoch 307/500 50/50 [==============================] - 0s - loss: 0.0010 Epoch 308/500 50/50 [==============================] - 0s - loss: 6.2367e-04 Epoch 309/500 50/50 [==============================] - 0s - loss: 4.3657e-04 Epoch 310/500 50/50 [==============================] - 0s - loss: 5.3147e-04 Epoch 311/500 50/50 [==============================] - 0s - loss: 6.3534e-04 Epoch 312/500 50/50 [==============================] - 0s - loss: 4.8613e-04 Epoch 313/500 50/50 [==============================] - 0s - loss: 4.6632e-04 Epoch 314/500 50/50 [==============================] - 0s - loss: 5.1928e-04 Epoch 315/500 50/50 [==============================] - 0s - loss: 4.0766e-04 Epoch 316/500 50/50 [==============================] - 0s - loss: 3.1295e-04 Epoch 317/500 50/50 [==============================] - 0s - loss: 1.5869e-04 Epoch 318/500 50/50 [==============================] - 0s - loss: 1.3559e-04 Epoch 319/500 50/50 [==============================] - 0s - loss: 1.9816e-04 Epoch 320/500 50/50 [==============================] - 0s - loss: 2.3883e-04 Epoch 321/500 50/50 [==============================] - 0s - loss: 2.7415e-04 Epoch 322/500 50/50 [==============================] - 0s - loss: 1.7932e-04 Epoch 323/500 50/50 [==============================] - 0s - loss: 1.8675e-04 Epoch 324/500 50/50 [==============================] - 0s - loss: 2.0247e-04 Epoch 325/500 50/50 [==============================] - 0s - loss: 2.7127e-04 Epoch 326/500 50/50 [==============================] - 0s - loss: 4.1569e-04 Epoch 327/500 50/50 [==============================] - 0s - loss: 1.6736e-04 Epoch 328/500 50/50 [==============================] - 0s - loss: 1.5547e-04 Epoch 329/500 50/50 [==============================] - 0s - loss: 1.3511e-04 Epoch 330/500 50/50 [==============================] - 0s - loss: 1.2903e-04 Epoch 331/500 50/50 [==============================] - 0s - loss: 1.4018e-04 Epoch 332/500 50/50 [==============================] - 0s - loss: 1.2294e-04 Epoch 333/500 50/50 [==============================] - 0s - loss: 1.1013e-04 Epoch 334/500 50/50 [==============================] - 0s - loss: 1.1959e-04 Epoch 335/500 50/50 [==============================] - 0s - loss: 1.2213e-04 Epoch 336/500 50/50 [==============================] - 0s - loss: 1.3356e-04 Epoch 337/500 50/50 [==============================] - 0s - loss: 1.3340e-04 Epoch 338/500 50/50 [==============================] - 0s - loss: 1.3023e-04 Epoch 339/500 50/50 [==============================] - 0s - loss: 1.4317e-04 Epoch 340/500 50/50 [==============================] - 0s - loss: 2.4639e-04 Epoch 341/500 50/50 [==============================] - 0s - loss: 3.4356e-04 Epoch 342/500 50/50 [==============================] - 0s - loss: 7.7125e-04 Epoch 343/500 50/50 [==============================] - 0s - loss: 0.0012 Epoch 344/500 50/50 [==============================] - 0s - loss: 9.5286e-04 Epoch 345/500 50/50 [==============================] - 0s - loss: 5.0073e-04 Epoch 346/500 50/50 [==============================] - 0s - loss: 1.8193e-04 Epoch 347/500 50/50 [==============================] - 0s - loss: 1.6465e-04 Epoch 348/500 50/50 [==============================] - 0s - loss: 1.9031e-04 Epoch 349/500 50/50 [==============================] - 0s - loss: 3.1856e-04 Epoch 350/500 50/50 [==============================] - 0s - loss: 1.7926e-04 Epoch 351/500 50/50 [==============================] - 0s - loss: 2.2730e-04 Epoch 352/500 50/50 [==============================] - 0s - loss: 2.0651e-04 Epoch 353/500 50/50 [==============================] - 0s - loss: 2.1259e-04 Epoch 354/500 50/50 [==============================] - 0s - loss: 1.9287e-04 Epoch 355/500 50/50 [==============================] - 0s - loss: 2.5754e-04 Epoch 356/500 50/50 [==============================] - 0s - loss: 1.8971e-04 Epoch 357/500 50/50 [==============================] - 0s - loss: 1.9872e-04 Epoch 358/500 50/50 [==============================] - 0s - loss: 1.6058e-04 Epoch 359/500 50/50 [==============================] - 0s - loss: 1.3750e-04 Epoch 360/500 50/50 [==============================] - 0s - loss: 1.1955e-04 Epoch 361/500 50/50 [==============================] - 0s - loss: 1.1172e-04 Epoch 362/500 50/50 [==============================] - 0s - loss: 1.1305e-04 Epoch 363/500 50/50 [==============================] - 0s - loss: 1.1997e-04 Epoch 364/500 50/50 [==============================] - 0s - loss: 1.0658e-04 Epoch 365/500 50/50 [==============================] - 0s - loss: 1.0188e-04 Epoch 366/500 50/50 [==============================] - 0s - loss: 1.0373e-04 Epoch 367/500 50/50 [==============================] - 0s - loss: 1.0062e-04 Epoch 368/500 50/50 [==============================] - 0s - loss: 9.3453e-05 Epoch 369/500 50/50 [==============================] - 0s - loss: 1.0263e-04 Epoch 370/500 50/50 [==============================] - 0s - loss: 9.8204e-05 Epoch 371/500 50/50 [==============================] - 0s - loss: 9.9297e-05 Epoch 372/500 50/50 [==============================] - 0s - loss: 1.2152e-04 Epoch 373/500 50/50 [==============================] - 0s - loss: 1.0667e-04 Epoch 374/500 50/50 [==============================] - 0s - loss: 9.6208e-05 Epoch 375/500 50/50 [==============================] - 0s - loss: 1.1083e-04 Epoch 376/500 50/50 [==============================] - 0s - loss: 1.5626e-04 Epoch 377/500 50/50 [==============================] - 0s - loss: 1.6902e-04 Epoch 378/500 50/50 [==============================] - 0s - loss: 1.2281e-04 Epoch 379/500 50/50 [==============================] - 0s - loss: 1.0164e-04 Epoch 380/500 50/50 [==============================] - 0s - loss: 9.3808e-05 Epoch 381/500 50/50 [==============================] - 0s - loss: 1.1797e-04 Epoch 382/500 50/50 [==============================] - 0s - loss: 1.7151e-04 Epoch 383/500 50/50 [==============================] - 0s - loss: 1.5230e-04 Epoch 384/500 50/50 [==============================] - 0s - loss: 1.4393e-04 Epoch 385/500 50/50 [==============================] - 0s - loss: 2.8754e-04 Epoch 386/500 50/50 [==============================] - 0s - loss: 5.0727e-04 Epoch 387/500 50/50 [==============================] - 0s - loss: 6.0481e-04 Epoch 388/500 50/50 [==============================] - 0s - loss: 4.3744e-04 Epoch 389/500 50/50 [==============================] - 0s - loss: 6.6372e-04 Epoch 390/500 50/50 [==============================] - 0s - loss: 2.6848e-04 Epoch 391/500 50/50 [==============================] - 0s - loss: 1.8372e-04 Epoch 392/500 50/50 [==============================] - 0s - loss: 2.6044e-04 Epoch 393/500 50/50 [==============================] - 0s - loss: 2.3628e-04 Epoch 394/500 50/50 [==============================] - 0s - loss: 1.6265e-04 Epoch 395/500 50/50 [==============================] - 0s - loss: 2.0938e-04 Epoch 396/500 50/50 [==============================] - 0s - loss: 9.9512e-05 Epoch 397/500 50/50 [==============================] - 0s - loss: 1.0325e-04 Epoch 398/500 50/50 [==============================] - 0s - loss: 1.7551e-04 Epoch 399/500 50/50 [==============================] - 0s - loss: 2.5023e-04 Epoch 400/500 50/50 [==============================] - 0s - loss: 1.9458e-04 Epoch 401/500 50/50 [==============================] - 0s - loss: 1.6818e-04 Epoch 402/500 50/50 [==============================] - 0s - loss: 1.1085e-04 Epoch 403/500 50/50 [==============================] - 0s - loss: 9.4352e-05 Epoch 404/500 50/50 [==============================] - 0s - loss: 1.1952e-04 Epoch 405/500 50/50 [==============================] - 0s - loss: 9.2653e-05 Epoch 406/500 50/50 [==============================] - 0s - loss: 9.1602e-05 Epoch 407/500 50/50 [==============================] - 0s - loss: 1.0439e-04 Epoch 408/500 50/50 [==============================] - 0s - loss: 1.5231e-04 Epoch 409/500 50/50 [==============================] - 0s - loss: 2.2874e-04 Epoch 410/500 50/50 [==============================] - 0s - loss: 2.8399e-04 Epoch 411/500 50/50 [==============================] - 0s - loss: 8.7380e-04 Epoch 412/500 50/50 [==============================] - 0s - loss: 4.8638e-04 Epoch 413/500 50/50 [==============================] - 0s - loss: 8.3462e-04 Epoch 414/500 50/50 [==============================] - 0s - loss: 4.5237e-04 Epoch 415/500 50/50 [==============================] - 0s - loss: 3.1885e-04 Epoch 416/500 50/50 [==============================] - 0s - loss: 2.1449e-04 Epoch 417/500 50/50 [==============================] - 0s - loss: 2.3494e-04 Epoch 418/500 50/50 [==============================] - 0s - loss: 3.7915e-04 Epoch 419/500 50/50 [==============================] - 0s - loss: 3.9378e-04 Epoch 420/500 50/50 [==============================] - 0s - loss: 1.3125e-04 Epoch 421/500 50/50 [==============================] - 0s - loss: 9.9610e-05 Epoch 422/500 50/50 [==============================] - 0s - loss: 8.3851e-05 Epoch 423/500 50/50 [==============================] - 0s - loss: 8.9807e-05 Epoch 424/500 50/50 [==============================] - 0s - loss: 9.3711e-05 Epoch 425/500 50/50 [==============================] - 0s - loss: 7.9862e-05 Epoch 426/500 50/50 [==============================] - 0s - loss: 1.4845e-04 Epoch 427/500 50/50 [==============================] - 0s - loss: 1.3240e-04 Epoch 428/500 50/50 [==============================] - 0s - loss: 9.1374e-05 Epoch 429/500 50/50 [==============================] - 0s - loss: 1.1843e-04 Epoch 430/500 50/50 [==============================] - 0s - loss: 3.5493e-04 Epoch 431/500 50/50 [==============================] - 0s - loss: 3.1804e-04 Epoch 432/500 50/50 [==============================] - 0s - loss: 5.3038e-04 Epoch 433/500 50/50 [==============================] - 0s - loss: 2.2880e-04 Epoch 434/500 50/50 [==============================] - 0s - loss: 2.5017e-04 Epoch 435/500 50/50 [==============================] - 0s - loss: 1.8401e-04 Epoch 436/500 50/50 [==============================] - 0s - loss: 4.8451e-04 Epoch 437/500 50/50 [==============================] - 0s - loss: 6.2923e-04 Epoch 438/500 50/50 [==============================] - 0s - loss: 0.0024 Epoch 439/500 50/50 [==============================] - ETA: 0s - loss: 0.003 - 0s - loss: 0.0032 Epoch 440/500 50/50 [==============================] - 0s - loss: 0.0056 Epoch 441/500 50/50 [==============================] - 0s - loss: 0.0061 Epoch 442/500 50/50 [==============================] - 0s - loss: 0.0059 Epoch 443/500 50/50 [==============================] - 0s - loss: 0.0057 Epoch 444/500 50/50 [==============================] - 0s - loss: 0.0054 Epoch 445/500 50/50 [==============================] - 0s - loss: 0.0022 Epoch 446/500 50/50 [==============================] - 0s - loss: 0.0015 Epoch 447/500 50/50 [==============================] - 0s - loss: 0.0018 Epoch 448/500 50/50 [==============================] - 0s - loss: 9.3641e-04 Epoch 449/500 50/50 [==============================] - 0s - loss: 4.6422e-04 Epoch 450/500 50/50 [==============================] - 0s - loss: 1.7507e-04 Epoch 451/500 50/50 [==============================] - 0s - loss: 1.2961e-04 Epoch 452/500 50/50 [==============================] - 0s - loss: 1.2196e-04 Epoch 453/500 50/50 [==============================] - 0s - loss: 1.3834e-04 Epoch 454/500 50/50 [==============================] - 0s - loss: 1.4996e-04 Epoch 455/500 50/50 [==============================] - 0s - loss: 1.4211e-04 Epoch 456/500 50/50 [==============================] - 0s - loss: 1.2840e-04 Epoch 457/500 50/50 [==============================] - 0s - loss: 1.1148e-04 Epoch 458/500 50/50 [==============================] - 0s - loss: 1.0200e-04 Epoch 459/500 50/50 [==============================] - 0s - loss: 9.4559e-05 Epoch 460/500 50/50 [==============================] - 0s - loss: 9.0671e-05 Epoch 461/500 50/50 [==============================] - 0s - loss: 8.7393e-05 Epoch 462/500 50/50 [==============================] - 0s - loss: 8.2632e-05 Epoch 463/500 50/50 [==============================] - 0s - loss: 8.2027e-05 Epoch 464/500 50/50 [==============================] - 0s - loss: 8.3542e-05 Epoch 465/500 50/50 [==============================] - 0s - loss: 9.3496e-05 Epoch 466/500 50/50 [==============================] - 0s - loss: 9.1898e-05 Epoch 467/500 50/50 [==============================] - 0s - loss: 8.7911e-05 Epoch 468/500 50/50 [==============================] - 0s - loss: 8.1280e-05 Epoch 469/500 50/50 [==============================] - 0s - loss: 8.0064e-05 Epoch 470/500 50/50 [==============================] - 0s - loss: 7.4668e-05 Epoch 471/500 50/50 [==============================] - 0s - loss: 9.8129e-05 Epoch 472/500 50/50 [==============================] - 0s - loss: 9.8426e-05 Epoch 473/500 50/50 [==============================] - 0s - loss: 1.0846e-04 Epoch 474/500 50/50 [==============================] - 0s - loss: 1.2331e-04 Epoch 475/500 50/50 [==============================] - 0s - loss: 1.0845e-04 Epoch 476/500 50/50 [==============================] - 0s - loss: 1.2702e-04 Epoch 477/500 50/50 [==============================] - 0s - loss: 1.2744e-04 Epoch 478/500 50/50 [==============================] - 0s - loss: 3.6578e-04 Epoch 479/500 50/50 [==============================] - 0s - loss: 4.6970e-04 Epoch 480/500 50/50 [==============================] - 0s - loss: 4.2829e-04 Epoch 481/500 50/50 [==============================] - 0s - loss: 4.3254e-04 Epoch 482/500 50/50 [==============================] - 0s - loss: 3.0393e-04 Epoch 483/500 50/50 [==============================] - 0s - loss: 2.0324e-04 Epoch 484/500 50/50 [==============================] - 0s - loss: 2.0914e-04 Epoch 485/500 50/50 [==============================] - 0s - loss: 2.0757e-04 Epoch 486/500 50/50 [==============================] - 0s - loss: 3.1470e-04 Epoch 487/500 50/50 [==============================] - 0s - loss: 4.4788e-04 Epoch 488/500 50/50 [==============================] - 0s - loss: 4.7563e-04 Epoch 489/500 50/50 [==============================] - 0s - loss: 3.3888e-04 Epoch 490/500 50/50 [==============================] - 0s - loss: 1.5677e-04 Epoch 491/500 50/50 [==============================] - 0s - loss: 1.3321e-04 Epoch 492/500 50/50 [==============================] - 0s - loss: 1.4758e-04 Epoch 493/500 50/50 [==============================] - 0s - loss: 9.5357e-05 Epoch 494/500 50/50 [==============================] - 0s - loss: 8.4090e-05 Epoch 495/500 50/50 [==============================] - 0s - loss: 9.1502e-05 Epoch 496/500 50/50 [==============================] - 0s - loss: 7.8059e-05 Epoch 497/500 50/50 [==============================] - 0s - loss: 7.9166e-05 Epoch 498/500 50/50 [==============================] - 0s - loss: 1.3885e-04 Epoch 499/500 50/50 [==============================] - 0s - loss: 1.2836e-04 Epoch 500/500 50/50 [==============================] - 0s - loss: 1.1666e-04
<keras.callbacks.History at 0x15752c1d0>
nn_moist_preds = (nn_moist_mod.predict(norm_test_input) * l_sd + l_mean) * ureg.K
fig = plt.figure(figsize=(8, 10))
sk = SkewT(fig=fig, rotation=30)
sk.ax.set_xlim(-60, 120)
sk.ax.set_ylim(1000, 100)
for p in range(0, nn_moist_preds.shape[0], 3):
if p == 0:
label = "True"
else:
label = None
sk.plot(pressures, (test_data[p]* ureg.K).to("degC"), color="red", label=label, marker='v', ms=5)
for p in range(0, nn_moist_preds.shape[0], 3):
if p == 0:
label = "Conv Net"
else:
label = None
sk.plot(pressures, nn_moist_preds[p].to("degC"), color="purple", label=label, marker='o', ms=5)
plt.legend()
plt.xlabel("Temperature (C)")
plt.ylabel("Pressure (hPa)")
plt.title("Conv Neural Network Moist Adiabats")
plt.savefig("conv_net_adiabats.pdf", dpi=200, bbox_inches="tight")
def dt(t, p):
rs = saturation_mixing_ratio(p, t)
frac = ((Rd * t + Lv * rs) /
(Cp_d + (Lv * Lv * rs * epsilon / (Rd * t * t)))).to('kelvin')
return frac / p
temps_dt = np.arange(230, 350, 2)
pres_dt = np.arange(100, 1020, 20)
temp_grid, pres_grid = np.meshgrid(temps_dt, pres_dt)
dt_grid = np.zeros(temp_grid.shape)
print(dt_grid.shape)
for (i, j), t in np.ndenumerate(temp_grid):
dt_grid[i, j] = dt(units.Quantity(temp_grid[i, j], "kelvin"),
units.Quantity(pres_grid[i, j], "hPa")).m
(46, 60)
nn_lapse_input = Input(shape=(2,))
nn_lapse = Dense(20, activation="tanh")(nn_lapse_input)
nn_lapse = Dense(20, activation="tanh")(nn_lapse)
nn_lapse = Dense(1)(nn_lapse)
nn_lapse_mod = Model(nn_lapse_input, nn_lapse)
opt = SGD(lr=0.001, momentum=0.99, decay=1e-6, nesterov=True)
nn_lapse_mod.compile(opt, "mse")
lapse_train_data = pd.DataFrame({"temp": temp_grid.ravel(), "pres": pres_grid.ravel(), "lapse": dt_grid.ravel()})
norms = pd.DataFrame(index=lapse_train_data.columns, columns=["mean", "sd"], dtype=float)
for col in lapse_train_data.columns:
norms.loc[col, "mean"] = lapse_train_data[col].mean()
norms.loc[col, "sd"] = lapse_train_data[col].std()
lapse_train_data[col + "_norm"] = (lapse_train_data[col] - norms.loc[col, "mean"]) / norms.loc[col, "sd"]
nn_lapse_mod.fit(lapse_train_data[["temp_norm", "pres_norm"]].values, lapse_train_data["lapse"].values, epochs=100, batch_size=8)
Epoch 1/100 2760/2760 [==============================] - 0s - loss: 2.5946e-04 Epoch 2/100 2760/2760 [==============================] - 0s - loss: 2.5334e-04 Epoch 3/100 2760/2760 [==============================] - 0s - loss: 2.4986e-04 Epoch 4/100 2760/2760 [==============================] - 0s - loss: 2.4147e-04 Epoch 5/100 2760/2760 [==============================] - 0s - loss: 2.3440e-04 Epoch 6/100 2760/2760 [==============================] - 0s - loss: 2.2913e-04 Epoch 7/100 2760/2760 [==============================] - 0s - loss: 2.3300e-04 Epoch 8/100 2760/2760 [==============================] - 0s - loss: 2.3282e-04 Epoch 9/100 2760/2760 [==============================] - 0s - loss: 2.2562e-04 Epoch 10/100 2760/2760 [==============================] - 0s - loss: 2.1956e-04 Epoch 11/100 2760/2760 [==============================] - 0s - loss: 2.1264e-04 Epoch 12/100 2760/2760 [==============================] - 0s - loss: 2.2009e-04 Epoch 13/100 2760/2760 [==============================] - 0s - loss: 2.1862e-04 Epoch 14/100 2760/2760 [==============================] - 0s - loss: 2.0811e-04 Epoch 15/100 2760/2760 [==============================] - 0s - loss: 2.0263e-04 Epoch 16/100 2760/2760 [==============================] - 0s - loss: 2.0873e-04 Epoch 17/100 2760/2760 [==============================] - 0s - loss: 2.0528e-04 Epoch 18/100 2760/2760 [==============================] - 0s - loss: 1.9970e-04 Epoch 19/100 2760/2760 [==============================] - 0s - loss: 1.9522e-04 Epoch 20/100 2760/2760 [==============================] - 0s - loss: 1.9923e-04 Epoch 21/100 2760/2760 [==============================] - 0s - loss: 1.9656e-04 Epoch 22/100 2760/2760 [==============================] - 0s - loss: 2.0064e-04 Epoch 23/100 2760/2760 [==============================] - 0s - loss: 1.9055e-04 - ETA: 0s - loss: 1 Epoch 24/100 2760/2760 [==============================] - 0s - loss: 1.8448e-04 Epoch 25/100 2760/2760 [==============================] - 0s - loss: 1.8248e-04 Epoch 26/100 2760/2760 [==============================] - 0s - loss: 1.8472e-04 Epoch 27/100 2760/2760 [==============================] - 0s - loss: 1.8384e-04 Epoch 28/100 2760/2760 [==============================] - 0s - loss: 1.8833e-04 Epoch 29/100 2760/2760 [==============================] - 0s - loss: 1.7964e-04 Epoch 30/100 2760/2760 [==============================] - 0s - loss: 1.7543e-04 - ETA: 0s - loss: 2. Epoch 31/100 2760/2760 [==============================] - 0s - loss: 1.8010e-04 Epoch 32/100 2760/2760 [==============================] - 0s - loss: 1.7674e-04 Epoch 33/100 2760/2760 [==============================] - 0s - loss: 1.7656e-04 Epoch 34/100 2760/2760 [==============================] - 0s - loss: 1.7868e-04 Epoch 35/100 2760/2760 [==============================] - 0s - loss: 1.7324e-04 Epoch 36/100 2760/2760 [==============================] - 0s - loss: 1.6833e-04 Epoch 37/100 2760/2760 [==============================] - 0s - loss: 1.6294e-04 Epoch 38/100 2760/2760 [==============================] - 0s - loss: 1.6769e-04 Epoch 39/100 2760/2760 [==============================] - 0s - loss: 1.6437e-04 Epoch 40/100 2760/2760 [==============================] - 0s - loss: 1.6589e-04 Epoch 41/100 2760/2760 [==============================] - 0s - loss: 1.5900e-04 Epoch 42/100 2760/2760 [==============================] - 0s - loss: 1.5613e-04 Epoch 43/100 2760/2760 [==============================] - 0s - loss: 1.5460e-04 Epoch 44/100 2760/2760 [==============================] - 0s - loss: 1.5792e-04 Epoch 45/100 2760/2760 [==============================] - 0s - loss: 1.5385e-04 Epoch 46/100 2760/2760 [==============================] - 0s - loss: 1.5374e-04 Epoch 47/100 2760/2760 [==============================] - 0s - loss: 1.4795e-04 Epoch 48/100 2760/2760 [==============================] - 0s - loss: 1.4735e-04 Epoch 49/100 2760/2760 [==============================] - 0s - loss: 1.5258e-04 Epoch 50/100 2760/2760 [==============================] - 0s - loss: 1.5217e-04 Epoch 51/100 2760/2760 [==============================] - 0s - loss: 1.4109e-04 Epoch 52/100 2760/2760 [==============================] - 0s - loss: 1.4449e-04 Epoch 53/100 2760/2760 [==============================] - 0s - loss: 1.4906e-04 Epoch 54/100 2760/2760 [==============================] - 0s - loss: 1.4242e-04 Epoch 55/100 2760/2760 [==============================] - 0s - loss: 1.4010e-04 Epoch 56/100 2760/2760 [==============================] - 0s - loss: 1.4031e-04 Epoch 57/100 2760/2760 [==============================] - 0s - loss: 1.4158e-04 Epoch 58/100 2760/2760 [==============================] - 0s - loss: 1.3524e-04 Epoch 59/100 2760/2760 [==============================] - 0s - loss: 1.3444e-04 Epoch 60/100 2760/2760 [==============================] - 0s - loss: 1.3649e-04 Epoch 61/100 2760/2760 [==============================] - 0s - loss: 1.3252e-04 Epoch 62/100 2760/2760 [==============================] - 0s - loss: 1.3303e-04 Epoch 63/100 2760/2760 [==============================] - 0s - loss: 1.3708e-04 Epoch 64/100 2760/2760 [==============================] - 0s - loss: 1.2831e-04 Epoch 65/100 2760/2760 [==============================] - 0s - loss: 1.2490e-04 Epoch 66/100 2760/2760 [==============================] - 0s - loss: 1.2514e-04 Epoch 67/100 2760/2760 [==============================] - 0s - loss: 1.2663e-04 Epoch 68/100 2760/2760 [==============================] - 0s - loss: 1.2144e-04 Epoch 69/100 2760/2760 [==============================] - 0s - loss: 1.2257e-04 Epoch 70/100 2760/2760 [==============================] - 0s - loss: 1.1791e-04 Epoch 71/100 2760/2760 [==============================] - 0s - loss: 1.1975e-04 Epoch 72/100 2760/2760 [==============================] - 0s - loss: 1.2321e-04 Epoch 73/100 2760/2760 [==============================] - 0s - loss: 1.2001e-04 Epoch 74/100 2760/2760 [==============================] - 0s - loss: 1.1850e-04 Epoch 75/100 2760/2760 [==============================] - 0s - loss: 1.1311e-04 Epoch 76/100 2760/2760 [==============================] - 0s - loss: 1.1760e-04 Epoch 77/100 2760/2760 [==============================] - 0s - loss: 1.1305e-04 Epoch 78/100 2760/2760 [==============================] - 0s - loss: 1.1372e-04 Epoch 79/100 2760/2760 [==============================] - 0s - loss: 1.0996e-04 Epoch 80/100 2760/2760 [==============================] - 0s - loss: 1.1101e-04 Epoch 81/100 2760/2760 [==============================] - 0s - loss: 1.1101e-04 Epoch 82/100 2760/2760 [==============================] - 0s - loss: 1.0932e-04 Epoch 83/100 2760/2760 [==============================] - 0s - loss: 1.0507e-04 Epoch 84/100 2760/2760 [==============================] - 0s - loss: 1.0510e-04 Epoch 85/100 2760/2760 [==============================] - 0s - loss: 1.0312e-04 Epoch 86/100 2760/2760 [==============================] - 0s - loss: 1.0723e-04 Epoch 87/100 2760/2760 [==============================] - 0s - loss: 1.0253e-04 Epoch 88/100 2760/2760 [==============================] - 0s - loss: 9.9962e-05 Epoch 89/100 2760/2760 [==============================] - 0s - loss: 1.0260e-04 Epoch 90/100 2760/2760 [==============================] - 0s - loss: 9.9754e-05 Epoch 91/100 2760/2760 [==============================] - 0s - loss: 9.7193e-05 Epoch 92/100 2760/2760 [==============================] - 0s - loss: 1.0143e-04 Epoch 93/100 2760/2760 [==============================] - 0s - loss: 9.8767e-05 Epoch 94/100 2760/2760 [==============================] - 0s - loss: 9.7355e-05 Epoch 95/100 2760/2760 [==============================] - 0s - loss: 9.3634e-05 Epoch 96/100 2760/2760 [==============================] - 0s - loss: 9.3300e-05 Epoch 97/100 2760/2760 [==============================] - 0s - loss: 9.5346e-05 Epoch 98/100 2760/2760 [==============================] - 0s - loss: 8.9899e-05 Epoch 99/100 2760/2760 [==============================] - 0s - loss: 9.0696e-05 Epoch 100/100 2760/2760 [==============================] - 0s - loss: 9.0016e-05
<keras.callbacks.History at 0x1533b9c18>
lapse_preds = nn_lapse_mod.predict(lapse_train_data[["temp_norm", "pres_norm"]].values)
plt.hist(lapse_train_data["lapse"].values, bins=np.arange(0, 0.6, 0.05))
plt.hist(lapse_preds, bins=np.arange(0, 0.6, 0.05), histtype="step", lw=3)
(array([ 8.89000000e+02, 1.10200000e+03, 3.97000000e+02, 1.82000000e+02, 7.80000000e+01, 4.90000000e+01, 3.20000000e+01, 2.00000000e+01, 1.00000000e+01, 1.00000000e+00, 0.00000000e+00]), array([ 0. , 0.05, 0.1 , 0.15, 0.2 , 0.25, 0.3 , 0.35, 0.4 , 0.45, 0.5 , 0.55]), <a list of 1 Patch objects>)
pressures
nn_temps = np.zeros(test_data.shape)
print(nn_temps.shape)
for t, temp in enumerate(test_temps):
nn_temps[t, 0] = temp.m
norm_temp = (temp.m - norms.loc["temp", "mean"]) / norms.loc["temp", "sd"]
curr_temp = temp.m
pres = pressures.m[0]
p = 1
while pres > pressures.m.min():
norm_pres = (pres - norms.loc["pres", "mean"]) / norms.loc["pres", "sd"]
lapse = nn_lapse_mod.predict(np.array([[norm_temp, norm_pres]]))
curr_temp -= lapse * 4
if pres in pressures.m:
nn_temps[t, p] = curr_temp
p += 1
pres -= 4
norm_temp = (curr_temp - norms.loc["temp", "mean"]) / norms.loc["temp", "sd"]
(50, 46)
fig = plt.figure(figsize=(8, 10))
sk = SkewT(fig=fig, rotation=30)
sk.ax.set_xlim(-60, 120)
sk.ax.set_ylim(1000, 100)
for p in range(0, nn_moist_preds.shape[0], 3):
if p == 0:
label = "True"
else:
label = None
sk.plot(pressures, (test_data[p]* ureg.K).to("degC"), color="red", label=label)
for p in range(0, nn_moist_preds.shape[0], 3):
if p == 0:
label = "Neural Net"
else:
label = None
sk.plot(pressures, (nn_temps[p] * ureg.K).to("degC"), color="purple", label=label)
plt.legend()
<matplotlib.legend.Legend at 0x1537aa630>
plt.scatter(lapse_train_data["lapse"], lapse_preds)
plt.plot(np.arange(0, 0.6, 0.1), np.arange(0, 0.6, 0.1), 'k--')
[<matplotlib.lines.Line2D at 0x153579400>]
plt.pcolormesh(temps_dt, pres_dt, lapse_preds.reshape(temp_grid.shape), vmin=0, vmax=0.5)
plt.colorbar()
<matplotlib.colorbar.Colorbar at 0x153b1d048>
plt.pcolormesh(temps_dt, pres_dt, dt_grid, vmin=0, vmax=0.5)
plt.colorbar()
<matplotlib.colorbar.Colorbar at 0x153c39828>
plt.pcolormesh(temps_dt, pres_dt, lapse_preds.reshape(temp_grid.shape) - dt_grid, cmap="RdBu_r", vmin=-0.1, vmax=0.1)
plt.colorbar()
<matplotlib.colorbar.Colorbar at 0x153d5a470>