日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TensorFlow学习笔记(1):variable与get_variable, name_scope()和variable_scope()

發布時間:2023/12/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TensorFlow学习笔记(1):variable与get_variable, name_scope()和variable_scope() 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Variable

tensorflow中有兩個關于variable的op,tf.Variable()與tf.get_variable()下面介紹這兩個的區別
使用tf.Variable時,如果檢測到命名沖突,系統會自己處理。使用tf.get_variable()時,系統不會處理沖突,而會報錯

import tensorflow as tf w_1 = tf.Variable(3,name="w_1") w_2 = tf.Variable(1,name="w_1") print w_1.name print w_2.name #輸出 #w_1:0 #w_1_1:0
import tensorflow as tfw_1 = tf.get_variable(name="w_1",initializer=1) w_2 = tf.get_variable(name="w_1",initializer=2) #錯誤信息 #ValueError: Variable w_1 already exists, disallowed. Did #you mean to set reuse=True in VarScope?

基于這兩個函數的特性,當我們需要共享變量的時候,需要使用tf.get_variable()。在其他情況下,這兩個的用法是一樣的

  • tf.get_variable() 以及 tf.Variable() 是 TensorFlow 中創建變量的兩種主要方式;
  • 如果在 tf.name_scope() 環境下分別使用 tf.get_variable() 和 tf.Variable(),兩者的主要區別在于
    • tf.get_variable() 創建的變量名不受 name_scope 的影響;
    • tf.get_variable() 創建的變量,name 屬性值不可以相同;tf.Variable() 創建變量時,name 屬性值允許重復(底層實現時,會自動引入別名機制

import tensorflow as tfwith tf.variable_scope("scope1"):w1 = tf.get_variable("w1", shape=[])w2 = tf.Variable(0.0, name="w2") with tf.variable_scope("scope1", reuse=True):w1_p = tf.get_variable("w1", shape=[])w2_p = tf.Variable(1.0, name="w2")assert w1 == w1_p assert w2 != w2_p get_variable() 函數的行為依賴于 reuse 的狀態:

  • case1:reuse 設置為 False,創建并返回新變量:

    with tf.variable_scope('foo'):v = tf.get_variable('v', [1]) assert v.name == 'foo/v:0
  • case2:reuse 設置為 True,將會按照給定的名字在以存的變量中搜尋:

    with tf.variable_scope('foo'):v = tf.get_variable('v', [1]) with tf.variable_scope('foo', reuse=True):v1 = tf.get_variable('v') assert v1 == v
看到這,就可以明白官網上說的參數復用的真面目了。由于 tf.Variable() 每次都在創建新對象,所有 reuse=True 和它并沒有什么關系。對于 get_variable(),來說,如果已經創建的變量對象,就把那個對象返回,如果沒有創建變量對象的話,就創建一個新的。


variable_scope()

一個雙層嵌套名稱空間:

with tf.variable_scope('foo'):with tf.variable_scope('bar'):v = tf.get_variable('v', [1]) assert v.name == 'foo/bar/v:0'

with tf.name_scope('foo'):with tf.variable_scope('bar'):v = tf.get_variable('v', [1]) assert v.name == 'bar/v:0'

總結

以上是生活随笔為你收集整理的TensorFlow学习笔记(1):variable与get_variable, name_scope()和variable_scope()的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。