Согласно теореме о свертке операция свертки меняется на точечное умножение в области Фурье -
здесь у меня есть «fft_x» формы (размер пакета, высота, ширина, in_channels), который является FFT входных данных
и аналогично 'fft_kernel' формы (высота, ширина, in_channels, out_channels), которая является fft ядра после того, как она добавлена к размеру изображения. Для точного умножения их я использовал einsum следующим образом -
...
print(fft_x)
print(fft_kernel)
output = 0
n=int(self.no_of_kernels/2)+1 # n = out_channels here
for i in range(n):
output += np.einsum('ijkl,jkl->ijk', fft_x, fft_kernel[i])
return output
...
Это дает следующий вывод -
Tensor("input_11:0", shape=(?, 28, 28, 1), dtype=complex64)
Tensor("fourier__conv2d_11/transpose:0", shape=(28, 28, 1, 17), dtype=complex64)
...
...
ValueError: einstein sum subscripts string contains too many subscripts for operand 0
Может кто-нибудь объяснить, почему возникает эта ошибка? Заранее спасибо за любую помощь.