A workaround could be to element wise multiply each location by (-1)^(x+y) before doing the FFT, and after the IFFT. The -1 or +1 multiplications should cancel each other out in the back propagation I believe.
import numpy as np
from scipy import misc

def shift(img):
    tmpImg = img.copy()
    n,m,p = tmpImg.shape
    x = np.arange(0, m, 1)
    y = np.arange(0, n, 1)
    xm, ym  = np.meshgrid(x,y)
    shifter = (-1)**(xm + ym)
    shifter = np.expand_dims(shifter,2)
    shifter = np.repeat(shifter,3,2)
    tmpImg = np.multiply(tmpImg,shifter)

    return tmpImg

img = misc.face().astype(float)

tmpImg = shift(img)
altShift = np.fft.fft2(tmpImg,axes=(0,1))
npShift = np.fft.fftshift(np.fft.fft2(img,axes=(0,1)),axes=(0,1))

print(np.allclose(altShift,npShift))

altIFFT_Shift = np.fft.ifft2(altShift,axes=(0,1))
npIFFT_Shift = np.fft.ifft2(np.fft.ifftshift(npShift,axes=(0,1)),axes=(0,1))
altIFFT_Shift = shift(altIFFT_Shift)

print(np.allclose(altIFFT_Shift,npIFFT_Shift))