Python 将张量转换为numpy数组,但精度更高
使用TF2并通过调用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
.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-如果你认为我已经回答了你的问题,请投票并接受答案,谢谢。