assign函數的算法?
assign()函數
tf中assign()函數可用于對變量進行更新包括變量的value和shape。
涉及以下函數:
tf.assign(ref, value, validate_shape = None, use_locking = None, name=None)
tf.assign_add(ref, value, use_locking = None, name=None)
tf.assign_sub(ref, value, use_locking = None, name=None)
tf.variable.assign(value, use_locking=False)
tf.variable.assign_add(delta, use_locking=False)
tf.variable.assign_sub(delta, use_locking=False)
這6個函數本質上是一樣的,都是用來對變量值進行更新,其中tf.assign還可以更新變量的shape。
解釋一下它們的意思:tf.assign是用value的值賦給ref,這種賦值會覆蓋掉原來的值,即更新而不會創建一個新的tensor。tf.assign_add相當于ref=ref+value來更新ref。tf.assign_sub相當于ref=ref-value來更新ref。tf.variable.assign相當于tf.assign(ref, value)。同理tf.variable.assign_add和tf.variable.assign_sub。
下面對tf.assign函數進行詳細說明。
tf.assign(ref, value, validate_shape = None, use_locking = None, name=None)
args:
ref:一個可變的張量。應該來自變量節點,節點可能未初始化,參考下面的例子。
value:張量。必須具有與 ref 相同的類型。是要分配給變量的值。
validate_shape:一個可選的 bool。默認為 True。如果為 true, 則操作將驗證 "value" 的形狀是否與分配給的張量的形狀相匹配;如果為 false, "ref" 將對 "值" 的形狀進行引用。
use_locking:一個可選的 bool。默認為 True。如果為 True, 則分配將受鎖保護;否則, 該行為是未定義的, 但可能會顯示較少的爭用。
name:操作的名稱(可選)。
返回:
一個在賦值完成后將保留 "ref" 新值的張量。