Tensorfflow基础知识(一)

摘要:本文主要介绍了Tensorflow的一些基础知识,由于内容比较多,所以分成两部分来介绍。

1、数据类型

Tensorflow中的基本数据类型包括数值型、字符串型和布尔型。需要注意的是,这三种数据类型在Tensorflow中不同于在python中相应的类型——需要使用创建张量的形式进行创建,具体如下:

 可以看到,python基础数据类型和TensorFlow的数据类型是有差异的。那么差异在哪里呢?如下:

  • 创建数值型的数据:

继续上面的代码,b就是一个标量(0维)

  • id :TensorFlow 中内部索引对象的编号
  • shape: 表示张量的形状
  • dtype :表示张量的数值精度
  • numpy:numpy()是一个方法,可以返回Numpy.array 类型的数据,方便导出数据到系统的其他模块,注意上面的代码中numpy返回的是一个标量,如果是一个向量(一维)的话:

 需要注意的是,如果想要创建一个向量,输入的数据一定是list类型。举例下面的代码,和上面的b的numpy做对比:

 下面,我们继续创建一个矩阵(二维)

 最后,我们还可以再创建一个三维的张量(例如RGB图像)

 

 注意到,加括号的情况,外层多一个括号就多一个维度。

  • 创建字符串类型的数据:

对于字符串类型,其创建方法和创建数值型的数据区别不大,而且创建的字符串可以使用strings模块进行字符串的操作:

  • 创建布尔类型的数据:

为了方便比较运算,Tensorflow还支持布尔型数据的创建,还可以用布尔型数据创建向量等:

 2、数据精度

其实对于数值类型的数据,是可以进行精度的设定的,如果不设定,那么浮点数会默认32位,当然也可以自己设定。精度包括:tf.int16, tf.int32, tf.int64, tf.float16, tf.float32,tf.float64,其中tf.float64 即为tf.double:

再例如,对于圆周率pi来说:

  •  读取和修改精度:

可以通过dtype成员直接获取数据的精度,可以使用tf.cast方法来修改精度:

 另外,布尔型数据和整型数据之间的转换也是合法的:

3、待优化的张量

在神经网络的计算当中,有的张量需要不断地修改优化,而有的张量则是一成不变的,于是在TensorFlow中出现了一种创建待优化张量的方法:tf.Variable,这种方法既可以改造普通张量,也可以直接创建待优化张量:

在上面的例子中,name和trainable是两种待优化类型张量的特有属性,name 属性用于命名计算图中的变量,这套命名体系是TensorFlow 内部维护的,一般不需要用户关注name 属性;trainable表征当前张量是否需要被优化,创建Variable 对象是默认启用优化标志,可以设置trainable=False 来设置张量不需要优化

注意:待优化张量可看做普通张量的特殊类型,普通张量也可以通过GradientTape.watch()方法临时加入跟踪梯度信息的列表。

4、张量的创建

  • 从Numpy和List对象转换创建张量:

  •  创建全0或者全1的张量:

主要是借助两个API:tf.zeros和tf.ones,这两个函数的参数是张量的维度信息

 另外还有相应的复制函数:tf.zeros_like, tf.ones_like,参数就是全0或者全1的张量。举一个简单的例子:

  •  创建自定义数值的张量:

借助API:tf.fill(shape, value),第一个参数是维度信息,第二个要设定的值:

  • 创建已知分布的张量:

常见的分布有均值分布和高斯分布,这样的分布很适合我们某些场合下的应用,例如卷积神经网络很适合用高斯核,高斯核其实就是一个符合高斯分布的张量。这里主要借助两个API:

  • tf.random.normal(shape, mean=0.0, stddev=1.0)可以创建形状为shape,均值为mean,标准差为stddev 的正态分布𝒩(𝑚𝑒𝑎𝑛, 𝑠𝑡𝑑𝑑𝑒𝑣2);
  • tf.random.uniform(shape, minval=0, maxval=None, dtype=tf.float32)可以创建采样自[𝑚𝑖𝑛𝑣𝑎𝑙, 𝑚𝑎𝑥𝑣𝑎𝑙]区间的均匀分布的张量。

  • 创建序列:

通过tf.range(start,end,delta)函数实现:

posted @ 2019-11-19 17:07  AmingGlaxy  阅读(384)  评论(0编辑  收藏  举报