tensor对象和Python对象相互转换

TensorFlow的介绍

TensorFlow新手,仅供参考


一、tensor对象

在TensorFlow中,tf.tensor对象是数据对象的句柄。数据对象包含输出的常量和变量,以及计算节点的输出数据对象。

所有Python语言中的常见类型的数据需要转化为TensorFlow中的tensor对象后,才能使用TensorFlow框架中的计算结点。

1.啥是tensor对象

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:
 [[1 2]
 [3 4]]

 Tensor named:"B:0" value:
 [[1 2]
 [3 4]]

 Matmul output:
 [[ 7 10]
 [15 22]]

2.Python对象转为tensor对象

在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

3.tensor对象转为Python对象

在TensorFlow中,函数tf.py_func用于将tensor的基本类型数据转化为Python对象,tensor对象作为参数传入py_func函数中,Python函数的返回值又会自动转化为tensor对象,是一个nice的函数!

#tf.py_func的原型
	py_func(
		func, 
		inp, 
		Tout, 
		stateful=True, 
		name=None
	)
名称含义
funcPython函数类型,指定需要执行的Python函数
inplist类型,list里面存放时是Tensor对象,用于传入func中
Toutlist类型或者是单个对象,存放的是tensorflow中的类型,用于描述func函数返回数据转化为tensor对象后的数据类型
statefulbool类型,默认为True,如果设置为True,则该函数被认为是与状态有关的。如果函数与状态无关,则相同的输入会产生相同的输出
name当前的operation的名字

example:

import tensorflow as tf

def my_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'>
[[3 3]
 [3 3]]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值