免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
python – 張量流中兩點(diǎn)云之間的倒角距離

我試圖在張量流中實(shí)現(xiàn)倒角距離.

但是,我的代碼將輸入視為numpy數(shù)組.要將numpy轉(zhuǎn)換為張量,我們需要運(yùn)行一個(gè)會(huì)話,但該過(guò)程已經(jīng)在另一個(gè)會(huì)話中.我認(rèn)為兩個(gè)會(huì)話不能并行運(yùn)行.

那么,任何人都可以幫我在tensorflow中實(shí)現(xiàn)倒角距離或幫助我解決這兩個(gè)同步會(huì)話的問(wèn)題嗎?

我的代碼是:

def chamfer_distance(array1,array2):    # final = 0    # final = tf.cast(final,tf.float32)    batch_size = array1.get_shape()[0].value    num_point = array1.get_shape()[1].value    sess = tf.Session()    arr1,arr2 = sess.run([array1,array2])    del sess    dist = 0    for i in range(batch_size):        tree1 = KDTree(arr1[i], leafsize=num_point 1)        tree2 = KDTree(arr2[i], leafsize=num_point 1)        distances1, _ = tree1.query(arr2[i])        distances2, _ = tree2.query(arr1[i])        distances1 = tf.convert_to_tensor(distances1)        distances2 = tf.convert_to_tensor(distances2)        av_dist1 = tf.reduce_mean(distances1)        av_dist2 = tf.reduce_mean(distances2)        dist = dist   (av_dist1 av_dist2)/batch_size    return dist

解決方法:

我已經(jīng)實(shí)現(xiàn)了TF版倒角距離:

def distance_matrix(array1, array2):    """    arguments:         array1: the array, size: (num_point, num_feature)        array2: the samples, size: (num_point, num_feature)    returns:        distances: each entry is the distance from a sample to array1            , it's size: (num_point, num_point)    """    num_point, num_features = array1.shape    expanded_array1 = tf.tile(array1, (num_point, 1))    expanded_array2 = tf.reshape(            tf.tile(tf.expand_dims(array2, 1),                     (1, num_point, 1)),            (-1, num_features))    distances = tf.norm(expanded_array1-expanded_array2, axis=1)    distances = tf.reshape(distances, (num_point, num_point))    return distancesdef av_dist(array1, array2):    """    arguments:        array1, array2: both size: (num_points, num_feature)    returns:        distances: size: (1,)    """    distances = distance_matrix(array1, array2)    distances = tf.reduce_min(distances, axis=1)    distances = tf.reduce_mean(distances)    return distancesdef av_dist_sum(arrays):    """    arguments:        arrays: array1, array2    returns:        sum of av_dist(array1, array2) and av_dist(array2, array1)    """    array1, array2 = arrays    av_dist1 = av_dist(array1, array2)    av_dist2 = av_dist(array2, array1)    return av_dist1 av_dist2def chamfer_distance_tf(array1, array2):    batch_size, num_point, num_features = array1.shape    dist = tf.reduce_mean(               tf.map_fn(av_dist_sum, elems=(array1, array2), dtype=tf.float64)           )    return dist

為了驗(yàn)證目的,我還實(shí)現(xiàn)了一個(gè)sklearn版本:

def chamfer_distance_sklearn(array1,array2):    batch_size, num_point = array1.shape[:2]    dist = 0    for i in range(batch_size):        tree1 = KDTree(array1[i], leaf_size=num_point 1)        tree2 = KDTree(array2[i], leaf_size=num_point 1)        distances1, _ = tree1.query(array2[i])        distances2, _ = tree2.query(array1[i])        av_dist1 = np.mean(distances1)        av_dist2 = np.mean(distances2)        dist = dist   (av_dist1 av_dist2)/batch_size    return dist

也是一個(gè)numpy版本:

def array2samples_distance(array1, array2):    """    arguments:         array1: the array, size: (num_point, num_feature)        array2: the samples, size: (num_point, num_feature)    returns:        distances: each entry is the distance from a sample to array1     """    num_point, num_features = array1.shape    expanded_array1 = np.tile(array1, (num_point, 1))    expanded_array2 = np.reshape(            np.tile(np.expand_dims(array2, 1),                     (1, num_point, 1)),            (-1, num_features))    distances = LA.norm(expanded_array1-expanded_array2, axis=1)    distances = np.reshape(distances, (num_point, num_point))    distances = np.min(distances, axis=1)    distances = np.mean(distances)    return distancesdef chamfer_distance_numpy(array1, array2):    batch_size, num_point, num_features = array1.shape    dist = 0    for i in range(batch_size):        av_dist1 = array2samples_distance(array1[i], array2[i])        av_dist2 = array2samples_distance(array2[i], array1[i])        dist = dist   (av_dist1 av_dist2)/batch_size    return dist

您可以使用以下腳本驗(yàn)證結(jié)果:

batch_size = 8num_point = 20num_features = 4np.random.seed(1)array1 = np.random.randint(0, high=4, size=(batch_size, num_point, num_features))array2 = np.random.randint(0, high=4, size=(batch_size, num_point, num_features))print('sklearn: ', chamfer_distance_sklearn(array1, array2))print('numpy: ', chamfer_distance_numpy(array1, array2))array1_tf = tf.constant(array1, dtype=tf.float64)array2_tf = tf.constant(array2, dtype=tf.float64)dist_tf = chamfer_distance_tf(array1_tf, array2_tf)with tf.Session() as sess:    print('tf: ', sess.run(dist_tf))
來(lái)源:https://www.icode9.com/content-1-315451.html
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
讓 Python 速度提高 100 倍,只需不到 100 行 Rust 代碼!
利用k-means聚類算法識(shí)別圖片主色調(diào)
手把手教你寫一個(gè)生成對(duì)抗網(wǎng)絡(luò)
TensorFlow全新的數(shù)據(jù)讀取方式:Dataset API入門教程
Tensorflow體驗(yàn): 搭建 3D CNN
Implementing a CNN for Human Activity Recognition in Tensorflow
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服