Я рассматриваю вопрос о вставке невесомого преобразования между слоями CNN в нейронной сети. Преобразование очень сложное - подробности ниже. Я знаю, что пользовательские преобразования поддерживаются, например, через слой Keras * Lambda
- однако я не знаю, способен ли TF справиться с чем-то такого сложного. Код, который у меня есть, должен быть преобразован для совместимости, но я, скорее, не потрачу впустую усилий.
Может ли автоопределение TensorFlow обрабатывать synsq_cwt_fwd
?
Непрерывное синхронное преобразование - полный код этапа разработки в репозитории ssqueezepy . Основные моменты (упрощенно):
x = np.random.randn(2000)
len(Wx.squeeze().shape) == 2
psihfn = lambda w: np.exp(2 * PI * 1j * .1 * w) * (
np.abs(w - 1) < .999) * np.exp(-1. / (1 - ((w - 1) * (np.abs(w - 1) < .999)) ** 2))
for i in range(200):
psih = psihfn(5 * np.arange(500))
Wx[i] = np.fft.ifftshift(np.fft.ifft(psih * np.fft.fft(x)))
Wx.dtype == 'complex128'
u = np.unwrap(np.angle(Wx)).T
w = np.array([np.diff(u), u[-1] - u[0]]).T
psihfn
включает в себя (а) сложную экспоненциальную; (б) обратная асимптотика c вещественная экспонента; (c) логическая маска Wx
включает в себя (a) fft
из ifftshift
из ifft
из psih * fft(x)
, (b) вычислено итеративно , но не периодически (будущие значения не зависят от прошлого) w
(второй BLOB-объект) включает в себя (a) Wx
, вычисленное в 1 & 2, массив complex128
2D; (б) применение dif(unwrap(angle(Wx)).T)
Сложные компоненты могут быть исключены полностью, в том числе в 1 (а). Возможно, основным предметом внимания является гнездо БПФ; Я не знаю, как numpy вычисляет БПФ, поскольку он инкапсулирует вовлеченную операцию. Также возникает вопрос о производительности - если на небольшом массиве это занимает несколько часов, оно того не стоит.