我正在尝试“学习”一组大约 10 k 的复值输入图像(幅度/相位;实数/图像)和具有 48 个条目的实值输出向量之间的关系。该输出向量不是一组标签,而是一组数字,代表优化给定复值图像的视觉印象的最佳参数。这些参数是由算法生成的。数据中可能存在一些噪声(来自图像和生成参数向量的算法) 这些参数或多或少取决于输入图像的 FFT(快速傅里叶变换)。因此,我正在考虑用 FFT(complexImage) 的 1D 重塑版本为网络(5 个隐藏层,但架构现在不重要)提供数据 - 一些伪代码:
// discretize spectrum
obj_ft = fftshift(fft2(object));
obj_real_2d = real(obj_ft);
obj_imag_2d = imag(obj_ft);
// convert 2D in 1D rows
obj_real_1d = reshape(obj_real_2d, 1, []);
obj_imag_1d = reshape(obj_imag_2d, 1, []);
// create complex variable for 1d object and concat
obj_complx_1d(index, :) = [obj_real_1d obj_imag_1d];
opt_param_1D(index, :) = get_opt_param(object);
我想知道是否有更好的方法将复杂值图像输入深度网络。我想避免使用复杂的渐变,因为它并不是真的必要?!我“只是”尝试找到一个“黑匣子”,它在插入新图像后输出优化的参数。
Tensorflow 获取输入:
obj_complx_1d和输出向量 opt_param_1D 进行训练。
幅度/角度分量
shape = (WIDTH, HEIGHT)
的图像
import numpy as np
kSpace = np.fft.ifftshift(np.fft.fft2(img))
这将为您提供一个二维复杂数组。然后您可以将数组转换为
data = np.dstack((np.abs(kSpace), np.angle(kSpace)))
这个数组将是一个带有
shape = (WIDTH, HEIGHT, 2)
的 numpy 数组。该数组代表一幅复值图像。对于一组图像,请确保将它们连接在一起以获得形状数组 =
(NUM_IMAGES, WIDTH, HEIGHT, 2)
我做了一个使用张量流通过简单的神经网络学习傅里叶变换的简单示例。您可以在 https://github.com/michaelmendoza/learning-tensorflow