【发布时间】:2020-08-09 19:48:34
【问题描述】:
我在 MNIST 上应用了 PCA,降维为 32。然后,为了测试它,我创建了一个简单的分类网络。训练准确率不错:96%,但另一方面,测试准确率是2%。
那怎么了?
import tensorflow as tf
from tensorflow.keras.datasets import mnist
import tensorflow.keras.layers as layers
from tensorflow.keras.models import Sequential
import numpy as np
(x,y),(x2,y2) = mnist.load_data()
y = tf.keras.utils.to_categorical(y)
y2 = tf.keras.utils.to_categorical(y2)
def pca(x):
x = np.reshape(x, (x.shape[0], 784)).astype("float32") / 255.
mean = x.mean(axis=1)
#print(mean)
#print(mean[:,None])
x -= mean[:,None]
s, u, v = tf.linalg.svd(x)
s = tf.linalg.diag(s)
k = 32 # DIM_REDUCED
pca = tf.matmul(u[:,0:k], s[0:k,0:k])
#print(pca)
#print(pca.shape)
return pca
x = pca(x)
x2 = pca(x2)
## BUILD A SUPER SIMPLE CLASSIFIC. NET
model = Sequential()
model.add(layers.Dense(32, activation="relu", input_shape=(32,)))
model.add(layers.Dense(16, activation="relu"))
model.add(layers.Dense(10, activation="softmax"))
model.compile(loss = "categorical_crossentropy", optimizer = "adam", metrics = ["acc"])
model.fit(x,y, epochs = 5, verbose = 1, batch_size = 64, validation_data = (x2,y2))
输出:
Epoch 5/5
60000/60000 [==============================] - 1s 23us/sample - loss: 0.1278 - acc: 0.9626 - val_loss: 11.0141 - val_acc: 0.0202
【问题讨论】:
标签: python tensorflow machine-learning keras deep-learning