TensorFlow構建二維數據擬合模型(2)

變量的定義和使用

變量的定義與初始化

TensorFlow中,變量是一種特殊的張量,其值可以是一個任意類型的形狀的張量。

與其他張量不同,變量存在于單個回話調用的上下文之外,主要作用是保存和更新模型中的參數。

聲明變量通常使用tf.Variable()函數,其語法格式如表所示

函數說明

tf.Variable(

initial_value,

trainable=True,

collections=None,

validate_shape=True,

name=None)

主要作用是聲明一個變量。

initial_value:必選,指定變量的初始值。所有可轉換為張量的類型均可。

trainable:可選,設置是否可以訓練,默認為True

collections:可選,設置該圖變量的類型,默認為GraphKeys.GLOBAL_VARIABLES.

validate_shape:可選,默認為True。如果為False,則不進行類型和維度檢查。

name:變量名稱。如果未指定會自動分配一個唯一的值。

tf.Variable()的主要作用是構造一個變量并添加到計算圖模型中。在運行其他操作之前,需要對所有變量進行初始化。

最簡單的初始化方法是添加一個對所有變量進行初始化的操作,然后在使用模型前運行此操作。

最常見的方式是運行tf.global_variables_initializer()函數進行全局初始化,該函數會初始化計算圖中所有的變量。

下面的代碼演示了如何在模型中初始化變量

import tensorflow as tf
# tf.Variable()定義了一個1行3列的整型變量,該變量的初始值為1,2,3
v = tf.Variable([1,2,3],dtype=tf.int32) 
# tf.global_variables_initializer()定義了一個全局初始化操作。
init_op = tf.global_variables_initializer()
with tf.Session() as sess:#在會話中運行sess.run()初始化模型中的所有變量sess.run(init_op)print(sess.run(v))

隨機初始化變量

在聲明變量時需要指定初始化,一般使用隨機數給TensorFlow的變量初始化,常見的初始化方法如下:

函數說明

tf.random_normal(

shape,

mean=0.0,

stddev=1.0,

dtype=tf.float32,

seed=None)

產生一個符合正態分布的張量。

shape:必選,生成張量的形狀。

mean:可選,正態分布的均值,默認為0

stddev:可選,正態分布的標準差,默認為1.0

dtype:可選,生成張量的類型,默認為tf.float32.

seed:可選,隨機數種子,是一個整數。當設置之后,每次生成的隨機數都一樣

tf.trunceated_normal(

shape,

mean=0,

stddev=1.0)

產生一個滿足正態分布的張量,當如果隨機數偏離平均值超過2個標準差以上,將會被重新分配一個隨機數

shape:必選,生成張量的形狀

mean:可選,正態分布的均值,默認為0.

stddev:可選,正態分布的標準差,默認為1.0

tf.random_uniform(

shape,

minval=low,

maxval=high,

dtype=tf.float32)

產生一個滿足平均分布的張量

shape:必選,生成張量的形狀

mean:必選,產生值的最小值

stddev:必選,產生值的最大值

dtype:可選,產生值的類型,默認為float32

下面代碼分別用不用的方式產生變量

import tensorflow as tf #導入TensorFlow類庫,別名為tf
#產生一個符合正態分布的2行3列張量,均值為0,方差為1,隨機種子為1
w1 = tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
#產生一個截斷的2行3列張量,均值為0,方差為1
w2 = tf.truncated_normal(shape=[2,3],mean=0,stddev=1)
#產生一個符合均勻分布的2行2列張量,最小值為1.0,最大值為2.0
w3 = tf.random_uniform((2,2),minval=1.0,maxval=2.0,dtype=tf.float32)
init_op = tf.global_variables_initializer()
#在會話中初始化計算圖中的所有變量
with tf.Session() as sess:sess.run(init_op)print("w1:",sess.run(w1))print("w2:",sess.run(w2))print("w3:",sess.run(w3))

獲取變量

除了可使用tf.Variable()創建變量,還可以使用tf.get_variable()函數創建或獲取變量。

tf.get_variable()函數用于創建變量時,它和tf.Variable()的功能是等價的。

以下代碼給出了通過兩個函數創建變量的實例:

m = tf.Variable(tf.constant(1.0,shape=[1],name="m"))
n = tf.get_variable(shape=[1],name="n",initializer=tf.constant_initializer[1])

可以看出,tf.Variable()和tf.get_variable()創建變量的過程是一樣的,兩者最大的區別在于指定變量名稱的參數不同。

tf.Variable()函數中,變量名稱是可選參數;

tf.get_variable()函數中,變量名是必選參數,當變量名存在時,將直接獲取變量。

tf.get_variable()函數的語法格式如表

函數說明

tf.get_variable(

name,

shape,

initializer

)

用來初始化或獲取變量

name:變量的名稱,必填

shape:變量的形狀,必填

initializer:變量初始化的方法,選填

tf.get_variable()函數擁有一個變量檢查機制,會檢測已經存在的變量是否設置為共享變量。

如果未設置為共享變量,Tensorflow運行到第二個擁有相同名字變量的時候,就會拋出異常錯誤。

共享變量

tf.variable_scope()函數用來指定變量的作用域。

不同作用域中的變量可以有相同的命名,包括使用tf.get_variable()函數得到的變量以及tf.Variable()函數創建的變量。

tf.get_variable()常常會配合tf.variable_scope()一起使用,以實現變量共享。tf.variable_scope()函數會生成上下文管理器,并指定變量的作用域。

tf.variable_scope()里還有一個reuse = True 屬性,表示使用已經定義過的變量,這時tf.get_variable()不會創建新的變量,而是直接獲取已經創建好的變量。如果變量不存在,則會報錯。

下面代碼使用了變量共享的功能:

import tensorflow as tf
with tf.variable_scope("V1"):a1 = tf.get_variable(name = 'a1',shape = [1],initializer = tf.constant_initializer(1))
with tf.variable_scope("V2"):a2 = tf.get_variable(name = 'a1',shape = [1],initializer = tf.constant_initializer(1))
with tf.variable_scope("V2",reuse = True):a3 = tf.get_variable('a1')
with tf.Session() as sess:sess.run(tf.global_variables_initializer())print(a1.name)print(a2.name)print(a3.name)

2-3行代碼:在V1變量空間中定義變量a1

4-5行代碼:在V2變量空間中定義變量a1。由于兩個a1位于不同的變量空間,所以不會產生沖突

6-7行代碼:重用V2命名空間的a1變量。調用tf.get_variable()時,會獲取V2命名空間的a1變量的值

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534299.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534299.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534299.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c++用牛頓法開多次根_望遠鏡的歷史之三:大神出世,改變望遠鏡歷史的竟然是牛頓...

上次我們說到格里高利望遠鏡有點畫蛇添足,那么格里高利望遠鏡添了什么呢?格里高利望遠鏡格里高利望遠鏡觀測的圖像都是正立的,這就意味著要采用多個凹面反射鏡,而當時凹面反射鏡磨制不易,無論是多大的科學家都要親自動…

python浮點型精度損失問題_解決float型數據精度損失問題

問題:浮點型數據存儲方式會導致數據精度損失,增大計算誤差。float fval 0.45;  // 單步調試發現其真實值為:0.449999988double dval 0.45; // 單步調試發現其真實值為:0.45000000000000001當很多個這樣的單精度浮點型數據進行…

Linux配置本地yum源(RHEL8)

https://www.cnblogs.com/itwangqiang/p/13391401.html

如何把照片正面變成反面_各國簽證照片要求大全 (含模板)

對于不是很熟悉簽證的小伙伴來說,面對全球那么多國家的簽證而且每張簽證照片的規格不同為此我們為您整理了各國簽證照片要求大全 東南亞國家的簽證照要求基本相同,就以泰國為例,告訴大家簽證照的注意事項。“泰國,新加坡&#xff…

TensorFlow實驗(3)

模型的保存與恢復 我們來簡單實現一下模型的保存與恢復 訓練完TensorFlow模型后,可將其保存為文件,以便于預測新數據時直接加載使用。 TensorFlow模型主要包含網絡的設計或者圖以及已經訓練好的網絡參數的值。 TensorFlow提供的tf.train.Saver()函數…

ad域 禁用賬號_IST-AD域信息同步平臺來襲

IST的AD域信息同步系統是能幫助域管理員簡化日常的一些管理工作,可以讓AD域系統與其他的業務系統進行用戶信息同步,實現自動的新舊用戶帳戶信息的同步修改、組織架構同步調整,并有簡單易操作的配置頁面系統與操作日志查詢等。通過ODBC、Web S…

Linux基礎(firewalld防火墻配置管理工具的圖形用戶界面)

firewall-config的界面如圖所示 我們先將當前區域中請求http服務的流量設置為允許,但僅限當前生效。具體配置如圖 嘗試添加一條防火墻策略規則,使其放行訪問8080-8088端口(TCP協議)的流量,并將其設置為永久生效&#x…

ios 請求失敗封裝_vue_axios請求封裝、異常攔截統一處理

1、前端網絡請求封裝、異常統一處理vue中采用axios處理網絡請求,避免請求接口重復代碼,以及各種網絡情況造成的異常情況的判斷,采用axios請求封裝和異常攔截操作;axios 請求封裝// 引入axios文件包import axios from axios// POST…

Linux基礎(使用ssh服務管理遠程主機1)

配置網絡參數 使用nmtui命令配置網絡參數,以及通過nmcli命令查看網絡信息并管理網絡會話服務。 執行nmtui命令運行網絡配置工具 進入主界面 選中編輯連接并按下回車鍵 選中要編輯的網卡名稱,然后按下Edit(編輯)按鈕 把網絡IPv4 …

聯想g510升級方案_聯想智慧中國行,聚焦第一古城,助力企業智能升級

12月29日,聯想智慧中國行“一起聯想 生態綻放”One Lenovo融合品鑒會邢臺站盛大啟幕,現場近70位河北合作伙伴到場參會,共同探討智能時代帶來的多重挑戰和迎戰機遇。“聯想智慧中國行”是聯想致力于推動中國行業智能化升級舉辦的系列活動&…

軟件工程(總體設計②設計原理)

設計原理 模塊化 模塊是由邊界元素限定的相鄰程序元素的序列,而且有一個總體標識符代表它。 按照模塊的定義,過程、函數、子程序和宏,都可作為模塊。 面向對象方法學中的對象是模塊,對象內的方法也是模塊。模塊是構成程序的基…

TensorFlow構建二維數據擬合模型(3)

占位符與數據喂入機制 placeholder是TensorFlow提供的占位符節點,由tf.placeholder()函數創建,其實質上也是一種變量。占位符沒有初始值,只會分配必要的內存,其值由會話中用戶調用的run()函數傳遞。 占位符聲明的方法如表 函數…

合作開發過程產生的專利_被起訴專利侵權怎么辦?專利律師給你出招!

隨著國內企業專利申請量的增加及專利保護意識的逐步提升,專利侵權訴訟作為常用的商業競爭手段和策略,其數量也隨之呈逐年遞增之勢。考慮到目前國內專利數量較多,且很多專利技術互有交叉,因此在進行產品研發時即使未借鑒他人產品&a…

idea怎么設置代碼提示不區分大小寫_IntelliJ IDEA 這樣設置動圖,棒極了!

轉自:IntelliJ-IDEA-Tutorial/Judas.n鏈接:http://suo.im/6sHdelIntelliJ IDEA 有很多人性化的設置我們必須單獨拿出來講解,也因為這些人性化的設置讓我們這些 IntelliJ IDEA 死忠粉更加死心塌地使用它和分享它。推薦設置IntelliJ IDEA 的代碼…

linux課堂筆記(1)

一、linux特點 1.源代碼開發: *.c *.h 可二次開發 2.安全:可檢測安全性 3.穩定:共享內存 內存沖突(Windows,內存沖突,藍屏死機) 4.網絡服務:server(WWW&#xf…

表字段順序有何影響_「品味保定」炸烹蝦段乾隆贊 百年保定柔雅香

【引文】上溯先賢堯帝,保定傳承已逾千載。燕趙之地、畿輔之疆、北控三關、南通九省、翅衛京師說的就是古城保定。千百年來,古城保定形成了獨具特色的飲食文化,精致氣派的直隸官府菜就是這種文化的結晶。品百年保定酒,嘗直隸官府菜…

linux課堂筆記(2)

linux安裝 1,虛擬機:VMware12 (1)注冊:商業軟件(集成序列號,注冊機(根據加密算法生成序列號),文本文件(記錄序列號)) &…

testufo測試刷新率測試_上手體驗微星電競顯示器PAG301CR:200Hz高刷新率只是它的小亮點...

電子競技行業高速發展,逐漸成為體育產業版圖中重要的一塊,產業鏈也在不斷完善,人們對于電子競技的認識也是越來越深刻,同時越來越多的人加入了電子競技行列中,但是電競游戲除了水平外,設備同樣也尤其重要,特…

linux課堂筆記(3)

1,linux廠商版本信息 內核信息:主版本.修正號.發行號.on 硬件平臺. 主機名 登錄 身份認證 localhost login:root password:隱藏口令 提示上一次登錄時間與地點 用戶名主機名 當前目錄 指令提示符 rootlocalhost ]# 注&…

graphpad做折線圖坐標軸數字_pandas做數據可視化具體操作,快來看看吧

來自公眾號:大鄧和他的Python常見的數據可視化庫有:matplotlib 是最常見的2維庫,可以算作可視化的必備技能庫,由于matplotlib是比較底層的庫,api很多,代碼學起來不太容易。seaborn 是建構于matplotlib基礎上&#xff0…