tensor numpy.array panda.dataframe list等數據類型的轉換


 

w3c學習網址

TensorFlow將給定值轉換為張量

tf.convert_to_tensor

此函數將各種類型的 Python 對象轉換為 Tensor 對象.它接受 Tensor 對象,numpy 數組,Python 列表和 Python 標量

convert_to_tensor ( 
    value , 
    dtype = None , 
    name = None , 
    preferred_dtype = None
 )
輸入格式類型
import numpy as np

def my_func(arg):
  arg = tf.convert_to_tensor(arg, dtype=tf.float32)
  return tf.matmul(arg, arg) + arg

# The following calls are equivalent.
value_1 = my_func(tf.constant([[1.0, 2.0], [3.0, 4.0]]))
value_2 = my_func([[1.0, 2.0], [3.0, 4.0]])
value_3 = my_func(np.array([[1.0, 2.0], [3.0, 4.0]], dtype=np.float32))

ARGS:

  • value:其類型具有已注冊的張量轉換函數的對象.
  • dtype:返回的張量的可選元素類型.如果缺少該類型, 則將從值的類型中推斷出.
  • name:創建新的張量時要使用的可選名稱.
  • preferred_dtype:返回張量的可選元素類型, 當 dtype 為 None 時使用.在某些情況下,調用方在轉換為張量時可能沒有 dtype,因此 preferred_dtype 可以作為軟首選項使用.如果轉換為 preferred_dtype 是不可行的,則此參數無效.

返回:

返回基於值的輸出.

注意:

  • TypeError:如果沒有為值注冊轉換函數.
  • RuntimeError:如果注冊的轉換函數返回無效值.

 

 

TensorFlow將給定的對象轉換為張量或IndexedSlices

tf.convert_to_tensor_or_indexed_slices

convert_to_tensor_or_indexed_slices ( 
    value , 
    dtype = None , 
    name = None
 )
輸入格式

將給定的對象轉換為張量或 IndexedSlices.

如果值為 IndexedSlices 或 SparseTensor,則將其原封不動地返回.否則,它將轉換為使用 convert_to_tensor () 的張量.

ARGS:

  • value:可由 convert_to_tensor () 使用的 IndexedSlices、SparseTensor 或對象.
  • dtype:(可選)返回的張量或 IndexedSlices 所需的 DType.
  • name:(可選)創建新的張量時要使用的名稱.

返回:

基於值的張量、IndexedSlices 或 SparseTensor.

注意:

  • ValueError: 如果 dtype 與值的元素類型不匹配.

 

TensorFlow將值轉換為SparseTensor或張量

tf.convert_to_tensor_or_sparse_tensor

該函數別名:

  • tf.contrib.framework.convert_to_tensor_or_sparse_tensor
  • tf.convert_to_tensor_or_sparse_tensor
convert_to_tensor_or_sparse_tensor ( 
    value , 
    dtype = None , 
    name = None
 )
輸入格式

ARGS:

  • value:A SparseTensor,SparseTensorValue或其類型具有注冊Tensor轉換功能的對象.SparseTensor、SparseTensorValue 或其類型具有已注冊的張量轉換函數的對象.
  • dtype:返回張量的可選元素類型.如果缺少該類型,則將從值的類型中推斷出.
  • name:創建新的張量時要使用的可選名稱.

返回:

返回基於值的 SparseTensor 或張量.

注意:

RuntimeError: 如果結果類型與 dtype 不兼容.

 

 

tensorflow 中tensor與數組之間的轉換

主要是兩個方法:
 1.數組轉tensor:數組a,  tensor_a=tf.convert_to_tensor(a)
 2.tensor轉數組:tensor b, array_b=b.eval()

import tensorflow as tf
import numpy as np

a=np.array([[1,2,3],[4,5,6],[7,8,9]])
print (a)
b=tf.constant(a)

with tf.Session() as sess:
print (b)
for x in b.eval(): #b.eval()就得到tensor的數組形式
print (x)

print ('a是數組',a)

tensor_a=tf.convert_to_tensor(a)
print ('現在轉換為tensor了...',tensor_a)

 

 

1.1 list 轉 numpy

ndarray = np.array(list)

1.2 numpy 轉 list

list = ndarray.tolist()

2.1 list 轉 torch.Tensor

tensor=torch.Tensor(list)

2.2 torch.Tensor 轉 list

先轉numpy,后轉list

list = tensor.numpy().tolist()

3.1 torch.Tensor 轉 numpy

ndarray = tensor.numpy()

*gpu上的tensor不能直接轉為numpy

ndarray = tensor.cpu().numpy()

3.2 numpy 轉 torch.Tensor

tensor = torch.from_numpy(ndarray)

 

 

 

在我們使用TensorFlow進行深度學習訓練時,很多時候都是與Numpy數據打招呼,例如我們csv或者照片數據等。
但是我們都知道,TensorFlow訓練時都是使用Tensor來存儲變量的,並且網絡輸出的結果也是Tensor。

一般情況下我們不會感受到Numpy與Tensor之間的區別,因為TensorFlow網絡在輸入Numpy數據時會自動轉換為Tensor來處理。
但是在輸出網絡時,輸出的結果仍為Tensor,當我們要用這些結果去執行只能由Numpy數據來執行的操作時就會出現莫名其妙的錯誤。

numpy與tensor數據相互轉化:

*Numpy2Tensor

雖然TensorFlow網絡在輸入Numpy數據時會自動轉換為Tensor來處理,但是我們自己也可以去顯式的轉換:
data_tensor= tf.convert_to_tensor(data_numpy)

*Tensor2Numpy
當我們要用這些結果去執行只能由Numpy數據來執行的操作時就會出現莫名其妙的錯誤。解決方法:

data_numpy = data_tensor.eval()----------------注意這里是t f2的用法,如果tf1.x就需要在前面加上with tf.Session() as sess:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM