1. 程式人生 > >Tensorflow中常用的函式總結(一)

Tensorflow中常用的函式總結(一)

1、tf.shape()和x.get_shape().as_list()的使用

(1) tf.shape()
先說tf.shape()很顯然這個是獲取張量的大小的,用法無需多說,直接上例子吧!

import tensorflow as tf
import numpy as np
a_array=np.array([[1,2,3],[4,5,6]])
b_list=[[1,2,3],[3,4,5]]
c_tensor=tf.constant([[1,2,3],[4,5,6]])
with tf.Session() as sess:
    print(sess.run(tf.shape(a_array)))
    print(sess.run(tf.shape(b_list)))
    print(sess.run(tf.shape(c_tensor)))
結果:

(2)x.get_shape().as_list()
這個簡單說明一下,x.get_shape(),只有tensor才可以使用這種方法,返回的是一個元組。

import tensorflow as tf
import numpy as np
a_array=np.array([[1,2,3],[4,5,6]])
b_list=[[1,2,3],[3,4,5]]
c_tensor=tf.constant([[1,2,3],[4,5,6]])
print(c_tensor.get_shape())
print(c_tensor.get_shape().as_list())
with tf.Session() as sess:
    print(sess.run(tf.shape(a_array)))
    print(sess.run(tf.shape(b_list)))
    print(sess.run(tf.shape(c_tensor)))
結果:可見只能用於tensor來返回shape,但是是一個元組,需要通過as_list()的操作轉換成list.

2、tf.get_variable()和tf.Variable()的區別

tf.get_variable(name,  shape, initializer): name就是變數的名稱,shape是變數的維度,initializer是變數初始化的方式,

3、tf.nn.bias_add和tf.add、tf.add_n

Args:
  x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `uint8`, `int8`, `int16`, `int32`, `int64`, `complex64`, `complex128`, `string`.
  y: A `Tensor`. Must have the same type as `x`.
  name: A name for the operation (optional).

Returns:
  A `Tensor`. Has the same type as `x`.
Adds `bias` to `value`.

This is (mostly) a special case of `tf.add` where `bias` is restricted to 1-D. Broadcasting is supported, so `value` may have any number of dimensions. Unlike `tf.add`, the type of `bias` is allowed to differ from `value` in the case where both types are quantized.

Args:
  value: A `Tensor` with type `float`, `double`, `int64`, `int32`, `uint8`, `int16`, `int8`, `complex64`, or `complex128`.
  bias: A 1-D `Tensor` with size matching the last dimension of `value`. Must be the same type as `value` unless `value` is a quantized type, in which case a different quantized type may be used.   
  data_format: A string. 'NHWC' and 'NCHW' are supported.   
  name: A name for the operation (optional).

Returns:
  A `Tensor` with the same type as `value`.

3)tf.add_n(inputs,name=None)

函式是實現一個列表的元素的相加。就是輸入的物件是一個列表,列表裡的元素可以是向量,

4)tf.add 和 tf.nn.bias_add 的區別

  • tf.nn.bias_add 是 tf.add 中的一個特例,tf.nn.bias_add 中 bias 一定是 1 維的張量;
  • tf.nn.bias_add 中 value 最後一維長度和 bias 的長度一定得一樣;
  • tf.nn.bias_add 中,當 value 是 quantized type 時,bias 可以取不同的 quantized type。但什麼是 quantized type?TensorFlow API 中 tf.DType 頁面顯示,’tf.qint8’、’tf.quint8’、’tf.qint16’、’tf.quint16’、’tf.qint32’型別就是Quantized type。但這些類別具體如何使用並不知曉。
  • tf.add(tf.matmul(x, w), b)
  • tf.matmul(x, w) + b

4、tf.nn.bias_add和tf.add、tf.add_n

tf.nn.relu(features, name = None)
max(features, 0)將矩陣中每行的非最大值置0

5、tf.nn.bias_add和tf.add、tf.add_n

tf.nn.max_pool(value, ksize, strides, padding, name=None)
引數是四個,和卷積很類似:
第一個引數value:需要池化的輸入,一般池化層接在卷積層後面,所以輸入通常是feature map,依然是[batch, height, width, channels]這樣的shape

第二個引數ksize:池化視窗的大小,取一個四維向量,一般是[1, height, width, 1],因為我們不想在batch和channels上做池化,所以這兩個維度設為了1

第三個引數strides:和卷積類似,視窗在每一個維度上滑動的步長,一般也是[1, stride,stride, 1]

第四個引數padding:和卷積類似,可以取'VALID' 或者'SAME'

返回一個Tensor,型別不變,shape仍然是[batch, height, width, channels]這種形式


6、 tf.reshape

原始碼:x_image = tf.reshape(x, [-1, 28, 28, 1])這裡是將一組影象矩陣x重建為新的矩陣,該新矩陣的維數為(a,28,28,1),其中-1表示a由實際情況來定。 
例如,x是一組影象的矩陣(假設是50張,大小為56×56),則執行x_image = tf.reshape(x, [-1, 28, 28, 1])可以計算a=50×56×56/28/28/1=200。即x_image的維數為(200,28,28,1)。

7、tf.nn.softmax(logits,axis=None,name=None,dim=None)

通過Softmax迴歸,將logistic的預測二分類的概率的問題推廣到了n分類的概率的問題。通過公式

可以看出當月分類的個數變為2時,Softmax迴歸又退化為logistic迴歸問題。

下面的幾行程式碼說明一下用法

import tensorflow as tf

A = [1.0,2.0,3.0,4.0,5.0,6.0]

with tf.Session() as sess: 
print sess.run(tf.nn.softmax(A))

結果 
[ 0.00426978 0.01160646 0.03154963 0.08576079 0.23312201 0.63369131]

其中所有輸出的和為1

softmax = tf.exp(logits) / tf.reduce_sum(tf.exp(logits), axis)

  • logits:
    A non-empty Tensor. 一個非空張量
    Must be one of the following types: half, float32, float64.必須是以下型別之一:half, float32, float64
  • axis:
    The dimension softmax would be performed on. 將被執行的softmax維度
    The default is -1 which indicates the last dimension.預設值是-1,表示最後一個維度。
  • name:
    A name for the operation (optional).操作的名稱(可選)。
  • dim:
    Deprecated alias for axis. 棄用,axis的別名

8、 tf.argmax() 函式, tf.equal()函式, tf.cast()函式, tf.truncated_normal()

1). tf.argmax()函式

tf.argmax可以認為就是np.argmax。tensorflow使用numpy實現的這個API。 
   簡單的說,tf.argmax就是返回最大的那個數值所在的下標。tf.argmax(array,axis)

    當axis=1時返回每列最大值的下標,當axis=0時返回每行最大值的下班。

2). tf.equal()函式

tf.equal(A,B)是對比這兩個矩陣或者向量的相等的元素,如果是相等的那就返回True,反正返回False,返回的值的矩陣維度和A是一樣的

A = [[1,3,4,5,6]]  
B = [[1,3,4,3,2]]
 
 
with tf.Session() as sess:  
    print(sess.run(tf.equal(A, B)))
    
[[ True  True  True False False]]

3). tf.cast()函式

tf.cast(x, dtype)將x的資料格式轉化成dtype.

cast(x,dtype,name=None)

將x的資料格式轉化成dtype.例如,原來x的資料格式是bool, 
那麼將其轉化成float以後,就能夠將其轉化成0和1的序列。反之也可以

a = tf.Variable([1,0,0,1,1])
b = tf.cast(a,dtype=tf.bool)
sess = tf.Session()
 
 
a = tf.Variable([1,0,0,1,1])
b = tf.cast(a,dtype=tf.bool)
sess = tf.Session()
sess.run(tf.global_variables_initializer())
print(sess.run(b))
 
[ True False False  True  True]

4). tf.truncated_normal()

tf.truncated_normal(shape, mean, stddev):shape表示生成張量的維度,mean是均值,stddev是標準差。這個函式產生正太分佈,均值和標準差自己設定。這是一個截斷的產生正太分佈的函式,就是說產生正太分佈的值如果與均值的差值大於兩倍的標準差,那就重新生成。和一般的正太分佈的產生隨機資料比起來,這個函式產生的隨機數與均值的差距不會超過兩倍的標準差,但是一般的別的函式是可能的。
 

import tensorflow as tf;  
import numpy as np;  
import matplotlib.pyplot as plt;  
 
c = tf.truncated_normal(shape=[10,10], mean=0, stddev=1)  
 
with tf.Session() as sess:  
    print(sess.run(c))
    
[[ 0.56077307  1.74287605 -0.15655719  0.87136668 -0.4219175   0.94079614
  -1.31186545  1.94287431  0.70748854  1.15509737]
 [ 0.32469562 -0.91890186 -0.44398952  1.25986481 -1.07295966  0.21889997
   0.19389877 -1.22909117  1.34865403  0.87812191]
 [-0.83542323 -0.05598836 -1.05256093 -1.16475403 -0.17121609 -0.55075479
  -0.37847248  0.14151201  0.36596569  0.55171227]
 [ 0.45216689  0.12429248 -0.4333829  -0.00368057 -0.20933141  0.5465408
   1.06096387  1.47238612 -1.99268937  1.28203201]
 [ 0.36932501  0.30012983  1.94679129  0.59601396 -0.16721351 -0.42786792
   0.917597   -1.6504811  -0.81060582 -0.35126168]
 [-1.48954999 -0.42889833  0.31517059  1.00009787  0.26073182  1.26285052
  -1.80997884  0.51399821 -0.27673215  0.15389352]
 [ 0.8669793  -0.28650126  1.39484227 -0.4041909  -1.70028269  0.58513969
   0.75772232 -0.47386578 -0.34529254 -0.71658897]
 [ 0.74709773 -0.0835886   1.14453304  0.70367438  0.07037418 -0.15808868
   0.23158503 -0.67268801  0.55869597  0.12777361]
 [-0.52604282  0.64181858 -0.04147881  0.78596973  0.69087744  0.56500375
  -1.12409449 -0.42864376  0.30804652  1.33116138]
 [-1.36940789 -0.4526186  -0.87445366  0.19748467 -0.06541829 -0.2672275
   0.63084471  0.76155263  0.83874393  0.91775542]]

9、tf.reduce_max(),tf.reduce_mean()

求最大值tf.reduce_max(input_tensor, reduction_indices=None, keep_dims=False, name=None)

求平均值tf.reduce_mean(input_tensor, reduction_indices=None, keep_dims=False, name=None)

引數1--input_tensor:待求值的tensor。

引數2--reduction_indices:在哪一維上求解。

引數(3)(4)可忽略

import tensorflow as tf
X = [[1., 2.],
    [3., 4.]]
re1 = tf.reduce_mean(x) ==> 2.5 #如果不指定第二個引數,那麼就在所有的元素中取平均值
re2 = tf.reduce_mean(x, 0) ==> [2.,  3.] #指定第二個引數為0,則第一維的元素取平均值,即每一列求平均值
#re2 = tf.reduce_mean(x, reduction_indices = 0)
re3 = tf.reduce_mean(x, 1) ==> [1.5,  3.5] #
#re3 = tf.reduce_mean(x, reduction_indices = 1)

with tf.Session() as sess:
    print(sess.run(re1))
    print(sess.run(re2))
    print(sess.run(re3))

tf.nn.sparse_softmax_cross_entropy_with_logits(_sentinel=None, labels=None, logits=None, name=None)

10、tf.app.flags函式

tf定義了tf.app.flags,用於支援接受命令列傳遞引數,相當於接受argv。


import tensorflow as tf
 
#第一個是引數名稱,第二個引數是預設值,第三個是引數描述
tf.app.flags.DEFINE_string('str_name', 'def_v_1',"descrip1")
tf.app.flags.DEFINE_integer('int_name', 10,"descript2")
tf.app.flags.DEFINE_boolean('bool_name', False, "descript3")
 
FLAGS = tf.app.flags.FLAGS
 
#必須帶引數,否則:'TypeError: main() takes no arguments (1 given)';   main的引數名隨意定義,無要求
def main(_):  
    print(FLAGS.str_name)
    print(FLAGS.int_name)
    print(FLAGS.bool_name)
 
if __name__ == '__main__':
    tf.app.run()  #執行main函式

執行:


[[email protected] test]# python tt.py
def_v_1
10
False
[[email protected] test]# python tt.py --str_name test_str --int_name 99 --bool_name True
test_str
99
True

11、python glob模組

glob.glob

  返回所有匹配的檔案路徑列表。它只有一個引數pathname,定義了檔案路徑匹配規則,這裡可以是絕對路徑,也可以是相對路徑。下面是使用glob.glob的例子:

import glob  
  
#獲取指定目錄下的所有圖片  
print glob.glob(r"E:\Picture\*\*.jpg")  
  
#獲取上級目錄的所有.py檔案  
print glob.glob(r'../*.py') #相對路徑  

12、Python中split()和os.path.split()兩個分割函式

函式:split()

Python中有split()和os.path.split()兩個函式,具體作用如下:
split():拆分字串。通過指定分隔符對字串進行切片,並返回分割後的字串列表(list)
os.path.split():按照路徑將檔名和路徑分割開

1)、函式說明

1、split()函式
語法:str.split(str="",num=string.count(str))[n]

引數說明:
str:表示為分隔符,預設為空格,但是不能為空('')。若字串中沒有分隔符,則把整個字串作為列表的一個元素
num:表示分割次數。如果存在引數num,則僅分隔成 num+1 個子字串,並且每一個子字串可以賦給新的變數
[n]:表示選取第n個分片

注意:當使用空格作為分隔符時,對於中間為空的項會自動忽略

2、os.path.split()函式
語法:os.path.split('PATH')

引數說明:

1.PATH指一個檔案的全路徑作為引數:

2.如果給出的是一個目錄和檔名,則輸出路徑和檔名

3.如果給出的是一個目錄名,則輸出路徑和為空檔名

2)、分離字串

string = "www.gziscas.com.cn"

1.以'.'為分隔符

print(string.split('.'))

['www', 'gziscas', 'com', 'cn']

2.分割兩次

print(string.split('.',2))

['www', 'gziscas', 'com.cn']

3.分割兩次,並取序列為1的項

print(string.split('.',2)[1])

gziscas

4.分割兩次,並把分割後的三個部分儲存到三個檔案

u1, u2, u3 =string.split('.',2)

print(u1)—— www

print(u2)—— gziscas

print(u3) ——com.cn

3)、分離檔名和路徑

import os

print(os.path.split('/dodo/soft/python/'))

('/dodo/soft/python', '')

print(os.path.split('/dodo/soft/python'))

('/dodo/soft', 'python') 

4)、例項

str="hello boy<[www.baidu.com]>byebye"

print(str.split("[")[1].split("]")[0])

www.baidu.com

相關推薦

string常用函式總結四(append和assign)(C++11)

append(新增字元(串)) (1)basic_string& append(const basic_string& __str); //在字串末尾新增字串str (2) basic_string& append(const basic_st

MFC常用函式總結

1、MFC編輯框、靜態文字框相關的常用函式 《1》GetDlgItemText(ID ,str) 作用:從對話方塊中獲取文字 第一個引數為要獲取的編輯框(或者靜態文字框、單選按鈕等可以顯示內容的控制元件)的ID,第二個引數為字串(Cstring 型別)的變數,獲取的文字

postgis常用函式總結()

1,基本操作函式AddGeometryColumn(<schema_name>, <table_name>, <column_name>, <srid>, <type>, <dimension>)給一個已

mysql常用函式總結

1、interval函式select now()-INTERVAL '7 d'  獲取當前日期七天前的時間專案使用:order_time > now() - interval  '7 d' 用於獲

Tensorflow常用函式總結()

1、tf.shape()和x.get_shape().as_list()的使用 (1) tf.shape() 先說tf.shape()很顯然這個是獲取張量的大小的,用法無需多說,直接上例子吧! import tensorflow as tf import numpy

jQuery常用內容總結()

說明 一個 select 兩個 身體健康 作用域 class block class選擇器 jQuery中的常用內容總結(一) 前言   不好意思(????),由於回家看病以及處理一些其它事情耽擱了,不然這篇博客本該上上周或者上周寫的;同時閑談幾句:在這裏建議各位開發的

tensorflow常用的啟用函式

啟用函式(activation function)執行時啟用神經網路中某一部分神經元,將啟用神經元的資訊輸入到下一層神經網路中。神經網路之所以能處理非線性問題,這歸功於啟用函式的非線性表達能力。啟用函式需要滿足資料的輸入和輸出都是可微的,因為在進行反向傳播的時候,需要對啟用函式求導。 在Te

生產環境Oracle常用函式總結

1>to_char,將日期轉換為字元;add_months,在第一個引數的日期上加或者減第二個引數的值 select dkzh,jkhtbh,yhkrq,dkffrq,shqs,dqyqcs,to_char(add_months(dkffrq,shqs+dqyqcs+1),'yyyymm'

Pythonre(正則表示式)常用函式總結

1  re.match       #嘗試從字串的開始匹配一個模式     re.match的函式原型為:re.match(pattern, string, flags)     第一個引數是正則表示式,這裡為"(\w+)\s",如果匹配成功,則返回一個Match,否則返

JavaMath類常用函式總結

Java中比較常用的幾個數學公式的總結: //取整,返回小於目標函式的最大整數,如下將會返回-2 Math.floor(-1.8); //取整,返回發育目標數的最小整數 Math.ceil() //

【JavaMath類常用函式總結

Java中比較常用的幾個數學公式的總結: //取整,返回小於目標函式的最大整數,如下將會返回-2 Math.floor(-1.8); //取整,返回發育目標數的最小整數 Math.ceil() //四捨五入取整 Math.round() //計算平

PHP對陣列進行操作的常用函式總結

在PHP中,對陣列的操作是非常常見的,所以,掌握一些常用且重要的陣列操作函式尤其重要。現將一些本人認為較為重要的函式總結如下: 1.建立陣列使用的是array(),如: <?php $a = array("a","b");   //當然還有其他一些基礎的建立陣列的方法

Linux c一些常用函式總結(c語言中文網。。。)

fgets()函式 標頭檔案:include<stdio.h> fgets()函式 標頭檔案:include<stdio.h>fgets()函式用於從檔案流中讀取一行或指定個數的字元,其原型為:    char * fgets(char * 

自然語言處理爬過的坑:使用python遍歷所有的資料夾的所有文字.標準庫OS的常用函式總結大全

# -*- coding: utf-8 -*- import os import codecs def search(filepath): #遍歷filepath下所有檔案,包括子目錄 files = os.listdir(filepath) for fil

Go常用功能總結階段

sep format 字節數組 ngx str1 [] 構造函數 當前時間 mat 1. go語言從鍵盤獲取輸入內容   <1. 最簡單的辦法是使用 fmt 包提供的 Scan 和 Sscan 開頭的函數。請看以下程序: package main import "

第十八節,TensorFlow使用批量歸

item con 用法 它的 線性 dev 樣本 需要 sca 在深度學習章節裏,已經介紹了批量歸一化的概念,詳情請點擊這裏:第九節,改善深層神經網絡:超參數調試、正則化以優化(下) 由於在深層網絡中,不同層的分布都不一樣,會導致訓練時出現飽和的問題。而批量歸一化就是為了緩

JavaScript常用函式總結

 最近正在學習js語法,講到函式這一塊內容,感覺有些細節還是挺有用的,所以發文總結一下。      javascript這門語言本身就是一種弱型別語言,它不和像java, c ,c#等等這些語言一樣,在宣告變數和方法的時候不需要對齊進行指定資料型別的修飾,

【六】 makefile常用函式總結

函式的呼叫語法 函式使用“$”呼叫: $(function arguments) ${function arguments}  例如: $(subst .c, .o, test1.c test2.c) 還是來看一個示例: #$(comma)值是一個逗號

opencv常用函式總結

最近做影象處理專案,總結一下常用的函式: 1,converto :函式轉為任意想要的格式,以及可以新增歸一化係數,這個係數可能要用到mat的最大值和最小值,下面這個函式可以取出最大最小值 2,cv::minMaxLoc(mat,&minim,&maxim);,取出的最大最小值

python常用的模組

一,常用的模組 模組就是我們將裝有特定功能的程式碼進行歸類,從程式碼編寫的單位來看我們的程式,從小到大的順序: 一條程式碼<語句塊,<程式碼塊(函式,類)<模組我們所寫的所有py檔案都是模組   引入模組的方式     1,import 模組     2,from xxx impo