【发布时间】:2018-10-27 06:37:17
【问题描述】:
我正在尝试在 keras 中实现 MNIST 图像的 DCT。我对此有几个问题:
- 当我尝试可视化 MNIST 数据集的 DCT 系数时,我看到一个黑色背景的图像和一个代表输入图像频率信息的白色图案。为什么在黑色背景和白色数字的意义上颜色反转,而不是具有白色背景和黑色数字的原始图像?
- 如果我对输入图像的 DCT 系数进行 DCT,与只进行一次 DCT 相比,它会给我一个更强的模式(检查所附图像)来代表原始图像。这是为什么呢?
这是我的代码:
import keras
from keras import backend as K
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten, Add
from keras.layers import Convolution2D, MaxPooling2D
from keras.utils import np_utils
from keras.layers.core import Lambda
from keras.datasets import mnist
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
X_train /= 255
X_test /= 255
model = Sequential()
model.add(Lambda(lambda x: K.tf.spectral.dct(K.transpose(K.tf.spectral.dct(K.transpose(x), type=2, norm='ortho')), type=2, norm='ortho') ,input_shape=(28, 28,1), output_shape=(28,28,1)))
model.add(Lambda(lambda x: K.tf.spectral.dct(K.transpose(K.tf.spectral.dct(K.transpose(x), type=2, norm='ortho')), type=2, norm='ortho'),input_shape=(28, 28,1), output_shape=(28,28,1)))
X_train = X_train.reshape(X_train.shape[0], 28, 28, 1)
viz_dct = model.predict(X_train[:len(X_train)//2])
def get_reconstructed_image(coeff):
coeff = coeff*255
img = Image.fromarray(coeff)
return img
print(viz_dct.shape)
viz_dct = viz_dct.reshape(viz_dct.shape[0],viz_dct.shape[1],viz_dct.shape[2])
plt.imshow(get_reconstructed_image(viz_dct[5]))
以下是上述程序的输出图像:
原图:
在第一个 dct 之后:
在第二个 dct 之后:
【问题讨论】:
标签: python neural-network keras conv-neural-network dct