#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. Спасибо, это работает отлично. Я начну использовать эти функции чаще!