TensorFlow安裝、開發環境設定、使用入門
來自專欄 深度學習模型
安裝Anaconda
本文主要介紹使用Anaconda安裝TensorFlow, 操作系統為Win10。
首先從Anaconda官網下載並安裝Anaconada:
https://www.anaconda.com/download/
如果訪問anaconda網站有問題的話,國內可以使用清華的鏡像下載:
https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/
選擇對應操作系統的anaconda,並安裝。anaconda官方下載更新工具包的速度很慢,所以繼續添加清華大學 提供的Anaconda倉庫鏡像,在終端或cmd中輸入如下命令進行添加:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --set show_channel_urls yesconda install numpy #測試是否添加成功
安裝TensorFlow
打開「開始目錄」,找到Anaconda/Anaconda prompt,以管理員許可權運行。在終端或cmd中輸入以下命令搜索當前可用的tensorflow版本。
anaconda search -t conda tensorflow
選擇一個較新的CPU或GPU版本,如aaronzs/tensorflow,輸入如下命令查詢安裝命令
anaconda show aaronzs/tensorflow
使用上述命令的執行結果的最後一行的提示命令進行安裝
conda install --channel https://conda.anaconda.org/aaronzs tensorflow
conda會自動檢測安裝此版本的Tensorflow所依賴的庫,如果你的Anaconda缺少這些依賴庫,會提示你安裝。因為我之前已經安裝過了,所以這裡只提示我安裝Tensorflow。輸入y並回車之後等待安裝結束即可。
進入python,輸入
import tensorflow as tfhello = tf.constant(Hello, TensorFlow!)sess = tf.Session()print(sess.run(hello))
如果可以正常執行,表示安裝沒有問題。
集成開發環境設定
我們選用pycharm作為tensorflow python的集成開發工具,可以根據需要選擇相應的版本,PyCharm Professional Edition和PyCharm Community Edition。下載地址為:
https://www.jetbrains.com/pycharm/
安裝好後,在新建項目中選擇選擇相應的python 解釋器地址(可以選擇anaconda中的python開發環境):
C:ProgramDataAnaconda3python.exe
然後在開發環境中,新建一個 example.py 文件,測試如下代碼是否可以正常運行:
import tensorflow as tfhello = tf.constant(Hello, TensorFlow!)sess = tf.Session()print(sess.run(hello))
線性回歸用例:
import tensorflow as tf# Model parametersW = tf.Variable([.3], dtype=tf.float32)b = tf.Variable([-.3], dtype=tf.float32)# Model input and outputx = tf.placeholder(tf.float32)linear_model = W*x + by = tf.placeholder(tf.float32)# lossloss = tf.reduce_sum(tf.square(linear_model - y)) # sum of the squares# optimizeroptimizer = tf.train.GradientDescentOptimizer(0.01)train = optimizer.minimize(loss)# training datax_train = [1, 2, 3, 4]y_train = [0, -1, -2, -3]# training loopinit = tf.global_variables_initializer()sess = tf.Session()sess.run(init) # reset values to wrongfor i in range(1000): sess.run(train, {x: x_train, y: y_train})# evaluate training accuracycurr_W, curr_b, curr_loss = sess.run([W, b, loss], {x: x_train, y: y_train})print("W: %s b: %s loss: %s"%(curr_W, curr_b, curr_loss))
TensorFlow程序設計簡介
當安裝完TensorFlow和設定好TensorFlow開發環境後,本章主要介紹TensorFlow程序中的基本概念。
寫TensorFlow程序首先需要調入TensorFlow相關的Python庫,如下所示:
from __future__ import absolute_importfrom __future__ import divisionfrom __future__ import print_function#python numpy庫import numpy asnp#TensorFlow庫importtensorflow as tf
TensorFlow中處理的核心數據定義為Tensor,是一個多維矩陣。矩陣的維度稱之為rank,相應地矩陣每個維度對應的元素個數稱之為shape。如下所示:
3 #rank=0,表示常量,對應的shape為[][1., 2., 3.] # rank=1,表示向量,對應的shape為 [3][[1., 2., 3.],[4., 5., 6.]] # rank=2; 表示二維矩陣,對應的shape為 [2, 3][[[1., 2., 3.]],[[7., 8., 9.]]] # rank=3;表示三維矩陣,對應的shape為 [2, 1, 3]
TensorFlow的核心程序主要由兩部分組成:構建計算圖,稱之為Graph;運行計算圖,稱之為Session。和圖計算的思想一樣,TensorFlow的計算圖同樣由節點和邊組成。TensorFlow中的節點稱之為Operation,主要用於計算操作,操作的輸入和輸出是Tensor。TensorFlow圖中的邊表示Tensor,表示在計算圖中流轉的數據。下面的示例代碼構建了一個簡單的TensorFlow計算圖:
a = tf.constant(3.0, dtype=tf.float32)b = tf.constant(4.0) # also tf.float32 implicitlytotal = a + bprint(a)print(b)print(total)
TensorFlow Tensor
TensorFlow中的Tensor可以是一個標量,向量,二維矩陣或多維矩陣,通常可以認為Tensor是一個多維矩陣。程序中用tf.Tensor來表示TensorFlow的Tensor對象,該對象主要包含以下幾個屬性:
1. 數據類型,例如float32,int32,string。
2. 矩陣的維度大小信息,例如[32,100]表示32行,100列的二維矩陣。
在TensorFlow程序中,可以通過如下操作來生成Tensor:
1. tf.Variable 構建變數
tf.Variable([100],name="var1",dtype=tf.float32)
2. tf.constant 構建常量
cons1=tf.constant(-1.0, name="cons1", shape=[2, 3])
3. tf.placeholder 構建佔位符
import tensorflow as tfimport numpy as npx = tf.placeholder(tf.float32, shape=(1024, 1024))y = tf.matmul(x, x)rand_array = np.random.rand(1024, 1024)sess=tf.Session()print(sess.run(y, feed_dict={x: rand_array}))
TensorFlow變數
TensorFlow模型中一般使用tf.get_variable來定義變數,與tf.Variable的主要區別在於tf.get_variable定義的變數可以被重複使用,從而簡化TensorFlow模型的定義。下面主要講解TensorFlow變數的常用用例:
創建變數:
my_variable = tf.get_variable("my_variable", [1, 2, 3])my_int_variable = tf.get_variable("my_int_variable", [1, 2, 3], dtype=tf.int32,initializer=tf.zeros_initializer)other_variable = tf.get_variable("other_variable", dtype=tf.int32,initializer=tf.constant([23, 42]))
其中[1, 2, 3]表示變數的shape,initializer表示變數的初始方法。my_variable的默認數據類型為float32,默認的變數初始化方法為tf.glorot_uniform_initializer的均勻分布。
TensorFlow Graph和Sesssion
在TensorFlow中tf.Graph主要包含兩部內容:
1. 圖結構:包含節點和邊,節點主要指的是TensorFlow中的操作,邊主要指的是Tensor數據。
2. 圖中的集合:TensorFlow中定義了一系列的集合,用來存儲圖中的元數據信息,如全局變數,訓練變數,局部變數等。集合的key值定義在tf.GraphKeys中。
在圖的定義中,可以指定操作的命名空間,如下所示:
c_0 = tf.constant(0, name="c") # => 操作命名為 "c"# 注意c名字已經被使用c_1 = tf.constant(2, name="c") # => 操作命名為 "c_1"# 指定操作的命名空間with tf.name_scope("outer"): c_2 = tf.constant(2, name="c") #=> 操作命名為"outer/c"# 指定操作的命名空間with tf.name_scope("inner"): c_3 = tf.constant(3, name="c") #=> 操作命名為"outer/inner/c"# 相同的命名空間,存在同名的操作c_4 = tf.constant(4, name="c") #=> 操作被命名為"outer/c_1"# 相同的命名空間,存在同名的操作with tf.name_scope("inner"): c_5 = tf.constant(5,name="c") # => 操作命名為"outer/inner_1/c
TensorFlow 模型的保存和回復
保存模型:
import tensorflow as tf# 創建模型變數.v1 = tf.get_variable("v1", shape=[3], initializer = tf.zeros_initializer)v2 = tf.get_variable("v2", shape=[5], initializer = tf.zeros_initializer)inc_v1 = v1.assign(v1+1)dec_v2 = v2.assign(v2-1)#模型全局變數初始操作.init_op = tf.global_variables_initializer()#用於保存模型變數的操作.saver = tf.train.Saver()# 保存模型到磁碟.with tf.Session() as sess: sess.run(init_op) #執行模型中的操作. inc_v1.op.run() dec_v2.op.run() # 保存模型變數到磁碟. save_path = saver.save(sess, "C:\tmp\ckpt\model.ckpt") print("Model saved in path: %s" % save_path)
注意:並沒有物理文件名叫C:\tmp\ckpt\model.ckpt,model.ckpt是checkppoint文件的前綴。
「.meta」文件:圖形結構元數據信息。
「.data」文件:checkpoint數據文件。
「.index」文件:checkpoint數據索引文件。
「checkpoint」文件:最近檢查點的文件列表信息。內容如下所示:
model_checkpoint_path: "C:\tmp\ckpt\model.ckpt"all_model_checkpoint_paths: "C:\tmp\ckpt\model.ckpt"
恢復模型變數:
import tensorflow as tftf.reset_default_graph()# 創建模型變數v1 = tf.get_variable("v1", shape=[3])v2 = tf.get_variable("v2", shape=[5])# 用於回復模型變數saver = tf.train.Saver()with tf.Session() as sess: # 從磁碟回復模型變數 saver.restore(sess, "C:\tmp\ckpt\model.ckpt") print("Model restored.") # 列印變數值 print("v1 : %s" % v1.eval()) print("v2 : %s" % v2.eval())
查看模型變數
from tensorflow.python.tools import inspect_checkpoint as chkp# 列印checkpoint文件中所有變數chkp.print_tensors_in_checkpoint_file("C:\tmp\ckpt\model.ckpt", tensor_name=, all_tensors=True, all_tensor_names=True)# 列印checkpoint文件中的變數v1chkp.print_tensors_in_checkpoint_file("C:\tmp\ckpt\model.ckpt", tensor_name=v1, all_tensors=False, all_tensor_names=False)# 列印checkpoint文件中的變數v2chkp.print_tensors_in_checkpoint_file("C:\tmp\ckpt\model.ckpt", tensor_name=v2, all_tensors=False, all_tensor_names=False)
推薦閱讀:
※TF Boys (TensorFlow Boys ) 養成記(二): TensorFlow 數據讀取
※Machine Learning(一):基於 TensorFlow 實現寵物血統智能識別
※如何評價陳天奇的模塊化深度學習系統NNVM?
※NLP(2) Tensorflow 文本- 價格建模 Part2
※Kubeflow 安利:在 Kubernetes 上進行機器學習
TAG:TensorFlow |