爲什麼tf.constant能夠被賦值

今天在學習TensorFlow Basic Api的時候,碰到了一個有趣的現象。

題目是計算以2爲基數的等比數列的和, example code是這樣的:

@tf.function
def converge_to_2(iters_n):
    total = tf.constant(0.)
    increment = tf.constant(1.)
    for _ in range(iters_n):
        total += increment
        increment /= 2.0
    return total

result = converge_to_2(20)
print(result)

我起初以爲這代碼是錯誤的,爲什麼total已經被聲明成了tf.constant,但卻依然可以被賦值?那consant的意義何在呢。可是運行了一下,卻輸出了正確的結果。

經過我的反覆思考,我得到了自己的答案。

首先,Python的變量類型是動態的,也許這個變量此時還是一個數組,下一個語句執行完了之後它就變成了字典。那既然是這樣,Python就不應該存在真正的const類型。

但Python是可以存在const的,對麼,因爲Python中的一切都是對象,而對象的魔術方法中有專門處理賦值的,我們可以在這裏做手腳,實現對想聲明爲const對象的無法賦值操作。

But, Why Constant in Tensorflow do it?

其實我們只要想象一下,爲什麼Tf要定義constant這個變量,絕不是讓你在平時的科學計算裏使用的,當我們在Train一個Neural Network的時候,要保持一些量不隨梯度所改變,而需要隨梯度所改變的,我們使用tf.Variable。所以tf.constant沒必要對科學計算進行處理,只需要對tf內部的某些運算做處理即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章