Использование маски условных операций с массивом Numpy с помощью Tensorflow

#python #arrays #numpy #tensorflow #conditional-formatting

#python #массивы #numpy #tensorflow #условное форматирование

Вопрос:

Я новичок в Tensoflow и пытаюсь реализовать его в пользовательском проекте RNN, чтобы узнать больше о том, как работают нейронные сети.

Моя проблема проста, но, похоже, я не нахожу удовлетворительного ответа.

Я привык к Numpy и операциям с массивами с использованием условных масок, но я не нахожу способа преобразовать это с помощью тензоров

 def ELu(in_array):
    in_array[in_array<= 0] = math.e ** in_array[in_array<= 0] - 1
    return in_array

>>>print(ELu(np.array([1.0,0.0,-1.0])))
 

Дает мне

 [ 1.          0.         -0.63212056]
 

И я хотел бы отредактировать эту функцию, чтобы она могла дать мне аналогичный тензор, если я сделаю что-то подобное

 >>>print(ELu(tf.convert_to_tensor([1.0,0.0,-1.0])))
 

Что должно дать мне

 <tf.Tensor: shape=(3,), dtype=float32, numpy=array([ 1.,  0., -0.63212056], dtype=float32)>
 

но доступ к тензору с использованием аналогичного способа in_array[in_array<= 0] не работает

Ответ №1:

Использование tensor_scatter_nd_update() :

 import math
def ELu(in_array):
  mask = in_array <= 0
  inds = tf.where(mask)
  updates = tf.boolean_mask(in_array, mask)
  updates = math.e ** updates - 1.
  res = tf.tensor_scatter_nd_update(in_array, inds, updates)
  return res
 

Комментарии:

1. Спасибо, это работает отлично. Я начну использовать эти функции чаще!