tensorflow:基础篇

首先我们来了解一下tensorflow的使用流程是怎么样的?
tensorflow是一种声明式语言。

工作流程:

1,“粮草先行”:
首先先定义输入数据,也就是将数据分成训练集数据特征和要预测的值即X和Y。

2,“战略路线”:
定义数据流图。什么是数据流图呢?tensorflow用数据流图表示算法模型,是一个框架,一个只有规则没有数据和执行的空壳。就好比是战争中的一个战略路线图,首先攻打哪里,怎么攻打,和谁合作,然后攻打哪里等等。数据流图由节点和有向边组成。有向边,就是数据流图中流动的东西,如张量(Tensor)。数据流图中流动的东西就是数据,数据就是张量,只是张量分成几种不同的类型。就像是战争中流动的是士兵,士兵又分成不同的等级。节点就是一个一个的城池,战争的时候,城池里面会发生生很多事情,也会有一部分士兵留下来看守。在tensorflow中,每个节点均对应一个具体的操作,因此操作是模型功能的实际载体。节点包含操作(Operation),存储节点(Variable)和数据节点(Placeholder)。

3,“攻城略地”:
士兵准备好了,战略路线也有了,接下来就是攻城略地了。在tensorflow中,准备好了输入数据,和数据流图,接下来就是开启一个会话(Session),在session中加载数据流图,和输入数据和,然后run一下,就可以输出结果了。

4,“战后可视化”:
在战争中伤亡了多少人,每个城池的战争表现怎么样,可以用可视化出来,更好的了解自己的战术。在tensorflow中可以用tensorboard来进行可视化。

具体概念:

张量:
在数学里,张量是一种几何实体,广义上表示任意形式的“数据”,张量可以理解为0阶,1阶…矩阵在高维空间上的推广,张量的阶表示它能描述的最大维度。1阶就代表一个维度,维度里可以有多个元素。

在tensorflow中,张量表示的是具有相同数据类型多维数组。在python中,列表和元组中的数据可以是不同的数据类型,但是tensorflow中的张量必须是一样的。因此张量有两个特性:1.数据类型(浮点型,整型,字符串等),可以在声明张量时就定义好数据类型,也可以不定义,不定义的时候,tensorflow就会根据数据或操作,自动设置一个合适的数据类型。2.是数组的形状大小,即各个维度的大小。

那tensorflow中,张量到底是什么呢?

  • 表示多维数据
  • 是执行操作时的输入或输出数据
  • 用户通过执行操作来创建或计算张量
  • 张量的形状不一定在编译时确定,可以在运行时,通过形状推断计算得出(如tf.placeholder)

张量的几种类型:

  1. tf.constant() 常量
  2. tf.placeholder() 占位符
  3. tf.variable() 变量
  4. tf.get_variable() 变量

常量(constant): 常量操作得到的张量是不能改变的,当数据从一个节点流向另一个节点时,数据是不能更改的。如:y = a+b时,在计算时,a和b的值是不能改变的。当重新输入数据要计算y = a+b时,是不能实现的,此时就不能将数据设计为常量。定义了一个常量之后,永远也无法改变,除非重新定义常量;

变量(variable): 定义出来的张量,可以在数据流图中保存状态,值一直保存在内存中,不会被释放,以保存值的效果。不会因为没有依赖,而被垃圾回收机制回收。变量的主要作用就是维护特定节点的状态,如深度学习或机器学习模型参数。例如在用线性回归方程预测房价的模型中,要将模型参数W定义为variable。

  1. 定义的方式:

tf.Variable() 是操作,返回值是变量(特殊张量)
好处:

  • 张量的生命周期通常随着依赖的计算完成而结束,内存也随即释放;
  • 变量则常驻内存,在每一步训练时,不断更新其值,以实现模型参数的更新;

tf.get_variable()

W = tf.get_variable('weight', (X_data.shape[1], 1), initializer=tf.constant_initializer())

好处:

  • 可以直接通过key找到变量,赋值,复用都可以,在数据流图中复用同名节点,会很方便;
  • 因此当数据流图的特殊张量et_variable创建好之后,也就是weight创建好之后,后面再去创建.get_variable相同名字的variable就会报错;
  • tf.constant_initializer 会默认的给weight初始化为1; 4. 定义权重变量"weight" ,get_variable已经存在过了,就不能第二次执行了;

注意,在tensorflow中,定义数据和赋值时分开的!

定义数据:是描述数据长什么样子,初始值是什么
赋值:在计算时,要把数据流图放到会话里面,然后要向设备申请资源,比如向cpu申请资源,在执行计算时,要对数据进行初始化操作,这是真正对变量进行初始化。

  1. 变量的一些常见操作:
# 创建变量的两种方式
w = tf.Variable(<initial-value>, name=<option-name>)
w = tf.get_variable(<option-name>,<shape>, initializer=tf.constant_initializer())

# 将变量作为操作的输入
y = tf.matmul(w, ...another variable or tensor)
z = tf.sigmoid(w + y)

# 使用assign 或 assign_xxx 方法重新给变量赋值
w.assign(w + 1.0)
w.assign_add(1.0)

操作:
数据流图包含有向边和节点,每个节点均对应一个具体的操作,因此操作是模型功能的实际载体。

  • 节点的分类:

    存储节点: 有状态的变量操作,通常用来存储模型参数;
    计算节点: 无状态的计算或控制操作,主要负责算法逻辑表达或流程控制;
    数据节点: 数据的占位符操作,用于描述图外输入数据的属性

占位符操作(tf.placeholder()):
使用占位符操作表示图外输入的数据,如训练和测试数据;
数据流图描述了算法模型的计算拓扑,其中的各个操作(节点)都是抽象的函数映射或数学表达式;
换句话说,数据流图本身是一个具有拓扑和内部结构的“壳”。在用户向数据流图填充数据前,图中并没有真正执行任何计算。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值