Last active
January 15, 2020 11:28
-
-
Save prl900/f96db5edca344cd8af77df5cfa76abd4 to your computer and use it in GitHub Desktop.
Reviewer#1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"nbformat": 4, | |
"nbformat_minor": 0, | |
"metadata": { | |
"colab": { | |
"name": "Copy of Reviewer#1", | |
"provenance": [], | |
"collapsed_sections": [], | |
"include_colab_link": true | |
}, | |
"kernelspec": { | |
"name": "python3", | |
"display_name": "Python 3" | |
} | |
}, | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "view-in-github", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"<a href=\"https://colab.research.google.com/gist/prl900/f96db5edca344cd8af77df5cfa76abd4/copy-of-reviewer-1.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "dRWC5KLPWymn", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"### 1.- Motivation\n", | |
"\n", | |
"Reviewer #1 detected an anomaly in the loss function used to train the models presented in our manuscript. \n", | |
"\n", | |
"A plot respresentation for the output of this loss function was provided as evidence using some simple data to represent the evolution of the POD index over a range of values of α, the precipitation decision threshold.\n", | |
"\n", | |
"We hope this notebook provides a clarification on the cause for this effect showed in the plot. During the process of studying this problem we have come up with a new version of the loss function which presents a more regular and predictable behaviour. \n", | |
"\n", | |
"The following cells reproduce the problem as presented by reviewer #1 and we move on later in this notebook into discussing the reasons behind this behaviour and presenting a new version of this loss function which shows better properties.\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "qOds7KhHWyFm", | |
"colab_type": "code", | |
"outputId": "e0c3f618-0dfa-4534-fdb6-70240da7b3a6", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 81 | |
} | |
}, | |
"source": [ | |
"import numpy as np\n", | |
"import matplotlib.pyplot as plt\n", | |
"import tensorflow as tf\n", | |
"import tensorflow.keras.backend as K\n", | |
"\n", | |
"import warnings\n", | |
"warnings.filterwarnings('ignore')\n", | |
"\n", | |
"tf.enable_eager_execution()\n", | |
"\n", | |
"tf.__version__" | |
], | |
"execution_count": 1, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/html": [ | |
"<p style=\"color: red;\">\n", | |
"The default version of TensorFlow in Colab will soon switch to TensorFlow 2.x.<br>\n", | |
"We recommend you <a href=\"https://www.tensorflow.org/guide/migrate\" target=\"_blank\">upgrade</a> now \n", | |
"or ensure your notebook will continue to use TensorFlow 1.x via the <code>%tensorflow_version 1.x</code> magic:\n", | |
"<a href=\"https://colab.research.google.com/notebooks/tensorflow_version.ipynb\" target=\"_blank\">more info</a>.</p>\n" | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
}, | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"'1.15.0'" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 1 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "Xd74rpurYXCN", | |
"colab_type": "code", | |
"outputId": "882c1f5a-f74b-4956-8671-4f1343990335", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 312 | |
} | |
}, | |
"source": [ | |
"# Non-differentiable POD loss function.\n", | |
"def get_pod_loss(threshold):\n", | |
" def pod(y_true, y_pred):\n", | |
" # Probability of detection = Hits / (Hits + Misses)\n", | |
" hits = K.sum(K.cast(tf.math.logical_and(K.greater(y_true, threshold), K.greater(y_pred, threshold)), dtype='float32'))\n", | |
" misses = K.sum(K.cast(tf.math.logical_and(K.greater(y_true, threshold), K.less(y_pred, threshold)), dtype='float32'))\n", | |
" return hits / (hits + misses)\n", | |
" return pod\n", | |
"\n", | |
"# Differentiable loss function used in the firt version of the paper \n", | |
"# modified commenting out MAE to account just for the POD component.\n", | |
"def get_diff_pod_mae_loss(threshold):\n", | |
" def pod_mae(y_true, y_pred):\n", | |
" # Probability of detection = Misses / (Hits + Misses)\n", | |
" hits = K.sum(K.cast(K.sigmoid(y_true - threshold) * K.sigmoid(y_pred - threshold), dtype='float32'))\n", | |
" misses = K.sum(K.cast(K.sigmoid(y_true - threshold) * K.sigmoid((-1 * y_pred) - threshold), dtype='float32'))\n", | |
" pod = hits / (hits + misses)\n", | |
" #mae = K.mean(K.abs(y_pred - y_true), axis=-1)\n", | |
" return pod #+ mae\n", | |
" return pod_mae\n", | |
"\n", | |
"# Synthetic dataset with two values\n", | |
"y_pred = tf.constant([[1.], [2.]])\n", | |
"y_true = tf.constant([[2.], [2.]])\n", | |
"\n", | |
"# Lists to store POD values for each function\n", | |
"diff_pods = []\n", | |
"pods = []\n", | |
"\n", | |
"# Iterate through a range of values of α around [0,2]\n", | |
"# and store POD results\n", | |
"for threshold in np.arange(-.1, 2.2, 0.1):\n", | |
" pod_loss = get_pod_loss(threshold=threshold)\n", | |
" diff_pod_loss = get_diff_pod_mae_loss(threshold=threshold)\n", | |
" diff_pods.append(diff_pod_loss(y_true, y_pred).numpy())\n", | |
" pods.append(pod_loss(y_true, y_pred).numpy())\n", | |
"\n", | |
"# Plot results\n", | |
"plt.plot(np.arange(-.1, 2.2, 0.1), diff_pods, label='differentiable')\n", | |
"plt.plot(np.arange(-.1, 2.2, 0.1), pods, label='non-differentiable')\n", | |
"plt.xlabel('Threshold')\n", | |
"plt.ylabel('POD')\n", | |
"plt.title('Fig 1: y_pred = [[1.], [2.]], y_true = [[2.], [2.]]')\n", | |
"plt.legend()" | |
], | |
"execution_count": 2, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"<matplotlib.legend.Legend at 0x7f7ec4656b70>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 2 | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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\nFAvH4K2+V1gAAAAASUVORK5CYII=\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "3ekQHKNjZRA8", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"### 2.- Interpretation of the result\n", | |
"\n", | |
"The previous plot represents the values of both versions of the POD loss functions for different values of α, the precipitation decision threshold. The non-differentiable POD represents a drop in POD to 0.5 when crossing the `α=1` value. However, the differentiable POD function represents an increase in POD as the threshold is increased, which is not expected.\n", | |
"\n", | |
"After careful study of the loss functions we have realised that the range of the proposed loss function is not constant when modifying the value of α. The original, non-differentiable POD function has a constant range `[0,1]`, whereas the proposed differentiable POD is the product of several sigmoids modulating the differences between the threshold and the observed and predicted values.\n", | |
"\n", | |
"To graphically represent this characteristic we are going to plot the values POD for a fixed domain of input values `[0,2]`. We define a vector of 201 predicted values ranging `[0,2]` `y_pred`, and a vector of observed values filled with constant 2 `y_obs`. We plot the output of POD across this domain for four values of α, `[0.5, 1, 1.5, 2]`.\n", | |
"\n", | |
"**Note**: The K.sum() function has been removed to calculate the following indices as we want to keep the original dimension of the array which represents the domain of the plot." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "4SMBvUddFVQn", | |
"colab_type": "code", | |
"outputId": "89d780e0-ffc3-4a8a-9819-f9c8c2fd68e6", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 298 | |
} | |
}, | |
"source": [ | |
"# Range of 200 values from 0 to 2\n", | |
"y_pred = tf.constant(np.linspace(0,2,num=201,endpoint=True, dtype=np.float32)[:,None])\n", | |
"# Array of 2's\n", | |
"y_true = tf.constant(np.ones((201,1), dtype=np.float32)*2.)\n", | |
"\n", | |
"\n", | |
"#POD Different thresholds\n", | |
"threshold=.5 \n", | |
"# red\n", | |
"plt.plot(K.cast(K.sigmoid(y_true - threshold) * K.sigmoid(y_pred - threshold), dtype='float32').numpy().flatten() / \n", | |
" (K.cast(K.sigmoid(y_true - threshold) * K.sigmoid(y_pred - threshold), dtype='float32').numpy().flatten() +\n", | |
" K.cast(K.sigmoid(y_true - threshold) * K.sigmoid((-1*y_pred) - threshold), dtype='float32').numpy().flatten()), '-r')\n", | |
"\n", | |
"threshold=1.\n", | |
"# green\n", | |
"plt.plot(K.cast(K.sigmoid(y_true - threshold) * K.sigmoid(y_pred - threshold), dtype='float32').numpy().flatten() / \n", | |
" (K.cast(K.sigmoid(y_true - threshold) * K.sigmoid(y_pred - threshold), dtype='float32').numpy().flatten() +\n", | |
" K.cast(K.sigmoid(y_true - threshold) * K.sigmoid((-1*y_pred) - threshold), dtype='float32').numpy().flatten()), '-g')\n", | |
"\n", | |
"threshold=1.5\n", | |
"# yellow\n", | |
"plt.plot(K.cast(K.sigmoid(y_true - threshold) * K.sigmoid(y_pred - threshold), dtype='float32').numpy().flatten() / \n", | |
" (K.cast(K.sigmoid(y_true - threshold) * K.sigmoid(y_pred - threshold), dtype='float32').numpy().flatten() +\n", | |
" K.cast(K.sigmoid(y_true - threshold) * K.sigmoid((-1*y_pred) - threshold), dtype='float32').numpy().flatten()), '-y')\n", | |
"\n", | |
"threshold=1.9\n", | |
"# blue\n", | |
"plt.plot(K.cast(K.sigmoid(y_true - threshold) * K.sigmoid(y_pred - threshold), dtype='float32').numpy().flatten() / \n", | |
" (K.cast(K.sigmoid(y_true - threshold) * K.sigmoid(y_pred - threshold), dtype='float32').numpy().flatten() +\n", | |
" K.cast(K.sigmoid(y_true - threshold) * K.sigmoid((-1*y_pred) - threshold), dtype='float32').numpy().flatten()), '-b')\n", | |
"\n", | |
"plt.title('Fig 2: Diff PODs evaluated at several α')\n" | |
], | |
"execution_count": 3, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"Text(0.5, 1.0, 'Fig 2: Diff PODs evaluated at several α')" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 3 | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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\nL5yFpgok5c4iAAAAAElFTkSuQmCC\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "LNMltPQuMHa0", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"This plot shows that although each individual POD presents the right slope (POD increases as the value of `y_pred` is increased), the range of the function increases for larger values of α.\n", | |
"\n", | |
"This explains the behaviour of POD in the first figure presented by reviewer #1, where POD increases as α gets larger.\n", | |
"\n", | |
"We would like to mention that the models presented in the manuscript are trained using fixed values of α. The neural networks in the experiments do not optimise the model based on the derivative of α, so the non-constant range of POD does not affect the results.\n", | |
"\n", | |
"For comparison purposes the following cell shows the result of the equivalent experiment performed using the non-differentiable version of POD." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "Cl3Ce643Hv3n", | |
"colab_type": "code", | |
"outputId": "6c9a9192-5d97-41ed-9fad-0c148476d2a4", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 300 | |
} | |
}, | |
"source": [ | |
"# Range of 200 values from 0 to 2\n", | |
"y_pred = tf.constant(np.linspace(0,2,num=201,endpoint=True, dtype=np.float32)[:,None])\n", | |
"# Array of 2's\n", | |
"y_true = tf.constant(np.ones((201,1), dtype=np.float32)*2.)\n", | |
"\n", | |
"fig, axs = plt.subplots(2,2)\n", | |
"plt.figsize=(12, 6)\n", | |
"\n", | |
"print('Fig 3: Non-diff PODs evaluated at several α')\n", | |
"\n", | |
"threshold = .5\n", | |
"# red\n", | |
"axs[0,0].plot(K.cast(tf.math.logical_and(K.greater(y_true, threshold), K.greater(y_pred, threshold)), dtype='float32').numpy().flatten() /\n", | |
" (K.cast(tf.math.logical_and(K.greater(y_true, threshold), K.greater(y_pred, threshold)), dtype='float32') +\n", | |
" K.cast(tf.math.logical_and(K.greater(y_true, threshold), K.less(y_pred, threshold)), dtype='float32')).numpy().flatten(), '-r')\n", | |
"\n", | |
"threshold = 1.\n", | |
"# green\n", | |
"axs[1,0].plot(K.cast(tf.math.logical_and(K.greater(y_true, threshold), K.greater(y_pred, threshold)), dtype='float32').numpy().flatten() /\n", | |
" (K.cast(tf.math.logical_and(K.greater(y_true, threshold), K.greater(y_pred, threshold)), dtype='float32') +\n", | |
" K.cast(tf.math.logical_and(K.greater(y_true, threshold), K.less(y_pred, threshold)), dtype='float32')).numpy().flatten(), '-g')\n", | |
"\n", | |
"threshold = 1.5\n", | |
"# yellow\n", | |
"axs[0,1].plot(K.cast(tf.math.logical_and(K.greater(y_true, threshold), K.greater(y_pred, threshold)), dtype='float32').numpy().flatten() /\n", | |
" (K.cast(tf.math.logical_and(K.greater(y_true, threshold), K.greater(y_pred, threshold)), dtype='float32') +\n", | |
" K.cast(tf.math.logical_and(K.greater(y_true, threshold), K.less(y_pred, threshold)), dtype='float32')).numpy().flatten(), '-y')\n", | |
"\n", | |
"threshold = 1.9\n", | |
"# blue\n", | |
"axs[1,1].plot(K.cast(tf.math.logical_and(K.greater(y_true, threshold), K.greater(y_pred, threshold)), dtype='float32').numpy().flatten() /\n", | |
" (K.cast(tf.math.logical_and(K.greater(y_true, threshold), K.greater(y_pred, threshold)), dtype='float32') +\n", | |
" K.cast(tf.math.logical_and(K.greater(y_true, threshold), K.less(y_pred, threshold)), dtype='float32')).numpy().flatten(), '-b')\n", | |
"\n", | |
"\n" | |
], | |
"execution_count": 4, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"Fig 3: Non-diff PODs evaluated at several α\n" | |
], | |
"name": "stdout" | |
}, | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"[<matplotlib.lines.Line2D at 0x7f7ec405dcf8>]" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 4 | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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\nkrsAAAAASUVORK5CYII=\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 4 Axes>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "xlHVNFDjQv3S", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"### 3.- New proposal for a better differentiable POD loss function\n", | |
"\n", | |
"Thanks to this exercise we have realised about the complexity and problems associated with the proposed differentiable POD function. \n", | |
"\n", | |
"One of the main problems with this function is that its shape is not sigmoid-like. The gradient is not maximum around the threshold and decreases as we move further from α. In fact, Figure 2 shows the gradient being maximum at `0` and steadily decreasing afterwards. Optimising based on this function would favorise small values in the output regardless of the threshold value.\n", | |
"\n", | |
"After carefull thinking and lots of experimentation we have realised that a much more simple differentiable POD function can be achieved, overcoming the problems of the previous one.\n", | |
"\n", | |
"The underlying idea is to use the sigmoid to wrap just the `y_pred` component of the loss function and create the labels for `y_obs` using the initial comparison operator. This approach provides a differentiable function and avoids the multiplication of two sigmoid functions, which is the cause of the problems explained before. The new loss functions also introduces a new parameter β which controls the steepness of the sigmoid function.\n", | |
"\n", | |
"The Tensorflow expression of the new loss function is:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "_QNURmHpWZsr", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"def get_new_diff_pod_mae_loss(threshold, steepness):\n", | |
" def pod_mae(y_true, y_pred):\n", | |
" # Probability of detection = Misses / (Hits + Misses)\n", | |
"\n", | |
" hits = K.sum(K.cast(K.greater(y_true, threshold), dtype='float32') * K.cast(K.sigmoid(steepness * (y_pred - threshold)), dtype='float32'))\n", | |
" misses = K.sum(K.cast(K.greater(y_true, threshold), dtype='float32') * K.cast(K.sigmoid(-steepness * (y_pred - threshold)), dtype='float32'))\n", | |
" pod = hits / (hits + misses) \n", | |
" #mae = K.mean(K.abs(y_pred - y_true), axis=-1)\n", | |
" return pod #+ mae\n", | |
" return pod_mae" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "4_WP8R8jWpex", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"For comparison purposes, we show the plot representing the range of values spanned by the proposed function for the same values of α used before." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "T_nYhQRrtAfr", | |
"colab_type": "code", | |
"outputId": "366e7b0a-4547-40d1-90f0-8d4583b332cb", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 298 | |
} | |
}, | |
"source": [ | |
"# Range of 200 values from 0 to 2\n", | |
"y_pred = tf.constant(np.linspace(0,2,num=201,endpoint=True, dtype=np.float32)[:,None])\n", | |
"# Array of 2's\n", | |
"y_true = tf.constant(np.ones((201,1), dtype=np.float32)*2.)\n", | |
"\n", | |
"#POD Different thresholds\n", | |
"# We use β=10 for showing the entire shape of the sigmoid within the defined range.\n", | |
"\n", | |
"\n", | |
"threshold=.5 \n", | |
"# red\n", | |
"plt.plot((K.cast(K.greater(y_true, threshold), dtype='float32') * K.cast(K.sigmoid(10*(y_pred - threshold)), dtype='float32')).numpy().flatten() / \n", | |
" ((K.cast(K.greater(y_true, threshold), dtype='float32') * K.cast(K.sigmoid(10*(y_pred - threshold)), dtype='float32')).numpy().flatten() +\n", | |
" (K.cast(K.greater(y_true, threshold), dtype='float32') * K.cast(K.sigmoid(-10*(y_pred - threshold)), dtype='float32')).numpy().flatten()), '-r')\n", | |
"\n", | |
"threshold=1.\n", | |
"# green\n", | |
"plt.plot((K.cast(K.greater(y_true, threshold), dtype='float32') * K.cast(K.sigmoid(10*(y_pred - threshold)), dtype='float32')).numpy().flatten() / \n", | |
" ((K.cast(K.greater(y_true, threshold), dtype='float32') * K.cast(K.sigmoid(10*(y_pred - threshold)), dtype='float32')).numpy().flatten() +\n", | |
" (K.cast(K.greater(y_true, threshold), dtype='float32') * K.cast(K.sigmoid(-10*(y_pred - threshold)), dtype='float32')).numpy().flatten()), '-g')\n", | |
"\n", | |
"threshold=1.5 \n", | |
"# yellow\n", | |
"plt.plot((K.cast(K.greater(y_true, threshold), dtype='float32') * K.cast(K.sigmoid(10*(y_pred - threshold)), dtype='float32')).numpy().flatten() / \n", | |
" ((K.cast(K.greater(y_true, threshold), dtype='float32') * K.cast(K.sigmoid(10*(y_pred - threshold)), dtype='float32')).numpy().flatten() +\n", | |
" (K.cast(K.greater(y_true, threshold), dtype='float32') * K.cast(K.sigmoid(-10*(y_pred - threshold)), dtype='float32')).numpy().flatten()), '-y')\n", | |
"\n", | |
"threshold=1.9 \n", | |
"# blue\n", | |
"plt.plot((K.cast(K.greater(y_true, threshold), dtype='float32') * K.cast(K.sigmoid(10*(y_pred - threshold)), dtype='float32')).numpy().flatten() / \n", | |
" ((K.cast(K.greater(y_true, threshold), dtype='float32') * K.cast(K.sigmoid(10*(y_pred - threshold)), dtype='float32')).numpy().flatten() +\n", | |
" (K.cast(K.greater(y_true, threshold), dtype='float32') * K.cast(K.sigmoid(-10*(y_pred - threshold)), dtype='float32')).numpy().flatten()), '-b')\n", | |
"\n", | |
"plt.title('Fig 2: New diff PODs evaluated at several α')" | |
], | |
"execution_count": 6, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"Text(0.5, 1.0, 'Fig 2: New diff PODs evaluated at several α')" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 6 | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "WkYkVqVrYMgR", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"The new loss function has the characteristics of having a constant range independent of α and having a sigmoid-like shape, centered around the threshold value. This last characteristic allows optimising precipitation values which are closer to the threshold value with a larger weight than values which are further from it, which is desirable.\n", | |
"\n", | |
"Finally, we present an equivalent plot to the initial one presented by reviewer #1 using two versions of the new proposed loss function defined for β=1 and β=10. \n", | |
"\n", | |
"**Note**: In the following plot we have extended the range to show the double step in the original POD function and how it can be accurately reproduced by the new differentiable loss function." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "sDd-Q2uLZtHc", | |
"colab_type": "code", | |
"outputId": "d057d019-be77-4a2c-f618-10171f08ca42", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 312 | |
} | |
}, | |
"source": [ | |
"y_pred = tf.constant([[1.], [2.]])\n", | |
"y_true = tf.constant([[2.5], [2.5]])\n", | |
"\n", | |
"diff_pods = []\n", | |
"diff_pods2 = []\n", | |
"diff_pods3 = []\n", | |
"pods = []\n", | |
"for threshold in np.arange(-.1, 3., 0.1):\n", | |
" pod_loss = get_pod_loss(threshold=threshold)\n", | |
" diff_pod_loss = get_diff_pod_mae_loss(threshold=threshold)\n", | |
" diff_pod_loss2 = get_new_diff_pod_mae_loss(threshold=threshold, steepness=1)\n", | |
" diff_pod_loss3 = get_new_diff_pod_mae_loss(threshold=threshold, steepness=10)\n", | |
" diff_pods.append(diff_pod_loss(y_true, y_pred).numpy())\n", | |
" diff_pods2.append(diff_pod_loss2(y_true, y_pred).numpy())\n", | |
" diff_pods3.append(diff_pod_loss3(y_true, y_pred).numpy())\n", | |
" pods.append(pod_loss(y_true, y_pred).numpy())\n", | |
"\n", | |
"plt.plot(np.arange(-.1, 3., 0.1), diff_pods, label='old differentiable')\n", | |
"plt.plot(np.arange(-.1, 3., 0.1), diff_pods2, label='new differentiable β=1')\n", | |
"plt.plot(np.arange(-.1, 3., 0.1), diff_pods3, label='new differentiable β=10')\n", | |
"plt.plot(np.arange(-.1, 3., 0.1), pods, label='non-differentiable')\n", | |
"\n", | |
"plt.xlabel('Threshold')\n", | |
"plt.ylabel('POD')\n", | |
"plt.title('Fig 5: y_pred = [[1.], [2.]], y_true = [[2.5], [2.5]]')\n", | |
"plt.legend()" | |
], | |
"execution_count": 7, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"<matplotlib.legend.Legend at 0x7f7ec463e2b0>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 7 | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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\n/PyYOXMm0dHRNG/enH379pGcnExoaCjLly+nV69e9OrVi48++ojo6Oj87WdmZnL77bezefNmWrVq\nVWgQnKioKDZs2MCECRPYt28fgwYNYuTIkcycOTO/i+wvv/ySpKQkHn30UdLS0ggLC+Pjjz+mfv36\n9OnTh/bt27NmzRqGDRvG6NGjGT9+PIcOHQLgrbfeonv37jz//PMcOnSIffv2cejQIR5++GEefPBB\nnnjiCfbu3Uv79u3p378/9913H9dccw1bt27lwIEDjBo1Kr/n0nfffTd/LIWUlBSuvvpq9uzZQ9++\nfZk2bdo54zPMmzePd955h5ycHLp27cq0adMwm82Fyhw+fJhLLrmEpKQkdu7cSZMmZb9zuVevXhw4\ncKDM5Ws7q+sMwV7CGQLAqNhR3PHzHfyw7wfdUK2a8WjndkqpJcCSs5Y9W+D5FZ7cf0XavXs3CxYs\nYObMmdx88818+eWXjBw5krvuuosZM2YQHR3Nn3/+yb333stvv/1Gy5YtiYuLY//+/XTo0IHVq1fT\ntWtXDh8+XCgZAEyfPh0/Pz+2b9/Oli1b6NChwzn7nzFjBj/99BPLly8nLCyMrl27MnnyZL7//nvs\ndjujRo3im2++ITw8nIULF/L000/nj9+Qk5OTXwU1fPhwHnnkEXr06MGhQ4cYMGAA27dvB2DHjh0s\nX76c1NRUWrZsyT333MOkSZPYunVr/mA9BQ+wNpuNX375BR8fH3bv3s2wYcPy97N+/Xri4uJo0qQJ\nAwcOZPHixYWqmrZv387ChQtZu3YtVquVe++9l/nz5zN69OhC79vpdLJy5UpGjx5NmzZtaNGiBQDL\nly/nkUceOefv5OfnV2zX41rJTP7+mAIC8ofSLE7nep1pVbcVc+PmMjR6aK0af7q6q3m9nZbwS96T\nmjZtSvv27QGjy+gDBw6QlpbGunXruOmmm/LLZbv6k+/ZsyerVq1i//79PPnkk8ycOZPevXvTuXPn\nc7a9atWq/OEz27ZtS9u2bc8rtp07d7J161b69+8PQG5uLvXr189fX7BKadmyZcTFxeXPp6Sk5HeU\nd/XVV+Pt7Y23tzc2m42EEqoOAOx2O/fffz+bNm3CbDYX6jyvS5cuNGvWDIBhw4axZs2aQgnh119/\nZePGjfl/j8zMTGyuX6hn69OnD0lJSbz44ovcfffdzJ8/n759++YnKc19LCXceppHRBgdO5qn1jzF\n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\nISillLL8P0o7pgOsy4w5AAAAAElFTkSuQmCC\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "2J2rXY-00_J0", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"### 4.- Conclusion\n", | |
"\n", | |
"This notebook tries to clarify the behaviour and considerations around the proposed differentiable categorical loss functions presented in our work. This exercise has helped us enormously to understand important concepts and implications of our research. \n", | |
"\n", | |
"As a result of working on this notebook, we have been able to propose a new differentiable loss function which is more robust and suits better the purpose of our research.\n", | |
"\n", | |
"The results presented in the new version of the manuscript have been updated using the new loss functions presented in this notebook." | |
] | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment