У меня есть следующие данные формы
X_Train.shape,Y_Train.shape
Out[52]: ((983, 19900), (983,))
X_Test.shape,Y_Test.shape
Out[53]: ((52, 19900), (52,))
Я использую простой двоичный классификатор, поскольку Y_train и Y_test могут иметь значение 1 или 2
import keras
import tensorflow as tf
from keras import layers
from keras.layers import Input, Dense
from keras.models import Model,Sequential
import numpy as np
from keras.optimizers import Adam
myModel = keras.Sequential([
keras.layers.Dense(1000,activation=tf.nn.relu,input_shape=(19900,)),
keras.layers.Dense(64, activation=tf.nn.relu),
keras.layers.Dense(32, activation=tf.nn.relu),
keras.layers.Dense(1, activation=tf.nn.softmax)
])
myModel.compile(optimizer='adam', loss='sparse_categorical_crossentropy',metrics=['accuracy'])
myModel.fit(X_Train, Y_Train, epochs=100,batch_size=1000)
test_loss,test_acc=myModel.evaluate(X_Test,Y_Test)
Вывод кода
Потеря обучения и точность
Epoch 1/100
983/983 [==============================] - 1s 1ms/step - loss: nan - acc: 0.4608
Epoch 2/100
983/983 [==============================] - 0s 206us/step - loss: nan - acc: 0.4873
Epoch 3/100
983/983 [==============================] - 0s 200us/step - loss: nan - acc: 0.4883
Epoch 4/100
983/983 [==============================] - 0s 197us/step - loss: nan - acc: 0.4883
Epoch 5/100
983/983 [==============================] - 0s 194us/step - loss: nan - acc: 0.4873
Epoch 6/100
983/983 [==============================] - 0s 202us/step - loss: nan - acc: 0.4863
Epoch 7/100
983/983 [==============================] - 0s 198us/step - loss: nan - acc: 0.4863
Epoch 8/100
983/983 [==============================] - 0s 194us/step - loss: nan - acc: 0.4883
Epoch 9/100
983/983 [==============================] - 0s 196us/step - loss: nan - acc: 0.4873
Epoch 10/100
983/983 [==============================] - 0s 198us/step - loss: nan - acc: 0.4873
Epoch 11/100
983/983 [==============================] - 0s 200us/step - loss: nan - acc: 0.4893
Epoch 12/100
983/983 [==============================] - 0s 198us/step - loss: nan - acc: 0.4873
Epoch 13/100
983/983 [==============================] - 0s 194us/step - loss: nan - acc: 0.4873
Epoch 14/100
983/983 [==============================] - 0s 197us/step - loss: nan - acc: 0.4883
Epoch 97/100
983/983 [==============================] - 0s 196us/step - loss: nan - acc: 0.4893
Epoch 98/100
983/983 [==============================] - 0s 199us/step - loss: nan - acc: 0.4883
Epoch 99/100
983/983 [==============================] - 0s 193us/step - loss: nan - acc: 0.4883
Epoch 100/100
983/983 [==============================] - 0s 196us/step - loss: nan - acc: 0.4863
Потери и точность тестирования
test_loss,test_acc
Out[58]: (nan, 0.4615384661234342)
Я также проверил, есть ли в моих данных значение nan
np.isnan(X_Train).any()
Out[5]: False
np.isnan(Y_Train).any()
Out[6]: False
np.isnan(X_Test).any()
Out[7]: False
np.isnan(Y_Test).any()
Out[8]: False
Мой вопрос заключается в том, почему моя точность обучения не улучшается, и почему потери также равны Нан, и почему без однократного кодирования softmax на выходе работает нормально?
Примечание 1: Я извиняюсь, что мои данные большие, поэтому я не могу поделиться ими здесь, но если есть какой-то способ поделиться ими здесь, я готов это сделать.
Примечание2 В моих тренировочных данных много нулевых значений