Tensorflow框架特性
1. 多种环境支持
- 可运行于移动设备、个人计算机、服务器、集群等
- 云端、本地、浏览器、移动设备、嵌入式设备
2. 支持分布式模式
- Tensorflow会自动检测GPU和CPU,并充分利用它们并行、分布的执行
3. 简洁高效
- 构建、训练、迭代模型:Eager Execution, Keras
- 部署阶段:转化为静态图,提高执行效率
4. 庞大的社区支持
import tensorflow as tf
print("Tensorflow version:",tf.__version__)
Tensorflow version: 2.2.0
print("Eager execution is:",tf.executing_eagerly())
Eager execution is: True
tensorflow的基本运算、参数命名、运算规则、API的设计等与Numpy非常接近
创建Tensor对象,张量由Tensor类实现,每个张量都是一个Tensor对象
- 参数为Python列表
a=tf.constant([[1,2],[3,4]])
a.numpy()
array([[1, 2],
[3, 4]])
type(a)
tensorflow.python.framework.ops.EagerTensor
print(a)
tf.Tensor(
[[1 2]
[3 4]], shape=(2, 2), dtype=int32)
- 参数为数字
tf.constant(1.0)
<tf.Tensor: shape=(), dtype=float32, numpy=1.0>
- 参数为numpy数组
import numpy as np
tf.constant(np.array([1,2]))
<tf.Tensor: shape=(2,), dtype=int32, numpy=array([1, 2])>
创建全0张量和全1张量使用
tf.zeros(shape,dtype=tf.float32)
tf.ones(shape,dtype=tf.float32)
a=tf.ones(shape=(3,2))
a.numpy()
array([[1., 1.],
[1., 1.],
[1., 1.]], dtype=float32)
b=tf.zeros(shape=(3,2))
b.numpy()
array([[0., 0.],
[0., 0.],
[0., 0.]], dtype=float32)
创建元素值都相同的张量-tf.fill()函数
c=tf.fill([2,3],9)
c.numpy()
array([[9, 9, 9],
[9, 9, 9]])
**创建随机数张量--正态分布**
tf.random.normal(shape,mean,stddev,dtype)
tf.random.normal([3,3,3],mean=0.0,stddev=1.0)
<tf.Tensor: shape=(3, 3, 3), dtype=float32, numpy=
array([[[-0.35614842, 0.94766814, 0.53418773],
[-2.085539 , -1.128901 , -0.48506176],
[ 0.64464295, 0.62805605, 0.8223819 ]],
[[ 0.1856746 , 0.26377767, -0.37489384],
[-1.301052 , -0.39762193, -0.9295509 ],
[ 0.7798299 , 0.70893294, -2.586687 ]],
[[ 2.4336133 , 0.800847 , 0.39553404],
[ 1.5117671 , -1.0411582 , -0.91391784],
[ 0.7802949 , 0.36751553, -0.84624296]]], dtype=float32)>
创建随机数张量--截断正态分布
tf.random.truncated_normal(shape,mean,stddev,dtype)
tf.random.truncated_normal([3,3,3],mean=0.0,stddev=1.0)
<tf.Tensor: shape=(3, 3, 3), dtype=float32, numpy=
array([[[ 0.6169777 , 0.58406925, 0.5461606 ],
[ 1.4691086 , -0.58967483, -1.2706847 ],
[-0.837722 , -0.31492573, -1.407068 ]],
[[ 0.4036138 , -0.52642745, -0.9792386 ],
[ 0.36973178, 1.2274356 , 0.88833076],
[ 0.3340483 , -0.83053136, 0.21023372]],
[[ 0.7940919 , -0.22405621, 0.30250564],
[ 1.9415789 , -1.902916 , 0.02691474],
[-0.14834438, -0.07280175, 0.29536307]]], dtype=float32)>
创建均匀分布张量--tf.random.uniform()函数
tf.random.uniform(shape,minval,maxval,dtype)-前闭后开型
tf.random.uniform(shape=(3,3),minval=0,maxval=4,dtype='int32')
<tf.Tensor: shape=(3, 3), dtype=int32, numpy=
array([[2, 0, 2],
[0, 2, 1],
[0, 2, 3]])>
随机打乱函数-tf.random.shuffle()函数
x=tf.constant([[1,2],[3,4],[5,6]])
x
<tf.Tensor: shape=(3, 2), dtype=int32, numpy=
array([[1, 2],
[3, 4],
[5, 6]])>
tf.random.shuffle(x)
<tf.Tensor: shape=(3, 2), dtype=int32, numpy=
array([[5, 6],
[1, 2],
[3, 4]])>
创建序列-tf.range()函数
tf.range(start,limit,delta=1,dtype)
tf.range(10)
<tf.Tensor: shape=(10,), dtype=int32, numpy=array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])>
tensor对象的属性----ndim:维度;shape:形状;dtype:元素数据类型
tensor对象的shape()、size()、rank()方法----形状、元素总数和维度
张量与numpy数组
- 在tensorflow中,所有的运算都是在张量之间进行的
- numpy数组仅仅是作为输入和输出来使用的
- 张量可以运行于CPU,也可以运行于GPU和TPU
- 而numpy数组只能够在CPU中运行
维度变换
- 改变张量的形状
tf.reshape(tensor,shape)
a=tf.range(24)
a
<tf.Tensor: shape=(24,), dtype=int32, numpy=
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23])>
b=tf.reshape(a,(2,2,-1))
b
<tf.Tensor: shape=(2, 2, 6), dtype=int32, numpy=
array([[[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11]],
[[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23]]])>
多维张量的轴,张量的维度,可以增加和删除维度,对维度进行转置,还可以拼接和分割张量,拼接并不会产生新的维度,分割张量后维度不变,张量的堆叠和分解可以改变张量的维度
张量的部分采样
- 张量的索引和切片
b[1]
<tf.Tensor: shape=(2, 6), dtype=int32, numpy=
array([[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23]])>
- 数据提取
gather()
函数:用一个索引列表,将给定张量中,对应索引值的元素提取出来gather(params,indices)
a=tf.range(5)
tf.gather(a,indices=[0,2,3])
<tf.Tensor: shape=(3,), dtype=int32, numpy=array([0, 2, 3])>