Мне нужно вычислить евклидово расстояние между каждым изображением i в массиве с k изображениями (1 ‹= i ‹= k) с вводом image xrj, (1 ‹= j ‹= m) (k images и входное изображение xrj являются столбцом j матрицы IR). Когда процесс завершается для всех столбцов IR, он возвращает матрицу D формы k,m, содержащую все евклидовы расстояния между каждым < strong>k image для входного изображения xrj. Исходный код, используемый для выполнения этой задачи, показан в коде 1.
Код 1
D = np.zeros(shape=[ir_set[0].shape[0]-1, len(ir_set)])
for i in range(len(ir_set)): # number of team members.
shape = ir_set[i].shape
qtd_images = shape[0] # number of 'k' similar images
dim_image = shape[1:] # dimensions of the reduced image
for j in range(qtd_images-1):
k = tf.placeholder(shape=dim_image, dtype=tf.float32)
x = tf.placeholder(shape=dim_image, dtype=tf.float32)
# L2 metric
d = tf.sqrt(tf.reduce_sum(tf.square(tf.subtract(k, x))))
distance = sess.run(d, feed_dict={k: ir_set[i][j], x: ir_set[i][qtd_images-1]})
print('Computing distance: Model {0}/{1}, Image {2}/{3}'.format(i+1, len(ir_set), j+1, qtd_images-1), end='\r')
D[j][i] = distance
print('\nAll distances computed. Matrix D shape: {0}'.format(D.shape))
return D
Проблема с Кодом 1 заключается в том, что для вычисления всех расстояний требуется слишком много времени, что позволяет моему графическому процессору все время простаивать. Почему этот код не использует мой графический процессор, поскольку все остальные процедуры Tensorflow используют его? Как изменить код 1, чтобы использовать GPU и, следовательно, работать быстрее?
Заранее спасибо.