TensorFlow имеет функцию под названием GradientTape , которая позволяет получать градиенты методом Монте-Карло (?).
Я пытаюсь смоделировать градиент ReLU, но это не работает наотрицательная половина X.
#colab or ipython reset
%reset -f
#libs
import tensorflow as tf;
#init
tf.enable_eager_execution();
#code
x = tf.convert_to_tensor([-3,-2,-1,0,1,2,3],dtype=tf.float32);
with tf.GradientTape() as t:
t.watch(x);
y = fx = x; #THIS IS JUST THE POSITIVE HALF OF X
dy_dx = t.gradient(y,x);
print(dy_dx);
Думаю, мне нужно что-то изменить в строке y = fx = x
, например, добавив if x<=0
, но не могу понять, как.
ВышеКод распечатывается:
tf.Tensor([1. 1. 1. 1. 1. 1. 1.], shape=(7,), dtype=float32)
Но он должен быть:
tf.Tensor([0. 0. 0. 0. 1. 1. 1.], shape=(7,), dtype=float32)