Python 尝试过拟合简单神经网络
我试图通过简单的数据来覆盖网络。我正在处理的数据是MNIST图像数据集,60000张大小为784像素的训练图像 我想做的是相位恢复的一种形式。我获取MNIST数据集并对其执行2变量傅里叶变换。这将60000×784实矩阵转换为60000×784复矩阵 最后,我取每个数字的绝对值,放入一个新的60000x784实数矩阵,称为振幅,我还取每个数字的角度(或相位),放入60000x784实数矩阵,称为相位 目标是预测给定振幅的相位 这是非常简单的代码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
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的墙:)为什么不增加层
,创建一个新的数据集,其中的图像有一点侵蚀
或稀释
或旋转
,并增加批量
大小?