Python 尝试过拟合简单神经网络

Python 尝试过拟合简单神经网络,python,machine-learning,keras,neural-network,Python,Machine Learning,Keras,Neural Network,我试图通过简单的数据来覆盖网络。我正在处理的数据是MNIST图像数据集,60000张大小为784像素的训练图像 我想做的是相位恢复的一种形式。我获取MNIST数据集并对其执行2变量傅里叶变换。这将60000×784实矩阵转换为60000×784复矩阵 最后,我取每个数字的绝对值,放入一个新的60000x784实数矩阵,称为振幅,我还取每个数字的角度(或相位),放入60000x784实数矩阵,称为相位 目标是预测给定振幅的相位 这是非常简单的代码 from keras.models import

我试图通过简单的数据来覆盖网络。我正在处理的数据是MNIST图像数据集,60000张大小为784像素的训练图像

我想做的是相位恢复的一种形式。我获取MNIST数据集并对其执行2变量傅里叶变换。这将60000×784实矩阵转换为60000×784复矩阵

最后,我取每个数字的绝对值,放入一个新的60000x784实数矩阵,称为振幅,我还取每个数字的角度(或相位),放入60000x784实数矩阵,称为相位

目标是预测给定振幅的相位

这是非常简单的代码

from keras.models import Sequential
from keras.layers import Dense
import numpy as np

def normalize_angles(phases):
    phases = phases + np.pi
    phases /= (2 * np.pi)
    return phases

def build_fourier_mnist():
    mnist = np.load("train_features.npy") #MNIST as is.
    fourier_mnist = np.zeros(mnist.shape, dtype=np.complex)
    for i in range(mnist.shape[0]):
        current_image = np.reshape(mnist[i, :], (28, 28)) #Turn to matrix so we can perform 2d fft
        fourier_current_image = np.fft.fft2(current_image) #perform 2d fft
        fourier_mnist[i, :] = np.reshape(fourier_current_image,(1, 784)) #flatten and save to new matrix
    return fourier_mnist

fourier_mnist = build_fourier_mnist()
amplitudes = np.abs(fourier_mnist)
phases = normalize_angles(np.angle(fourier_mnist))

model = Sequential()
model.add(Dense(784, input_dim=amplitudes.shape[1], activation='sigmoid'))
model.add(Dense(784, activation='sigmoid'))
model.add(Dense(784, activation='sigmoid'))
model.add(Dense(784, activation='sigmoid'))
model.add(Dense(phases.shape[1], activation='sigmoid'))
#Compile model
model.compile(loss='mean_squared_error', optimizer='adam')
#Fit the model
model.fit(amplitudes, phases, epochs=400, batch_size=100)
model.save("phase_retriever2.h5")

从某种意义上说,它确实“起作用”,它给出了一个相当不错的结果,但我正试图大量地过拟合它。我得到的最佳训练误差是0.083左右。你能再好一点吗?我该如何改进这一点?

如果你不介意问一下这有什么应用?相位恢复的应用真的是无穷无尽。这是一个很小的例子。相位恢复是指给定复数的振幅,求出角度。在本页。它提到了
错误减少算法
。那么您正试图为这个问题创建一个基于
ML
的算法?我正在尝试,但我似乎撞到了0.083的墙:)为什么不增加
并创建一个新的数据集,其中的图像有点
腐蚀
稀释
旋转
,并增加
批量
大小?如果你不介意问一下,这有什么应用吗相位恢复确实是无穷无尽的。这是一个很小的例子。相位恢复是指给定复数的振幅,求出角度。在本页。它提到了
错误减少算法
。那么您正试图为这个问题创建一个基于
ML
的算法?a我正在尝试,但我似乎碰到了0.083的墙:)为什么不增加
,创建一个新的数据集,其中的图像有一点
侵蚀
稀释
旋转
,并增加
批量
大小?