tensor物件和Python物件相互轉換

2021-10-09 22:47:03 字數 4170 閱讀 1756

tensorflow新手,僅供參考

在tensorflow中,tf.tensor物件是資料物件的控制代碼。資料物件包含輸出的常量和變數,以及計算節點的輸出資料物件。

所有python語言中的常見型別的資料需要轉化為tensorflow中的tensor物件後,才能使用tensorflow框架中的計算結點。

tensor物件可以儲存任務維度的張量。圖中參與計算的資料都是tensor物件。

**示例:

import tensorflow as tf

data=[[

1,2]

,[3,

4]]#定義變數tensor

a_tensor=tf.variable(data,name=

'a')

#定義常量tensor

b_tensor=tf.constant(data,name=

'b')

#根據tensor名稱獲取tensor

a_temp=tf.get_default_graph(

).get_tensor_by_name(

'a:0'

)b_temp=tf.get_default_graph(

).get_tensor_by_name(

'b:0'

)#將查詢到的做矩陣乘法

c_tensor=tf.matmul(a_temp,b_temp)

#列印查詢到的tensor物件

print

('tensor named "a:0":'

,a_temp)

print

('tensor named "b:0":'

,b_temp)

with tf.session(

)as sess:

sess.run(tf.global_variables_initializer())

a_ver,b_ver,c_ver=sess.run(

[a_temp,b_temp,c_tensor]

)print

('\n tensor named:"a:0" value:\n'

,a_ver)

print

('\n tensor named:"b:0" value:\n'

,b_ver)

print

('\n matmul output:\n'

,c_ver)

輸出結果:

tensor named "a:0"

: tensor(

"a:0"

, shape=(2

,2), dtype=int32_ref)

tensor named "b:0"

: tensor(

"b:0"

, shape=(2

,2), dtype=int32)

tensor named:

"a:0" value:[[

12][

34]]

tensor named:

"b:0" value:[[

12][

34]]

matmul output:[[

710][

1522

]]

在tensorflow中,函式tf.convert_to_tensor用於將python的基本型別資料轉化為tensor物件。(只有部分資料型別可轉換,如:int, float, string, list以及numpy庫中的陣列)

#tf.convert_to_tensor的原型

tf.convert_to_tensor(

value,

dtype=

none

, name=

none

, preferred_dtype=

none

)

名稱

含義value

需要轉為tensor物件的資料

dtype

指定tensor物件的資料型別,如果沒有,則根據value的值來判斷

name

轉化成tensor物件後的名稱

preferred_dtype

返回的tensor物件指定備選的資料型別,如果dtype為none,該引數才生效。如果實際資料型別不可能轉為preferred_dtype 指定的型別,則該引數無效

example:

import tensorflow as tf

#定義python的字串物件

str_py=

'hello world'

#將字串轉化為tensor物件

str_tf=tf.convert_to_tensor(str_py,dtype=tf.string)

print

('str_tf='

,str_tf)

with tf.session(

)as sess:

#tensor 物件取出來的是字串對應的位元組物件

str_bytes=sess.run(str_tf)

str_v=str_bytes.decode(

)print

(str_v)

output:

str_tf= tensor(

"const:0"

, shape=()

, dtype=string)

hello world

在tensorflow中,函式tf.py_func用於將tensor的基本型別資料轉化為python物件,tensor物件作為引數傳入py_func函式中,python函式的返回值又會自動轉化為tensor物件,是乙個nice的函式!

#tf.py_func的原型

py_func(

func,

inp,

tout,

stateful=

true

, name=

none

)

名稱

含義func

python函式型別,指定需要執行的python函式

inplist型別,list裡面存放時是tensor物件,用於傳入func中

tout

list型別或者是單個物件,存放的是tensorflow中的型別,用於描述func函式返回資料轉化為tensor物件後的資料型別

stateful

bool型別,預設為true,如果設定為true,則該函式被認為是與狀態有關的。如果函式與狀態無關,則相同的輸入會產生相同的輸出

name

當前的operation的名字

example:

import tensorflow as tf

defmy_add_func

(a,b)

:#檢視傳入的引數的資料型別

print

('type(a)='

,type

(a))

print

('type(b)='

,type

(b))

c=a+b

return c

a_tensor=tf.constant([[

1,1]

,[1,

1]],dtype=tf.int64)

b_tensor=tf.constant([[

2,2]

,[2,

2]],dtype=tf.int64)

c_tensor=tf.py_func(my_add_func,

[a_tensor,b_tensor]

,tf.int64)

with tf.session(

)as sess:

c=sess.run(c_tensor)

print

(c)

output:

type

(a)=

<

class

'numpy.ndarray'

>

type

(b)=

<

class

'numpy.ndarray'

>[[

33][

33]]

Pytorch Tensor和tensor的區別

在pytorch中,tensor和tensor都能用於生成新的張量 a torch.tensor 1 2 a tensor 1 2.a torch.tensor 1 2 a tensor 1 2 首先,我們需要明確一下,torch.tensor 是python類,更明確地說,是預設張量型別torch...

Variable和tensor的計算

變數在torch中是建立乙個計算圖,但是相比較tensorflow和theano中的靜態圖,它是動態的,torch沒有placeholder,torch只能給計算圖傳遞變數 import numpy as np import torch from torch.autograd import vari...

Pytorch之Tensor和Numpy之間的轉換

最重要的區別t.tensor和t.tensor 不論輸入的型別是什麼,t.tensor 都會進行資料拷貝,不會共享記憶體 t.tensor 與numpy共享記憶體,但當numpy的資料型別和tensor的型別不一樣的時候,資料會被複製,不會共享記憶體。可使用t.from numpy 或者t.deta...