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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

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

Variable

tensorflow中有兩個(gè)關(guān)于variable的op,tf.Variable()與tf.get_variable()下面介紹這兩個(gè)的區(qū)別
使用tf.Variable時(shí),如果檢測(cè)到命名沖突,系統(tǒng)會(huì)自己處理。使用tf.get_variable()時(shí),系統(tǒng)不會(huì)處理沖突,而會(huì)報(bào)錯(cuò)

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) #錯(cuò)誤信息 #ValueError: Variable w_1 already exists, disallowed. Did #you mean to set reuse=True in VarScope?

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

  • tf.get_variable() 以及 tf.Variable() 是 TensorFlow 中創(chuàng)建變量的兩種主要方式;
  • 如果在 tf.name_scope() 環(huán)境下分別使用 tf.get_variable() 和 tf.Variable(),兩者的主要區(qū)別在于
    • tf.get_variable() 創(chuàng)建的變量名不受 name_scope 的影響;
    • tf.get_variable() 創(chuàng)建的變量,name 屬性值不可以相同;tf.Variable() 創(chuàng)建變量時(shí),name 屬性值允許重復(fù)(底層實(shí)現(xiàn)時(shí),會(huì)自動(dòng)引入別名機(jī)制

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() 函數(shù)的行為依賴(lài)于 reuse 的狀態(tài):

  • case1:reuse 設(shè)置為 False,創(chuàng)建并返回新變量:

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

    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
看到這,就可以明白官網(wǎng)上說(shuō)的參數(shù)復(fù)用的真面目了。由于 tf.Variable() 每次都在創(chuàng)建新對(duì)象,所有 reuse=True 和它并沒(méi)有什么關(guān)系。對(duì)于 get_variable(),來(lái)說(shuō),如果已經(jīng)創(chuàng)建的變量對(duì)象,就把那個(gè)對(duì)象返回,如果沒(méi)有創(chuàng)建變量對(duì)象的話(huà),就創(chuàng)建一個(gè)新的。


variable_scope()

一個(gè)雙層嵌套名稱(chēng)空間:

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'

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。