|
import torch |
|
import numpy as np |
|
import matplotlib.pyplot as plt |
|
|
|
a = torch.signal.windows.gaussian(11, sym=True, std=3) |
|
plt.plot(a) |
|
|
|
|
|
def gaussian_smoothing(y_hot, mu=5, sigma=0.865): |
|
""" |
|
y_hot: one-hot encoded array |
|
""" |
|
|
|
|
|
|
|
i = np.arange(len(y_hot)) |
|
|
|
|
|
y_smooth = np.exp(-(i - mu)**2 / (2 * sigma**2)) |
|
|
|
|
|
y_smooth /= y_smooth.sum() |
|
return y_smooth, sigma |
|
|
|
|
|
|
|
|
|
y_hot = torch.zeros(11) |
|
y_hot[5] = 1 |
|
plt.plot(y_hot, 'b.-') |
|
|
|
alpha = 0.3 |
|
y_ls = (1 - alpha) * y_hot + alpha / 10 |
|
plt.plot(y_ls, 'r.-') |
|
|
|
y_gs, std = gaussian_smoothing(y_hot, A=0.5) |
|
plt.plot(y_gs, 'g.-') |
|
|
|
y_gst_a, std = gaussian_smoothing(y_hot, A=0.5, mu=5.5) |
|
plt.plot(y_gst_a, 'y.-') |
|
|
|
y_gst_b, std = gaussian_smoothing(y_hot, A=0.5, mu=5.8) |
|
plt.plot(y_gst_b, 'c.-') |
|
|
|
plt.legend([ |
|
'y_hot', 'label smoothing' + '\n' + '(alpha=0.3)', |
|
'gaussian smoothing' + '\n' + 'for interval of interest' + '\n' + 'mu=5', |
|
'gaussian smoothing' + '\n' + 'mu=5.5', 'gaussian smoothing' + '\n' + 'mu=5.8' |
|
]) |
|
|
|
plt.grid() |
|
plt.xticks(np.arange(11), np.arange(0, 110, 10)) |
|
plt.xlabel('''Time (ms) |
|
original (quantized) one hot label: |
|
[0,0,0,0,0,1,0,0,0,0,0] |
|
\n |
|
label smooting is defined as: |
|
y_ls = (1 - α) * y_hot + α / K, |
|
where K is the number of classes, α is the smoothing parameter |
|
\n |
|
gaussian smoothing for the interval (± 10ms) of interest: |
|
y_gs = A * exp(-(i - mu)**2 / (2 * sigma**2)) |
|
with sigma = 0.865 an mu = 5 |
|
\n |
|
gaussian smoothing with unqunatized target timing: |
|
mu = 5.5 for 55ms target timing |
|
''') |
|
|