试图过度拟合简单的神经网络

时间:2019-05-12 11:47:29

标签: python machine-learning keras neural-network

我正在尝试通过简单数据过度拟合网络。我正在使用的数据是MNIST图像数据集,60000个训练图像,大小为784像素。

我想做的是一种相位检索的形式。我采用了MNIST数据集,并对它执行了2个变量傅立叶变换。这将60000 x 784实矩阵转换为60000 x 784复数矩阵。

最后,我取每个数字的绝对值,并将其放入一个新的60000 x 784实数矩阵,称为振幅,并且我还取每个数字的角度(或相位),并将其放入60000 by 784个实数矩阵,称为相位。

目标是在给定振幅的情况下预测相位。

这是极其简单的代码

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。你能好一点吗?我该如何改善呢?

0 个答案:

没有答案