Hi! I'm working with deepxde using tensorflow.compat.v1 as a backend and I need to approximate an integral using tensorflow but I haven't able to figure it out. As context the integral is
The difficulty here is that the variable t is the upper limit of the integral but also is in the function q. So for each t I need to create a tensor and iterate it.
This is my code so far
def tf_integral(t_tensor, a):
dt = tf.constant(0.1)
ta = tf.TensorArray(tf.float32, size=0, dynamic_size=True)
ta = ta.unstack([0., 1.])
for i in range(n_days):
t = t_tensor[i]
# breakpoint()
eta_tensor = tf.range(dt, t + dt, dt)
value = tf.reduce_sum(tf_q(t - eta_tensor, b, c) * tf.exp(eta_tensor, d)) * dx
ta = ta.write(i, value)
return ta.stack()
where t_tensor is a tensor of shape [None, 1] (a column), n_days is a integer since I wasn't able to get something like len(t_tensor). I'm getting the following error.
ValueError: in user code:
File "/mnt/d/Documents/git/insight/notebooks/china project/china-v-fitted.py", line 130, in tf_integral_dv_dphi *
nu_tensor = tf.range(dx, t + dx, dx)
ValueError: Shape must be rank 0 but is rank 1
for 'limit' for ' = Range[Tidx=DT_FLOAT](Const, add, Const)' with input shapes: [], [1], [].
I'm not sure if I can use @tf.function decorator with tensorflow.compat.v1 backend since it is my first time working with tensorflow.
I've been looking for alternatives and it seems I could use tf.compat.v1.while_loop and/or tf.compat.v1.wrap_function but honestly I'm not sure.
As a reference, the code with scipy works well
def integral(t, a):
dt = 0.1
eta_array = np.arange(dt, t + dt, dt)
value = np.sum(q(t - eta_array) * np.exp(a * eta_array)) * dx
return value
Thanks in advance!
source https://stackoverflow.com/questions/75961673/write-a-function-with-a-for-loop-with-tensorflow-compat-v1-to-implement-a-integr
Comments
Post a Comment