tf.gatherとtf.expand_dimsはどういう意味でしょうか?
公式サイトを見ましたがよくわかりませんでした。

top_k_xvals, top_k_indices = tf.nn.top_k(tf.negative(distance), k=k)

x_sums = tf.expand_dims(tf.reduce_sum(top_k_xvals, 1),1)
x_sums_repeated = tf.matmul(x_sums, tf.ones([1, k], tf.float32))
x_val_weights = tf.expand_dims(tf.div(top_k_xvals,x_sums_repeated), 1)

top_k_yvals = tf.gather(y_target_train, top_k_indices)
prediction = tf.squeeze(tf.matmul(x_val_weights, top_k_yvals), axis=[1])

参照:TensorFlow機械学習クックブック