问题描述
为了在Tensorflow 2.0中使用动态时间包装(DTW)功能测量两条曲线之间的距离,我尝试将以下DTW python代码段转换为Tensorflow。但是在第二个嵌套循环部分中,final_val不会更新为dtw_matrix。尝试对其进行调试,但还无法完成。解决这个问题的好方法是什么?
def dtw(s,t):
'''
s,t are 1D vector,eg.,128 by 1
'''
n,m = len(s),len(t)
dtw_matrix = np.zeros((n+1,m+1))
for i in range(n+1):
for j in range(m+1):
dtw_matrix[i,j] = np.inf
dtw_matrix[0,0] = 0
for i in range(1,n+1):
for j in range(1,m+1):
cost = abs(s[i-1] - t[j-1])
# take last min from a square Box
last_min = np.min([dtw_matrix[i-1,j],dtw_matrix[i,j-1],dtw_matrix[i-1,j-1]])
dtw_matrix[i,j] = cost + last_min
return dtw_matrix
我通过以下方式尝试了tensorflow实现:
def dtw(s,t):
n,m = s.shape[0],t.shape[0]
dtw_matrix = tf.Variable(tf.zeros([n+1,m+1],tf.float32))
for i in range(n+1):
for j in range(m+1):
dtw_matrix =dtw_matrix[i,j].assign(inf)
dtw_matrix =dtw_matrix[0,0].assign(0)
for i in range(1,m+1):
s_ele = tf.gather(s,i-1)
t_ele = tf.gather(t,j-1)
cost1 = tf.math.subtract(s_ele,t_ele)
cost = tf.keras.backend.abs(cost1)
# take last min from a square Box
last_min =tf.math.reduce_min([dtw_matrix[i-1,j-1]])
final_val=tf.math.add(cost,last_min)
dtw_matrix=dtw_matrix[i,j].assign(final_val)
return dtw_matrix
我怀疑这可能是由于我不知道的我的张量流编码错误所致。另外,有没有办法摆脱这些嵌套循环?这正在减慢计算速度。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)