Я пытаюсь сгенерировать пространство MDS здесь с использованием тензорного потока путем оптимизации следующей функции стоимости: стоимость = ![enter image description here](https://i.stack.imgur.com/hG8UD.png)
стоимость пытается создать вложения(векторы) такие, что евклидово расстояние между векторами Vi и Vj (dij) близко к || Xi-Xj ||из матрицы различий (константа)
мой код:
def pairwise_dist (A, B):
"""
Computes pairwise distances between each element of A and each element of B.
Args:
A, [m,d] matrix
B, [n,d] matrix
Returns:
D, [m,n] matrix of pairwise distances
"""
with tf.variable_scope('pairwise_dist'):
# squared norms of each row in A and B
na = tf.reduce_sum(tf.square(A), 1)
nb = tf.reduce_sum(tf.square(B), 1)
# na as a row and nb as a co"lumn vectors
na = tf.reshape(na, [-1, 1])
nb = tf.reshape(nb, [1, -1])
# return pairwise euclidead difference matrix
D = tf.sqrt((tf.maximum(na - 2*tf.matmul(A, B, False, True) + nb, 0.0))+0.0001)#+eps
return D
training_epochs = 150
count=0
tf.reset_default_graph()
embedding=tf.get_variable("embedding",initializer = np.array(dim_5_all[0],dtype=np.float32))
dissMatrix=tf.constant(np.array(dissmatrix))#
midstep= pairwise_dist(embedding,embedding)#calculate the eucl_dis
thirdStep=tf.reduce_sum(tf.square(midstep-dissMatrix))
fourthstep=tf.sqrt(thirdStep /tf.reduce_sum(tf.square(midstep)))
cost=thirdStep
optimizer = tf.train.AdagradOptimizer(0.001)
train_step = optimizer.minimize(cost )
init = tf.global_variables_initializer()
cost_history = np.empty(shape=[1],dtype=float)
with tf.Session() as sess:
sess.run(init)
for epoch in range(training_epochs):
_,mid,th,fou,vectors= sess.run([train_step,midstep,thirdStep,fourthstep,embedding])
Модель не работает, стоимость начинается с небольшого числа и не уменьшается, она остается прежней, даже если я изменяюскорость обучения.Евклидовы расстояния между порожденными векторами не близки к матрице различий.
Я не вижу проблемы по коду
Я ценю любую помощь