def source_distance(x,y):
y = tf.cast(tf.argmax(y,axis=1),tf.float32)
y1,_,_ = tf.unique_with_counts(y)
TensorArr = tf.TensorArray(tf.float32,size=1, dynamic_size=True,clear_after_read=False)
x_array = TensorArr.unstack(y1)
size = x_array.size()
initial_outputs = tf.TensorArray(dtype=tf.float32,size=size)
i = tf.constant(0)
def should_continue(i, *args):
return i < size
def loop(i,output):
y_class = x_array.read(i)
idx_i = tf.where(tf.equal(y,y_class))
xi = tf.gather_nd(x,idx_i)
initial_outputs1 = tf.TensorArray(dtype=tf.float32,size=size)
j = tf.constant(0)
def should_continue1(j,*args):
return j<size
def loop1(j,output1):
y2=x_array.read(j)
idx_j = tf.where(tf.equal(y,y2))
xj = tf.gather_nd(x,idx_j)
dis = tf.reduce_mean (tf.square(tf.reduce_mean(xi,0)
-tf.reduce_mean(xj,0)))
output1 = output1.write(j,dis)
return j+1,output1
j,r1=tf.while_loop(should_continue1,loop1,[j,initial_outputs1])
output = output.write(i,r1.stack())
return i+1,output
i,r = tf.while_loop(should_continue,loop,[i,initial_outputs])
out = r.stack()
return out
评论列表
文章目录