Модель тензорного потока keras предсказывает аналогичное значение для каждого теста - PullRequest
1 голос
/ 29 мая 2020

Я пытаюсь выполнить двоичную классификацию с помощью RNN с тензорным потоком. Ярлыки моих обучающих и тестовых данных - 0 и 1. Когда я пытаюсь использовать свою RNN на моей готовой модели, она возвращает почти одинаковые прогнозы для каждой отдельной выборки:

model.predict(holdout_x[400:500])

array([[-4.116061 , -1.3410028],
   [-4.1405125, -1.3521721],
   [-4.171639 , -1.3665637],
   [-4.1515126, -1.356805 ],
   [-4.1466017, -1.3546   ],
   [-4.1306634, -1.3479614],
   [-4.1259437, -1.3455958],
   [-4.1161146, -1.3414239],
   [-4.135389 , -1.3504343],
   [-4.1410503, -1.3527975],
   [-4.1413574, -1.3528765],
   [-4.1483955, -1.3562942],
   [-4.208541 , -1.383785 ],
   [-4.212775 , -1.3856986],
   [-4.2415767, -1.3998709],
   [-4.250041 , -1.4033642],
   [-4.2150397, -1.3866954],
   [-4.2094893, -1.3843822],
   [-4.1996937, -1.380172 ],
   [-4.0357003, -1.3077384],
   [-4.030937 , -1.3050178],
   [-4.0273657, -1.3041242],
   [-4.0044518, -1.2939129],
   [-4.003211 , -1.2922926],
   [-4.015193 , -1.2991027],
   [-3.9627366, -1.2757865],
   [-3.9252415, -1.2586563],
   [-3.936089 , -1.265475 ],
   [-3.8994193, -1.2497959],
   [-3.918683 , -1.2593002],
   [-3.7673016, -1.1924615],
   [-3.7568831, -1.1912583]], dtype=float32)

Вот как моя модель смотрит:

model = tf.keras.Sequential()

model.add(keras.layers.LSTM(200, input_shape=(200, 7), return_sequences=True))

model.add(keras.layers.LSTM(200, input_shape=(200, 7), return_sequences=True))

model.add(keras.layers.LSTM(200))

# Add a Dense layer with 10 units.
model.add(keras.layers.Dense(2))

model.summary()

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

Как я могу этого не допустить?

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Теоретически причины могли быть разные. Однако в этом примере есть одна вещь, которая определенно требует пояснения.

Редкая категориальная кроссентропия ожидает, что вы укажете вероятности (значения от 0 до 1) для прогнозов, если вы не создадите его с помощью from_logits=True. Однако для вашего последнего слоя не указана активация. Таким образом, выходные значения не ограничиваются [0,1].

Я бы начал с изменения последнего слоя на model.add(keras.layers.Dense(2, activation='softmax')). А затем убедитесь, что метки вашего наземного класса достоверности загружены в правильном формате (согласно https://www.tensorflow.org/api_docs/python/tf/keras/losses/sparse_categorical_crossentropy).

0 голосов
/ 29 мая 2020

Изменить model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

Измените потери на: loss='binary_crossentropy', потому что вы выполняете двоичную классификацию.

При выполнении двоичной классификации у вас должен быть только один плотный узел на конец, измените его на model.add(keras.layers.Dense(1))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...