|
|
@ -1,17 +1,19 @@ |
|
|
|
import numpy as np |
|
|
|
import numpy as np |
|
|
|
from openpilot.selfdrive.modeld.constants import ModelConstants |
|
|
|
from openpilot.selfdrive.modeld.constants import ModelConstants |
|
|
|
|
|
|
|
|
|
|
|
def sigmoid(x): |
|
|
|
def safe_exp(x, out=None): |
|
|
|
# -11 is around 10**14, more causes float16 overflow |
|
|
|
# -11 is around 10**14, more causes float16 overflow |
|
|
|
clipped_x = np.clip(x, -11, np.inf) |
|
|
|
return np.exp(np.clip(x, -np.inf, 11), out=out) |
|
|
|
return 1. / (1. + np.exp(-clipped_x)) |
|
|
|
|
|
|
|
|
|
|
|
def sigmoid(x): |
|
|
|
|
|
|
|
return 1. / (1. + safe_exp(-x)) |
|
|
|
|
|
|
|
|
|
|
|
def softmax(x, axis=-1): |
|
|
|
def softmax(x, axis=-1): |
|
|
|
x -= np.max(x, axis=axis, keepdims=True) |
|
|
|
x -= np.max(x, axis=axis, keepdims=True) |
|
|
|
if x.dtype == np.float32 or x.dtype == np.float64: |
|
|
|
if x.dtype == np.float32 or x.dtype == np.float64: |
|
|
|
np.exp(x, out=x) |
|
|
|
safe_exp(x, out=x) |
|
|
|
else: |
|
|
|
else: |
|
|
|
x = np.exp(x) |
|
|
|
x = safe_exp(x) |
|
|
|
x /= np.sum(x, axis=axis, keepdims=True) |
|
|
|
x /= np.sum(x, axis=axis, keepdims=True) |
|
|
|
return x |
|
|
|
return x |
|
|
|
|
|
|
|
|
|
|
@ -46,7 +48,7 @@ class Parser: |
|
|
|
|
|
|
|
|
|
|
|
n_values = (raw.shape[2] - out_N)//2 |
|
|
|
n_values = (raw.shape[2] - out_N)//2 |
|
|
|
pred_mu = raw[:,:,:n_values] |
|
|
|
pred_mu = raw[:,:,:n_values] |
|
|
|
pred_std = np.exp(raw[:,:,n_values: 2*n_values]) |
|
|
|
pred_std = safe_exp(raw[:,:,n_values: 2*n_values]) |
|
|
|
|
|
|
|
|
|
|
|
if in_N > 1: |
|
|
|
if in_N > 1: |
|
|
|
weights = np.zeros((raw.shape[0], in_N, out_N), dtype=raw.dtype) |
|
|
|
weights = np.zeros((raw.shape[0], in_N, out_N), dtype=raw.dtype) |
|
|
|