(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设计相近;
tf.constant()
为创建一个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版本的起名问题;
(1) tf.is_tensor(b)
: 判断b是否为tensor类型的数据;
(2) a.dtype
: 返回a的数据类型;
(3) a.dtype = tf.float32
: 查看a的数据类型是否为tensor数据类型中的float32;
(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;
在计算时我们往往会将布尔类型的数据转换为整型数据,方便计算,因此,布尔型和整型数据之间的相互转换非常常见。
(1) tf.cast(b, dtype = tf.bool)
: 将b由整型数据转换为布尔型数据。其中,0转换为False,1转换为True;
(2) tf.cast(b, dtype = tf.bool)
: 将bb由布尔型数据转换为整型数据。其中,False转换为0,True转换为1;
例如: y = w ∗ x + b y=w*x+b y=w∗x+b,这里的 w w w和 b b b都是参数,那么 w w w和 b b b除了是tensor类型的数据以外,还有一个额外的属性,就是Variable,就是说我们可以认为: w = tf.Variable(w)
,这样的话,一个tensor类型的数据经过Variable包装后,会自动具有了一些可求导的特性,经过包装后会有name
和trainable
两个属性,其中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()
。
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