Keras Metric Issue - PullRequest
       1

Keras Metric Issue

0 голосов
/ 01 марта 2019

Я использую последнюю версию tenorflow (1.13).Я использую Keras API для обучения сети LSTM.

Я не могу тренироваться с tf.keras.metrics.Precision() и tf.keras.metrics.Recall()

Он компилируется.Но во время обучения я получаю следующую ошибку

InvalidArgumentError: утверждение не выполнено: [предсказания должны быть> = 0] [Условие x> = y не содержит поэлементно: x (dens_3 / BiasAdd: 0) =] [[[2.72658144e-06 1.17555362e-06 1.96436554e-06 ...]] ...] [y (metrics_3 / precision_1 / Cast / x: 0) =] [0] [[{{node metrics_3 / precision_1 / assert_greater_equal / Assert / AssertGuard / Assert}}]]

Модель очень проста, как показано ниже

model = Sequential()
model.add(LSTM (120,activation = "tanh", input_shape=(timesteps,dim), return_sequences=True))
model.add(LSTM(120, activation = "tanh", return_sequences=True))
model.add(LSTM(120, activation = "tanh", return_sequences=True))
model.add(LSTM(120, activation = "tanh", return_sequences=True))
model.add(LSTM(120, activation = "tanh", return_sequences=True))
model.add(LSTM(120, activation = "tanh", return_sequences=True))
model.add(Dense(dim))
model.compile(optimizer="adam", loss="mse",  metrics=[tf.keras.metrics.Precision()])

history = model.fit(data,data, 
                    epochs=100,
                    batch_size=10,
                    validation_split=0.2,
                    shuffle=True,
                    callbacks=[ch]).history

Это ошибка или я делаюничего плохого?

1 Ответ

0 голосов
/ 01 марта 2019

Precision и recall являются метриками для измерения эффективности классификации.Поскольку вы используете mse и линейную активацию на последнем слое, вы скорее делаете регрессию.

Если вы хотите классифицировать, убедитесь, что вы создали выходные данные в диапазоне [0,1].Это можно получить с помощью активации sigmoid или softmax на последнем слое, в зависимости от вашей проблемы.(двоичная или n-классовая классификация)

Далее убедитесь, что ваша выходная форма правильная, поскольку вы получили return_sequences=True в последнем слое LSTM, что может быть не тем, что вы хотите.

РЕДАКТИРОВАТЬ : Благодаря вашему звонку model.fit теперь я вижу, что вы пытаетесь автоматически закодировать свои данные.Поэтому precision как метрика здесь не имеет смысла.

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