深度学习(5)TensorFlow基础操作一: TensorFlow数据类型

Data Container(数据载体)

(1) list
优点: 非常灵活,在list中间可以添加任何类型的数据,例如: [1, 1.2, ‘Hello’, (1, 2), layers, …],而且可以随意添加删除编辑;
缺点: 遇到大数据时,例如一张图片维度是[224, 224],那么使用list所消耗的内存空间是巨大的,而且读取写入的效率低;
(2) np.array
优点: 专门解决同类型数据运算而设计的数据载体,可以很方便地将大数据(例如一组图片的维度是[64, 224, 224, 3])进行存储和运算;
缺点: Numpy是在深度学习出现之前就已经设计好的科学计算库,所以它不能很好地支持GPU计算或者自动求导功能;
(3) tf.Tensor
与Numpy地位相等,添加了一些深度学习的方法和工具; 更加偏向于神经网络方面的操作,为了更好地入门,其API设计与Numpy的API设计相近;

What’s Tensor

  • scalar: 1.1
    标量; dim = 0;
  • vector: [1.1], [1.1, 2.2, …]
    向量; dim = 1;
  • matrix: [[1.1, 2.2], [3.3, 4.4], [5.5, 6.6]]
    矩阵; dim = 2; [1.1, 2.2]、[3.3, 4.4]、[5.5, 6.6]均是作为一行存在;
  • tensor: r a n k > 2 rank>2 rank>2
    其实所有数据都可以叫做tensor,不只是维度大于2的数据,scalar、vector、matrix都可以叫做tensor,但是常见实战时各叫各的,方便区分,这样解释是为了方便理解tensor。
    Tensor Flow in Graph
    在这里插入图片描述

TF is a computing lib(科学计算库)

  • int(整型数据),float(单精度浮点型数据),double(双精度浮点型数据)
  • bool(布尔类型数据)
  • string(字符串类型数据)

创建不同类型的数据

在这里插入图片描述

tf.constant()为创建一个Tensor;

Tensor Property(Tensor属性)

在这里插入图片描述

(1) tf.device(“cpu”): 指定创建的数据在CPU上计算;
tf.device(“gpu”): 指定创建的数据在GPU上计算;
注: 如果a和b都在CPU或者都在GPU上是可以一起运算的,但是如果a在CPU上而b在GPU上,或者a在GPU而b在CPU上时,是不可以一起运算的,需要进行CPU/GPU转换
(2) aa = a.gpu(): 将a由在CPU计算转换为在GPU计算并赋值给aa;
bb = b.cpu: 将b由在GPU计算转换为在CPU计算并赋值给bb;
(3) b.numpy(): 将b由tensor数据类型转换为numpy数据类型;
(4) b.ndim(): 返回b的维度;
(5) b.shape(): 返回b的结构;
(6) tf.rank(): 返回tensor类型数据的维度;
(7) b.name: 无需理解,为TensorFlow1.0版本的起名问题;

Check Tensor Type(判断数据类型)

在这里插入图片描述

(1) tf.is_tensor(b): 判断b是否为tensor类型的数据;
(2) a.dtype: 返回a的数据类型;
(3) a.dtype = tf.float32: 查看a的数据类型是否为tensor数据类型中的float32;

Convert(数据类型转换)

在这里插入图片描述

(1) a = np.arange(5): 创建a,默认存储的数据类型为int64;
(2) aa = tf.convert_to_tensor(a): 将a转换为tensor类型的数据,转换后数据类型保持不变,依然为int64;
(3) aa = tf.convert_to_tensor(a, dtype = tf.int32): 将a转换为tensor类型的数据,并且改变a的数据类型为int32;
(4) tf.cast(aa, dtype = tf.float32): cast是一个专业的数据类型转换工具,将aa由int32转换为float32;

bool & int(布尔型和整型数据之间的转换)

在计算时我们往往会将布尔类型的数据转换为整型数据,方便计算,因此,布尔型和整型数据之间的相互转换非常常见。
在这里插入图片描述

(1) tf.cast(b, dtype = tf.bool): 将b由整型数据转换为布尔型数据。其中,0转换为False,1转换为True;
(2) tf.cast(b, dtype = tf.bool): 将bb由布尔型数据转换为整型数据。其中,False转换为0,True转换为1;

tf.Variable(可以优化参数的一种数据类型)

例如: y = w ∗ x + b y=w*x+b y=wx+b,这里的 w w w b b b都是参数,那么 w w w b b b除了是tensor类型的数据以外,还有一个额外的属性,就是Variable,就是说我们可以认为: w = tf.Variable(w),这样的话,一个tensor类型的数据经过Variable包装后,会自动具有了一些可求导的特性,经过包装后会有nametrainable两个属性,其中name属性无需考虑,是TensorFlow1.0中的概念; trainable属性是可以训练的意思,就是说当 w w w b b b需要进行向后传播或者求导的时候,需要trainable这个属性进行对 w w w b b b的跟踪,会自动记录 w w w b b b的梯度信息。

注: isinstance()并不推荐使用,更推荐使用tf.is_tensor()

To numpy(如何将数据由tensor类型转换为numpy类型)

tensor数据一般是运行在GPU上的,我们可能需要在CPU上完成一些额外的控制,所以我们需要将数据由tensor类型转换为numpy类型。
在这里插入图片描述

(1) a.numpy(): 将a转换为numpy类型的数据;
(2) 如果a是scalar(即标量)数据的话,我们可以直接使用int(a)或者float(a)来对a的数据类型进行转换;

参考文献:
[1] 龙良曲:《深度学习与TensorFlow2入门实战》
[2] https://playground.tensorflow.org

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值