#python #tensorflow #keras #neural-network
Вопрос:
У меня есть нейронная сеть, которая выводит несколько выходов num_out
.
Я знаю, что если я хочу, чтобы все выходные данные были положительными, я мог бы применить relu
функцию активации (или другие) на выходном уровне.
Однако моя цель состоит в том, чтобы убедиться, что только максимальное значение среди всех num_out
результатов является положительным. Я не могу найти способ обеспечить это.
Комментарии:
1. Может быть, вы могли бы предоставить свой код ?
Ответ №1:
Один из способов решить вашу проблему-использовать tf.where
и tf.reduce_max
:
import tensorflow as tf x = tf.constant([ [-1, -2, -3], [-4, -5, -6] ]) max_val = tf.reduce_max(x, keepdims=True) new_max_val = tf.where(tf.greater(max_val, 0), max_val, tf.math.negative(max_val)) result = tf.where(tf.equal(x, max_val), tf.ones(tf.shape(x), dtype=x.dtype) * new_max_val, x) print('Max value: ', max_val) print('New Max value: ', new_max_val) print('Result: ', result)
Max value: tf.Tensor([[-1]], shape=(1, 1), dtype=int32) New Max value: tf.Tensor([[1]], shape=(1, 1), dtype=int32) Result: tf.Tensor( [[ 1 -2 -3] [-4 -5 -6]], shape=(2, 3), dtype=int32)
Сначала я нахожу максимальное значение в тензоре x
, а затем преобразую его в положительное значение, если оно отрицательное, в противном случае оно остается прежним. После этого я обновляю тензор x
новым значением. Если наибольшее значение в вашем тензоре положительное, то ничего не меняется:
x = tf.constant([ [-1, -2, -3], [ 4, 5, 6] ]) # --gt;
Max value: tf.Tensor([[6]], shape=(1, 1), dtype=int32) New Max value: tf.Tensor([[6]], shape=(1, 1), dtype=int32) Result: tf.Tensor( [[-1 -2 -3] [ 4 5 6]], shape=(2, 3), dtype=int32)
Если вы хотите убедиться, что все остальные элементы, кроме максимального значения, являются отрицательными, измените эту строку:
result = tf.where(tf.equal(x, max_val), tf.ones(tf.shape(x), dtype=x.dtype) * new_max_val, tf.abs(x)*-1)
Max value: tf.Tensor([[6]], shape=(1, 1), dtype=int32) New Max value: tf.Tensor([[6]], shape=(1, 1), dtype=int32) Result: tf.Tensor( [[-1 -2 -3] [-4 -5 6]], shape=(2, 3), dtype=int32)