【深度學習】Tensorflow的基本操作

TensorFlow程序通常被組織成一個構建階段和一個執行階段. 在構建階段, op的執行步驟被描述成一個圖. 在執行階段, 使用會話執行執行圖中的op。我們來構建一個簡單的計算圖。每個節點采用零個或多個張量作為輸入,并產生張量作為輸出。一種類型的節點是一個常數。像所有TensorFlow常數一樣,它不需要任何輸入,它輸出一個內部存儲的值。我們可以創建兩個浮點型常量node1 ,node2如下所示:

node1 = tf.constant(3.0, tf.float32)
node2 = tf.constant(4.0)
print(node1, node2)

最終的打印聲明生成

Tensor("Const:0", shape=(), dtype=float32) Tensor("Const_1:0", shape=(), dtype=float32)

他為什么不是輸出結果,那是因為tensorflow中的圖形節點操作必須在會話中運行,稍后介紹

構建圖

構建圖的第一步, 是創建源 op (source op). 源 op 不需要任何輸入, 例如 常量 (Constant). 源 op 的輸出被傳遞給其它 op 做運算.TensorFlow Python 庫有一個默認圖 (default graph), op 構造器可以為其增加節點. 這個默認圖對 許多程序來說已經足夠用了.,后面我們會接觸多個圖的使用

默認Graph值始終注冊,并可通過調用訪問 tf.get_default_graph()

import tensorflow as tf# 創建一個常量 op, 產生一個 1x2 矩陣. 這個 op 被作為一個節點,加到默認圖中.構造器的返回值代表該常量 op 的返回值.
matrix1 = tf.constant([[3., 3.]])# 創建另外一個常量 op, 產生一個 2x1 矩陣.
matrix2 = tf.constant([[2.],[2.]])# 創建一個矩陣乘法 matmul op , 把 'matrix1' 和 'matrix2' 作為輸入.返回值 'product' 代表矩陣乘法的結果.
product = tf.matmul(matrix1, matrix2)print tf.get_default_graph(),matrix1.graph,matrix2.graph

重要注意事項:此類對于圖形構造不是線程安全的。所有操作都應從單個線程創建,或者必須提供外部同步。除非另有說明,所有方法都不是線程安全的

在會話中啟動圖

構造階段完成后,才能啟動圖。啟動圖的第一步是創建一個Session對象,如果無任何創建參數,會話構造器將啟動默認圖。

調用Session的run()方法來執行矩陣乘法op, 傳入product作為該方法的參數,會話負責傳遞op所需的全部輸入,op通常是并發執行的。

# 啟動默認圖.
sess = tf.Session()# 函數調用 'run(product)' 觸發了圖中三個 op (兩個常量 op 和一個矩陣乘法 op) 的執行.返回值 'result' 是一個 numpy `ndarray` 對象.
result = sess.run(product)
print result# 任務完成, 關閉會話.
sess.close()

Session對象在使用完后需要關閉以釋放資源,當然也可以使用上下文管理器來完成自動關閉動作。

op

計算圖中的每個節點可以有任意多個輸入和任意多個輸出,每個節點描述了一種運算操作(operation, op),節點可以算作運算操作的實例化(instance)。一種運算操作代表了一種類型的抽象運算,比如矩陣乘法、加法。tensorflow內建了很多種運算操作,如下表所示:

類型示例
標量運算Add、Sub、Mul、Div、Exp、Log、Greater、Less、Equal
向量運算Concat、Slice、Splot、Constant、Rank、Shape、Shuffle
矩陣運算Matmul、MatrixInverse、MatrixDeterminant
帶狀態的運算Variable、Assign、AssignAdd
神經網絡組件SoftMax、Sigmoid、ReLU、Convolution2D、MaxPooling
存儲、恢復Save、Restore
隊列及同步運算Enqueue、Dequeue、MutexAcquire、MutexRelease
控制流Merge、Switch、Enter、Leave、NextIteration

feed

TensorFlow還提供了feed機制, 該機制可以臨時替代圖中的任意操作中的tensor可以對圖中任何操作提交補丁,直接插入一個 tensor。feed 使用一個 tensor 值臨時替換一個操作的輸入參數,從而替換原來的輸出結果.

feed 只在調用它的方法內有效, 方法結束,feed就會消失。最常見的用例是將某些特殊的操作指定為"feed"操作, 標記的方法是使用 tf.placeholder() 為這些操作創建占位符.并且在Session.run方法中增加一個feed_dict參數

# 創建兩個個浮點數占位符op
input1 = tf.placeholder(tf.types.float32)
input2 = tf.placeholder(tf.types.float32)#增加一個乘法op
output = tf.mul(input1, input2)with tf.Session() as sess:# 替換input1和input2的值print sess.run([output], feed_dict={input1:[7.], input2:[2.]})

如果沒有正確提供feed, placeholder() 操作將會產生錯誤

張量的階和數據類型

TensorFlow用張量這種數據結構來表示所有的數據.你可以把一個張量想象成一個n維的數組或列表.一個張量有一個靜態類型和動態類型的維數.張量可以在圖中的節點之間流通.其實張量更代表的就是一種多位數組。

變量的的創建、初始化、保存和加載

Variable類

tf.Variable.init(initial_value, trainable=True, collections=None, validate_shape=True, name=None)

創建一個帶值的新變量initial_value

  • initial_value:A Tensor或Python對象可轉換為a Tensor.變量的初始值.必須具有指定的形狀,除非 validate_shape設置為False.

  • trainable:如果True,默認值也將該變量添加到圖形集合GraphKeys.TRAINABLE_VARIABLES,該集合用作Optimizer類要使用的變量的默認列表

  • collections:圖表集合鍵列表,新變量添加到這些集合中.默認為[GraphKeys.VARIABLES]

  • validate_shape:如果False允許使用未知形狀的值初始化變量,如果True,默認形狀initial_value必須提供.

  • name:變量的可選名稱,默認'Variable'并自動獲取

變量的創建

創建當一個變量時,將你一個張量作為初始值傳入構造函數Variable().TensorFlow提供了一系列操作符來初始化張量,值初始的英文常量或是隨機值。像任何一樣Tensor,創建的變量Variable()可以用作圖中其他操作的輸入。此外,為Tensor該類重載的所有運算符都被轉載到變量中,因此您也可以通過對變量進行算術來將節點添加到圖形中。

x = tf.Variable(5.0,name="x")
weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),name="weights")
biases = tf.Variable(tf.zeros([200]), name="biases")

調用tf.Variable()向圖中添加了幾個操作:

  • 一個variable op保存變量值。
  • 初始化器op將變量設置為其初始值。這實際上是一個tf.assign操作。
  • 初始值的ops,例如 示例中biases變量的zeros op 也被添加到圖中。

變量的初始化

  • 變量的初始化必須在模型的其它操作運行之前先明確地完成。最簡單的方法就是添加一個給所有變量初始化的操作,并在使用模型之前首先運行那個操作。最常見的初始化模式是使用便利函數 initialize_all_variables()將Op添加到初始化所有變量的圖形中。
init_op = tf.global_variables_initializer()with tf.Session() as sess:sess.run(init_op)
  • 還可以通過運行其初始化函數op來初始化變量,從保存文件還原變量,或者簡單地運行assign向變量分配值的Op。實際上,變量初始化器op只是一個assignOp,它將變量的初始值賦給變量本身。assign是一個方法,后面方法的時候會提到
with tf.Session() as sess:sess.run(w.initializer)

通過另一個變量賦值

你有時候會需要用另一個變量的初始化值給當前變量初始化,由于tf.global_variables_initializer()初始化所有變量,所以需要注意這個方法的使用。

就是將已初始化的變量的值賦值給另一個新變量!

weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),name="weights")w2 = tf.Variable(weights.initialized_value(), name="w2")w_twice = tf.Variable(weights.initialized_value() * 0.2, name="w_twice")

所有變量都會自動收集到創建它們的圖形中。默認情況下,構造函數將新變量添加到圖形集合GraphKeys.GLOBAL_VARIABLES。方便函數 global_variables()返回該集合的內容。

屬性

name

返回變量的名字

weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),name="weights")
print(weights.name)

op

返回op操作

weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35))
print(weights.op)

方法

assign

為變量分配一個新值。

x = tf.Variable(5.0,name="x")
w.assign(w + 1.0)

eval

在會話中,計算并返回此變量的值。這不是一個圖形構造方法,它不會向圖形添加操作。方便打印結果

v = tf.Variable([1, 2])
init = tf.global_variables_initializer()with tf.Session() as sess:sess.run(init)# 指定會話print(v.eval(sess))# 使用默認會話print(v.eval())

變量的靜態形狀與動態形狀

TensorFlow中,張量具有靜態(推測)形狀和動態(真實)形狀

  • 靜態形狀:

創建一個張量或者由操作推導出一個張量時,初始狀態的形狀

  • tf.Tensor.get_shape:獲取靜態形狀
  • tf.Tensor.set_shape():更新Tensor對象的靜態形狀,通常用于在不能直接推斷的情況下
  • 動態形狀:

一種描述原始張量在執行過程中的一種形狀

  • tf.shape(tf.Tensor):如果在運行的時候想知道None到底是多少,只能通過tf.shape(tensor)[0]這種方式來獲得
  • tf.reshape:創建一個具有不同動態形狀的新張量

要點

1、轉換靜態形狀的時候,1-D到1-D,2-D到2-D,不能跨階數改變形狀

2、 對于已經固定或者設置靜態形狀的張量/變量,不能再次設置靜態形狀

3、tf.reshape()動態創建新張量時,元素個數不能不匹配

4、運行時候,動態獲取張量的形狀值,只能通過tf.shape(tensor)[]

管理圖中收集的變量

tf.global_variables()

返回圖中收集的所有變量
?

weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35))print(tf.global_variables())

?

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

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

相關文章

unity塔防游戲怪物轉向_Unity官方新手游戲項目推薦合集

Unity官方新手游戲項目推薦合集今天給同學們介紹一些Unity官方發布過的一些游戲項目,這些項目都簡化了游戲開發的入門學習過程,可以快速地制作出游戲,適合新手入門體驗,下面就帶同學們看一看:Unity Playground圖片來源…

【BZOJ 4169】 4169: Lmc的游戲 (樹形DP)

4169: Lmc的游戲 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 44 Solved: 25Description RHL有一天看到lmc在玩一個游戲。"愚蠢的人類喲,what are you doing",RHL說。"我在玩一個游戲。現在這里有一個有n個結點的有根樹&#xff0…

python中的string模塊

String模塊 ascii_letters 獲取所有ascii碼中字母字符的字符串(包含大寫和小寫)ascii_uppercase 獲取所有ascii碼中的大寫英文字母ascii_lowercase 獲取所有ascii碼中的小寫英文字母digits 獲取所有的10進制數字字符octdigits 獲取所有的8進制數字字…

《電路分析導論(原書第12版)》一1.2.2 真空電子時代

本節書摘來華章計算機《電路分析導論(原書第12版)》一書中的第1章 ,第1.2.2節,(美) Robert L.Boylestad 著 陳希有 張新燕 李冠林 等譯更多章節內容可以訪問云棲社區“華章計算機”公眾號查看。 1.2.2 …

【深度學習】Tensorflow完成線性回歸對比機器學習LinearRegression()

首先構建一個線性的點狀圖 import warnings warnings.filterwarnings(ignore) import numpy as np import matplotlib.pyplot as plt %matplotlib inline from sklearn.linear_model import LinearRegression import tensorflow as tf X np.linspace(2,12,50).reshape(-1,1)w…

ajax同步和異步的區別_同步電機和異步電機區別

電工之家:www.dgzj.com QQ群:2179090關注電工之家官方微信公眾號“電工之家”,收獲更多經驗知識。同步電機和異步電機之間從區別就在于轉子內的勵磁電流,同步電機的轉子勵磁電流來自外界直流電源,轉速恒定只與電機定…

vue實例

1.構造器 1.1.每個 Vue.js 應用都是通過構造函數 Vue 創建一個 Vue 的根實例 啟動的: 1.2.在實例化 Vue 時,需要傳入一個選項對象,它可以包含數據、模板、掛載元素、方法、生命周期鉤子等選項。 1.3.可以擴展 Vue 構造器,從而用預…

MPEG4 H.264學習筆記之三 ------ 熵編碼

3.5 熵編碼熵編碼把一系列用來表示視頻序列的元素符號轉變為一個用來傳輸或是存儲的壓縮碼流.輸入的符號可能包括量化的變換系數(像上面所說的運行級或零樹),運動向量(對于每個運動補償塊的向量值x和y),標記(在序列中用來表示重同步位的點),頭(宏塊頭,圖象頭,序列的頭等)以及附…

python中的數學模塊

數學模塊 引入模塊:import math 注意: 使用某個模塊下的函數,必須先引入這個模塊,否則無法正常使用。 ceil() 向上取整操作 格式:math.ceil(數值) 返回值:整型floor() 向下取整操作 格式:math.floor(數值…

公共交通WiFi末路?公交WiFi重挫 地鐵WiFi承受盈利壓力

之前,公交WiFi運營方16WiFi因收支嚴重失衡宣布暫時關閉在11個城市的公交WiFi運營,這引發了業內對公共WiFi企業生存狀態的關注。 在公共WiFi領域,除了公交WiFi,另一重要市場就是地鐵WiFi。作為目前國內規模最大的地鐵WiFi運營方&am…

解決:TypeError: Value passed to parameter 'a' has DataType int64 not in list of allowed values: float1

報錯: TypeError: Value passed to parameter a has DataType int64 not in list of allowed values: float16, float32, float64, int32, complex64, complex128原因 1.4.0版本 默認int64 代碼內容: 改正 定義符合 格式

買電腦主要看什么配置_我的專業要買什么配置電腦可以用到畢業?

電腦是現代生活中不可缺少的工具智能手機的更新讓許多輕量工作可以在手機上完成但復雜的文檔辦公、大型的音視頻編輯專業的數據處理等等還是離不開電腦的操作高考結束后許多同學做的第一件事是買新手機、新電腦有的為了考后放松玩游戲有的出于興趣學習新技能也有的同學還在考慮…

CSS3實現一束光劃過圖片、和文字特效

在打折圖標里面 實現一道白光劃過的動畫效果 css: <!DOCTYPE html><html><head><meta charset"utf-8"> <style> p{ width:15%; margin:0 auto; line-height:50px; font-size:30px; text-align:center; transform-origin: 50px 50px;…

H.264編解碼流程

編碼&#xff1a; 藍色的前向編碼流程&#xff1a;以宏塊為輸入單位介紹優于以幀為單位介紹。Fn為即將進行編碼的宏塊&#xff0c;由原始圖像中16*16像素構成。每個宏塊要么采用幀內模式編碼&#xff0c;要么采用幀間模式編碼。不管是哪種編碼模式&#xff0c;預測宏塊P都是基…

遠程管理服務器的具體操作方法

遠程是管理服務器最常見的一種方式&#xff0c;租用服務器也好&#xff0c;把服務器托管給服務商也好&#xff0c;肯定不會經常去機房辦公&#xff0c;有什么問題的話大家都是選擇遠程服務器。其實遠程服務器就跟我們遠程電腦是一樣的&#xff0c;具體需要怎么操作可能有的人還…

python中的OS模塊

OS模塊 OS 操作系統的簡稱 os模塊就是對操作系統進行操作&#xff0c;使用該模塊必須先導入模塊&#xff1a; import osos模塊中的函數 getcwd() 功能&#xff1a;獲取當前的工作目錄 格式&#xff1a;os.getcwd() 返回值&#xff1a;路徑字符串chdir() 功能&#xff1a;修改…

JavaWeb基礎—dbutils的簡單入門

簡明入門教程&#xff0c;參考&#xff1a;https://www.cnblogs.com/CQY1183344265/p/5854418.html 進行此章節之前&#xff0c;介紹一個JdbcUtils的再次的簡單封裝 &#xff08;例如后面需要構造QueryRunner時得到數據源等的簡便的操作&#xff09; package cn.itcast.jdbcuti…

macos安裝vscode_VS Code 代碼編輯器入門指南:核心組件與概念

作者&#xff1a;思考問題的熊寫在前面如果當電腦只能裝一個軟件還需要盡量不影響日常學習工作時&#xff0c;不知道你的選擇會是什么。我把這個看似「荒誕」的問題理解為「All-in-One」的升級版拷問。這個問題陪伴了我很久&#xff0c;每用一個軟件我都會想想它對我究竟有多不…

環路濾波一些概念

熵編碼需要編碼的數據如下&#xff1a; 熵編碼需要編碼的數據如下&#xff1a;

【深度學習】TensorFlow之卷積神經網絡

卷積神經網絡的概念 在多層感知器&#xff08;Multilayer Perceptrons&#xff0c;簡稱MLP&#xff09;中&#xff0c;每一層的神經元都連接到下一層的所有神經元。一般稱這種類型的層為完全連接。 多層感知器示例 反向傳播 幾個人站成一排第一個人看一幅畫&#xff08;輸入數…