中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python的f.name_scope和tf.variable_scope函數有什么區別

發布時間:2022-05-05 09:30:41 來源:億速云 閱讀:167 作者:zzz 欄目:開發技術

本篇內容主要講解“python的f.name_scope和tf.variable_scope函數有什么區別”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“python的f.name_scope和tf.variable_scope函數有什么區別”吧!

兩者區別

tf.name_scope()和tf.variable_scope()是兩個作用域,一般與兩個創建/調用變量的函數tf.variable() 和tf.get_variable()搭配使用。

為什么要使用兩個不同的作用域方式呢?其主要原因與變量共享相關。

變量共享主要涉及兩個函數:tf.Variable() 和tf.get_variable()

在tf.variable_scope的作用域下需要使用tf.get_variable()函數,這是因為tf.get_variable()擁有一個變量檢查機制,會檢測已經存在的變量是否設置為共享變量,當同名變量存在共享機制時,不會報錯,如果并未設置為共享變量,則報錯。

如果使用tf.Variable() 的話每次都會新建變量。但是很多時候我們希望重用一些變量,所以我們使用到了get_variable(),它會去搜索變量名,有就直接用,沒有再新建。
在進行變量共享的時候需要使用到標志reuse,當reuse = True時是可以共享,False時不可以共享。

tf.variable_scope函數

tf.variable_scope(
    name_or_scope,
    default_name=None,
    values=None,
    initializer=None,
    regularizer=None,
    caching_device=None,
    partitioner=None,
    custom_getter=None,
    reuse=None,
    dtype=None,
    use_resource=None,
    constraint=None,
    auxiliary_name_scope=True
)

其中:

1、name_or_scope:范圍的名稱。

2、default_name:如果name_or_scope參數為None,則使用默認的名稱,該名稱將是唯一的;如果提供了name_or_scope,它將不會被使用,因此它不是必需的,并且可以是None。

3、values:傳遞給操作函數的Tensor參數列表。

4、initializer:此范圍內變量的默認初始值設定項。

5、regularizer:此范圍內變量的默認正規化器。

6、caching_device:此范圍內變量的默認緩存設備。

7、partitioner:此范圍內變量的默認分區程序。

8、custom_getter:此范圍內的變量的默認自定義吸氣。

9、reuse:可以是True、None或tf.AUTO_REUSE;如果是True,即可以開始共享變量,變量重構用;如果是tf.AUTO_REUSE,則我們創建變量(如果它們不存在),否則返回它們(用于在第一輪創建變量);如果是None,則我們繼承父范圍的重用標志。

10、dtype:在此范圍中創建的變量類型。

測試代碼

1、使用reuse=True共享變量

import tensorflow as tf
# 初始化第一個v1
with tf.variable_scope("scope1"):
    v1 = tf.get_variable("v1",[3,3],tf.float32,initializer=tf.constant_initializer(1))
    print(v1.name)
# 不同的作用域
with tf.variable_scope("scope2"):
    v1 = tf.get_variable("v1",[3,3],tf.float32,initializer=tf.constant_initializer(1))
    print(v1.name)
# 開始共享
with tf.variable_scope("scope1",reuse = True):
    v1_share = tf.get_variable("v1",[3,3],tf.float32,initializer=tf.constant_initializer(1))
    print(v1_share.name)

運行結果為:

scope1/v1:0
scope2/v1:0
scope1/v1:0

如果在下部再加上

with tf.variable_scope("scope2"):
    v1_share = tf.get_variable("v1",[3,3],tf.float32,initializer=tf.constant_initializer(1))
    print(v1_share.name)

此時沒有reuse,不能共享,程序報錯。

2、使用AUTO_REUSE共享變量

import tensorflow as tf
# 使用AUTO_REUSE可以直接創建
# 如果reuse = True,初始化第一輪創建的時候會報錯
def demo():
  with tf.variable_scope("demo", reuse=tf.AUTO_REUSE):
    v = tf.get_variable("v", [1])
  return v
v1 = demo() 
v2 = demo()
print(v1.name)

運行結果為:

demo/v:0
demo/v:0

到此,相信大家對“python的f.name_scope和tf.variable_scope函數有什么區別”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

元阳县| 灵宝市| 腾冲县| 平山县| 漳浦县| 微博| 内江市| 渑池县| 都安| 黄梅县| 临洮县| 枞阳县| 华池县| 阿鲁科尔沁旗| 兴安盟| 咸丰县| 营山县| 乌兰察布市| 民乐县| 舟曲县| 乐东| 酒泉市| 玉树县| 丰顺县| 年辖:市辖区| 本溪市| 托克托县| 西青区| 泸定县| 杂多县| 涟水县| 司法| 武宣县| 柳河县| 彭山县| 铜鼓县| 固原市| 巢湖市| 景洪市| 铁岭县| 青田县|