Я хочу отбелить набор данных CIFAR10 с помощью ZCA.Вход X_train
имеет форму (40000, 32, 32, 3), где 40000 - это количество изображений, а 32x32x3 - размер каждого изображения.Для этой цели я использую код из этого ответа :
X_flat = np.reshape(X_train, (-1, 32*32*3))
# compute the covariance of the image data
cov = np.cov(X_flat, rowvar=True) # cov is (N, N)
# singular value decomposition
U,S,V = np.linalg.svd(cov) # U is (N, N), S is (N,)
# build the ZCA matrix
epsilon = 1e-5
zca_matrix = np.dot(U, np.dot(np.diag(1.0/np.sqrt(S + epsilon)), U.T))
# transform the image data zca_matrix is (N,N)
zca = np.dot(zca_matrix, X_flat) # zca is (N, 3072)
Однако во время выполнения я обнаружил следующее предупреждение:
D:\toolkits.win\anaconda3-5.2.0\envs\dlwin36\lib\site- packages\ipykernel_launcher.py:8: RuntimeWarning: invalid value encountered in sqrt
Итак, послеЯ получил вывод SVD, я попытался:
print(np.min(S)) # prints -1.7798217
Что неожиданно, потому что S
может иметь только положительные значения.Кроме того, результат отбеливания ZCA был неверным, и он содержал значения nan
.
Я попытался воспроизвести это, повторно запустив этот же код во второй раз, и на этот раз я не встретил никаких предупреждений или каких-либо отрицательных S
значений, но вместо этого я получил:
print(np.min(S)) # prints nan
Есть идеи, почему это могло произойти?
Обновление: Перезапустил ядро для освобожденияресурсы процессора и оперативной памяти, и попытался снова запустить этот кодСнова получено то же предупреждение для кормления в отрицательных значениях до np.sqrt()
.Не уверен, поможет ли это, но я также приложил данные об использовании процессора и оперативной памяти:
показатели монитора активности