Может ли TensorFlow отличить чрезвычайно сложное невесомое преобразование? - PullRequest
0 голосов
/ 04 февраля 2020

Я рассматриваю вопрос о вставке невесомого преобразования между слоями 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
  1. psihfn включает в себя (а) сложную экспоненциальную; (б) обратная асимптотика c вещественная экспонента; (c) логическая маска
  2. Wx включает в себя (a) fft из ifftshift из ifft из psih * fft(x), (b) вычислено итеративно , но не периодически (будущие значения не зависят от прошлого)
  3. w (второй BLOB-объект) включает в себя (a) Wx, вычисленное в 1 & 2, массив complex128 2D; (б) применение dif(unwrap(angle(Wx)).T)

Сложные компоненты могут быть исключены полностью, в том числе в 1 (а). Возможно, основным предметом внимания является гнездо БПФ; Я не знаю, как numpy вычисляет БПФ, поскольку он инкапсулирует вовлеченную операцию. Также возникает вопрос о производительности - если на небольшом массиве это занимает несколько часов, оно того не стоит.

...