Я пытаюсь перегрузить сеть поверх простых данных. Данные, с которыми я работаю, - это набор данных изображений MNIST, 60000 обучающих изображений размером 784 пикселя.
То, что я хочу сделать, это форма поиска фазы. Я взял набор данных MNIST и выполнил 2 переменных преобразования Фурье. Это преобразовало реальную матрицу 60000 на 784 в комплексную матрицу 60000 на 784.
Наконец, я взял абсолютное значение каждого числа и поместил его в новую действительную матрицу 60000 на 784, называемую амплитудами, а также взял угол (или фазу) каждого числа и поместил его в 60000: 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. Вы можете стать лучше? Как я могу улучшить это?