首先比较一下Python列表(list)、Numpy数组(ndarray)、Tensorflow张量(Tensor)之间的区别:
>> Python列表:
元素可以使用不同的数据类型,可以嵌套
在内存中不是连续存放的,是一个动态的指针数组
读写效率低,占用内存空间大
不适合做数值计算
>> Numpy数组:
元素数据类型相同
每个元素在内存中占用的空间相同,存储在一个连续的内存区域中
存储空间小,读取和写入速度快
不能够主动检测利用GPU进行运算,只能运行在CPU上
>> TensorFlow张量
可以高速运行于GPU和TPU之上,实现神经网络和深度学习中的复杂算法
*** 张量和numpy数组:
① 张量可看成将numpy数组进一步封装,使其可以执行TensorFlow中的API,且可以运行与GPU/TPU;
② 在TensorFlow中,所有运算都是在张量之间进行的; Numpy数组仅仅是作为输入和输出使用,不参与运算;
③ 张量可以运行于CPU /GPU/TPU; 而Numpy数组只能运行在CPU中。
1、创建Tensor对象 – tf.constant()函数
张量由Tensor类实现,每个张量都是一个Tensor对象。
函数格式:tf.constant(value, dtype, shape)
value: 可以是数字、Python列表、numpy数组、布尔型、字符串等
dtype: 元素的数据类型
shape: 张量的形状
注意点:
1、TensorFlow2中的所有张量,都可以通过 .numpy()的方法,得到它对应的数组
2、TensorFlow创建浮点数张量时,默认是32位浮点数;
3、输出的形状shape=()表示是0维张量/数字/标量;
4、numpy创建浮点数组时,默认是64位浮点数,当使用numpy数组创建张量时,
TensorFlow会接受numpy数组元素的数据类型,使用64位浮点数保存数据
5、布尔型转换为整数--》 0:False, 1:True;
6、整型变量装换为布尔型,将非0数字都视为True; 0视为False。
示例:
import tensorflow as tf
import numpy as np
tf1 = tf.constant([[1,2],[3,4]]) # 1、参数为Python列表
#print(tf1)
#print(tf1.numpy()) # 2、TensorFlow2中的所有张量,都可以通过 .numpy()的方法,得到它对应的数组
tf2 = tf.constant(1.0) # 3、参数为数字 --> 也可以写成 tf.constant(1.)
print(tf2) # 4、 TensorFlow创建浮点数张量时,默认是32位浮点数;输出中 shape=()表示是0维张量/数字/标量
tf3 = tf.constant(np.array([1,2])) # 5、参数为numpy数组。 numpy创建浮点数组时,默认是64位浮点数,当使用numpy数组创建张量时,TensorFlow会接受numpy数组元素的数据类型,使用64位浮点数保存数据
tf.constant(1.0, dtype=tf.float64) # 6、创建张量时,指定元素的数据类型
tf4 = tf.constant(True) # 参数为布尔型
a = tf.constant([True,False])
# 输出:tf.Tensor([1 0], shape=(2,), dtype=int32)
print(tf.cast(a, tf.int32))