Python 将张量转换为numpy数组,但精度更高

Python 将张量转换为numpy数组,但精度更高,python,numpy,tensorflow,Python,Numpy,Tensorflow,使用TF2并通过调用.numpy()将张量转换为数组效果良好,但返回float32,我需要更高精度的numpy数组 我甚至读了资料来源,也找不到这样做的方法 编辑: 添加一些代码,以显示如何获取向量 model=tf.saved_model.load('./使用_lite_saved_model')) sp=spm.SentencePieceProcessor() sp.Load('./使用\u lite\u saved\u model/assets/universal\u encoder\u

使用TF2并通过调用
.numpy()
将张量转换为数组效果良好,但返回
float32
,我需要更高精度的numpy数组

我甚至读了资料来源,也找不到这样做的方法

编辑: 添加一些代码,以显示如何获取向量

model=tf.saved_model.load('./使用_lite_saved_model'))
sp=spm.SentencePieceProcessor()
sp.Load('./使用\u lite\u saved\u model/assets/universal\u encoder\u 8k\u spm.model')
def create_矢量(句子):
全球sp
全局模型
值、索引、密集形状=以稀疏格式(sp,[句子])处理到ID
张量\u out\u dict=model.signatures['default'](
值=值,
指数=指数,
密集形状=密集形状
)
tensor\u out=tensor\u out\u dict[“默认值”]
返回张量_out.numpy()[0]

NumPy默认使用64位精度,而TensorFlow使用32位。
这是因为对于神经网络来说,32位精度通常已经足够了,
此外,它运行更快,使用更少的内存

如果您仍然希望张量处于更高的位置,可以使用tf.cast,或者在转换为NumPy后,可以按如下方式更改数据类型

values =  tf.constant([1.0,2.0,3.0,4.0,5.0])
返回:

tf.Tensor([1. 2. 3. 4. 5.], shape=(5,), dtype=float32)
tf.Tensor([1. 2. 3. 4. 5.], shape=(5,), dtype=float64) 
dtype('float64')  
要使用
tf.cast
更改精度,请执行以下操作:

values_float64 = tf.cast(values,dtype=tf.float64)
返回:

tf.Tensor([1. 2. 3. 4. 5.], shape=(5,), dtype=float32)
tf.Tensor([1. 2. 3. 4. 5.], shape=(5,), dtype=float64) 
dtype('float64')  
要使用NumPy astype更改精度,请执行以下操作:

values.numpy().astype(np.float64)
返回:

tf.Tensor([1. 2. 3. 4. 5.], shape=(5,), dtype=float32)
tf.Tensor([1. 2. 3. 4. 5.], shape=(5,), dtype=float64) 
dtype('float64')  
但如果您是从默认情况下使用float64的NumPy数组创建张量,那么在张量中也会保持相同

numpy_array = np.array([1.0,2.0,3.0,4.0])

tesor_from_numpy = tf.constant(numpy_array) 
返回:

tf.Tensor([1. 2. 3. 4.], shape=(4,), dtype=float64)  

希望我已经回答了你的问题,学习愉快

NumPy默认使用64位精度,而TensorFlow使用32位。 这是因为对于神经网络来说,32位精度通常已经足够了, 此外,它运行更快,使用更少的内存

如果您仍然希望张量处于更高的位置,可以使用tf.cast,或者在转换为NumPy后,可以按如下方式更改数据类型

values =  tf.constant([1.0,2.0,3.0,4.0,5.0])
返回:

tf.Tensor([1. 2. 3. 4. 5.], shape=(5,), dtype=float32)
tf.Tensor([1. 2. 3. 4. 5.], shape=(5,), dtype=float64) 
dtype('float64')  
要使用
tf.cast
更改精度,请执行以下操作:

values_float64 = tf.cast(values,dtype=tf.float64)
返回:

tf.Tensor([1. 2. 3. 4. 5.], shape=(5,), dtype=float32)
tf.Tensor([1. 2. 3. 4. 5.], shape=(5,), dtype=float64) 
dtype('float64')  
要使用NumPy astype更改精度,请执行以下操作:

values.numpy().astype(np.float64)
返回:

tf.Tensor([1. 2. 3. 4. 5.], shape=(5,), dtype=float32)
tf.Tensor([1. 2. 3. 4. 5.], shape=(5,), dtype=float64) 
dtype('float64')  
但如果您是从默认情况下使用float64的NumPy数组创建张量,那么在张量中也会保持相同

numpy_array = np.array([1.0,2.0,3.0,4.0])

tesor_from_numpy = tf.constant(numpy_array) 
返回:

tf.Tensor([1. 2. 3. 4.], shape=(4,), dtype=float64)  

希望我已经回答了你的问题,学习愉快

您可以在检索NumPy数组后将其转换为更高的精度(如
.NumPy().astype(np.float64)
中所示),但这只会给您相同的值,占用两倍的内存。如果您希望以更高的精度计算张量,那么您需要创建这样的张量。创建输入时,在必要时指定
dtype=tf.float64
,然后其余的张量将得到相同的类型。奇怪-我使用的是tf Hub模块(USE),并且在将输出向量保存为列表时,与转换为numpy数组相比,它具有更高的精度。检索numpy数组后,您可以将其转换为更高的精度(如
.numpy().astype(np.float64)
),但这只会给您相同的值,占用两倍的内存。如果您希望以更高的精度计算张量,那么您需要创建这样的张量。创建输入时,在必要时指定
dtype=tf.float64
,然后其余的张量将得到相同的类型。奇怪-我使用的是tf-Hub模块(USE),当将输出向量保存为列表时,它比转换为numpy数组具有更高的精度。@dendog-如果你认为我已经回答了你的问题,请投票并接受答案,谢谢。@dendog-如果你认为我已经回答了你的问题,请投票并接受答案,谢谢。