как преобразовать вывод одного нейрона в класс 0 и 1 в тензорном потоке - PullRequest
0 голосов
/ 29 апреля 2018

Я сделал NN на титановом наборе данных. Чтобы вычислить точность модели, я хочу, чтобы выход Z3 / A3 был 1, если он выше 0,5, и 0 в противном случае.

И если есть другой способ сделать это. Тогда, пожалуйста, скажите.

Вот моя прямая функция поддержки

def forward_prop(X, parameters):
    W1 = parameters['W1']
    W2 = parameters['W2']
    b1 = parameters['b1']
    b2 = parameters['b2']
    W3 = parameters['W3']
    b3 = parameters['b3']

    Z1 = tf.matmul(W1, tf.transpose(X))
    A1 = tf.nn.relu(tf.add(Z1, b1))
    Z2 = tf.matmul(W2, A1)
    A2 = tf.nn.relu(tf.add(Z2, b2))
    Z3 = tf.matmul(W3, A2)
    A3 = tf.nn.softmax(tf.add(Z3, b3))

    return A3

Форма вывода A3 (1,1)

Вот функция стоимости

def compute_cost(Z3, Y, m):
    cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(
        labels=tf.transpose(Y), logits=Z3))
    return cost

Это дает выходные данные в виде некоторых чисел ... Я хочу, чтобы выходные данные были в виде дискретных классов, т.е. 0 и 1.

Пожалуйста, помогите !!

1 Ответ

0 голосов
/ 29 апреля 2018

tf.nn.softmax () вычисляет распределение вероятностей по классам (выходным нейронам), если у вас есть только 1 выходной нейрон, тогда распределение вероятностей по 1 нейрону всегда будет 1,0. Я бы предложил использовать tf.sigmoid () в сочетании с tf.greater () , например:

A3 = tf.sigmoid(tf.add(Z3, b3))
# ...
prediction = tf.greater(A3, 0.5)

прогноз вернет True , если A3 больше 0,5, False в противном случае. Вы можете преобразовать логическое предсказание в другие типы, такие как целые числа:

class_label = tf.cast(prediction, tf.int32)

Таким образом, True будет преобразован в 1, а False в 0. Что касается функции стоимости, используйте tf.nn.sigmoid_cross_entropy_with_logits () :

cost = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(labels=tf.transpose(Y), logits=Z3))

Этот пост содержит более подробную информацию о бинарной классификации отдельных нейронов, я бы посоветовал вам взглянуть на нее.

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