問題是:
我有一個張量,在這個張量上我找到了 k_top 元素,如果元素不是 k_top,我用 0 創建一個掩碼,否則為 1,然后我將原始張量與掩碼相乘,創建 tensor_masked。之后我計算張量的平均值。
現在的問題是我想回傳一個新的張量,其中只有 k_top 的元素等于平均值??(如果起始張量內的原始值為負,則為 -average,否則為 average)
我該怎么做?
這是現在的代碼:
def stc_compression(tensor, sparsification_rate):
mask = tf.cast(tf.abs(tensor) >= tf.math.top_k(tf.abs(tensor), sparsification_rate)[0][-1], tf.float32)
tensor_masked = tf.multiply(tensor, mask)
average = tf.reduce_mean(tf.abs(tensor_masked)) / sparsification_rate
return compressed_tensor
在那之后,有沒有可能的方法來優化這個程序?
uj5u.com熱心網友回復:
如果要計算 tensor_masked 絕對值的平均值,請使用
tf.reduce_mean(tf.abs(tensor_masked))
如果要計算應使用的前 k 個值的絕對值的平均值
tf.reduce_sum(tf.abs(tensor_masked)) / sparsification_rate
然后要獲得具有正確符號的掩碼值,您可以使用 tf.sign 操作并使用另一個掩碼來替換被掩碼的值
def stc_compression(tensor, sparsification_rate):
mask = tf.cast(tf.abs(tensor) >= tf.math.top_k(tf.abs(tensor), sparsification_rate)[0][-1], tf.float32)
inv_mask = tf.cast(tf.abs(tensor) < tf.math.top_k(tf.abs(tensor), sparsification_rate)[0][-1], tf.float32)
tensor_masked = tf.multiply(tensor, mask)
average = tf.reduce_sum(tf.abs(tensor_masked)) / sparsification_rate
compressed_tensor = tf.add( tf.multiply(average, mask) * tf.sign(tensor), tf.multiply(tensor, inv_mask))
return compressed_tensor
如果我誤解了你的問題,請告訴我。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/318296.html
上一篇:為自定義損失函式分配張量物件
下一篇:加載KerasClassifier后,在運行predict()時出現錯誤“KerasClassifier”物件沒有屬性“classes_”
