用于深度学习的TensorFlow(第1部分)

ximingri 2019-06-25

点击上方关注,All in AI中国

用于深度学习的TensorFlow(第1部分)

TensorFlow是一个免费的开源软件库,用于跨任务范围的数据流和可区分编程。它是一个符号数学库,也用于机器学习应用程序,如神经网络。它用于Google的研究和制作,TensorFlow由Google Brain团队开发,供Google内部使用。

深度学习是一种特殊的机器学习,通过学习将世界表示为概念的嵌套层次结构来实现巨大的力量和灵活性,每个概念都是根据更简单的概念定义的,更抽象的表示是根据更抽象的概念计算出来的。

深度学习如何运作?

深度学习模型旨在通过类似于人类得出结论的逻辑结构来持续分析数据。为实现这一目标,深度学习使用称为人工神经网络(ANN)的分层算法结构。人工神经网络的设计灵感来自人脑的生物神经网络。这使得机器智能比标准机器学习模型的功能强大得多。确保深度学习模型不会得出错误的结论是一个棘手的前景,但是当它按预期工作时,功能性深度学习是一个科学奇迹和潜在的骨干,是真正的人工智能的潜在支柱。

  • 机器学习使用算法来解析数据,从数据中学习,并根据学到的知识做出明智的决策
  • 深度学习将算法分层构建,创建一个“人工神经网络”,该网络能够自主学习并做出智能决策
  • 深度学习是机器学习的一个子领域,虽然两者都属于人工智能的广泛范畴,但深度学习是最像人类的人工智能的动力

用于深度学习的TensorFlow(第1部分)

在编写实际的深度学习应用程序之前,我们必须从TensorFlow中理解以下概念

  1. 常数
  2. 变量
  3. 占位符
  4. 损失计算
  5. 减少损失

常量

可以使用tf.constant()函数创建常量。

tf.constant( value,dtype=None, shape=None, name='Const', verify_shape=False )
  • 参数:
  • 值:输出类型为dtype的常量值(或列表)。
  • dtype:得到的Tensor的元素的类型。
  • 形状:结果Tensor的可选维数。
  • 名称:Tensor的可选名称。
  • verify_shape:布尔值,用于验证值的形状。
import tensorflow as tf
#Build computational graph
node1 = tf.constant(3.0,tf.float32)
node2 = tf.constant(4.0,tf.float32)
output = node1 + node2
#Run computational graph
sobj = tf.compat.v1.Session()
sobj.run(output)

会话:会话基本上是TensorFlow程序的支柱。会话激活程序以使常量准备就绪并执行所需的操作。它可以通过以下方式完成。

占位符

占位符只是一个变量,我们将在以后分配数据。它允许我们创建操作并构建计算图,而不需要数据。在TensorFlow术语中,我们然后通过这些占位符将数据提供给图表。

tf.placeholder(
 dtype,
 shape=None,
 name=None
)

参数:

  • dtype:要进给的Tensor中的元素类型。
  • 形状:要进给的Tensor的形状(可选)。如果未指定形状,则可以提供任何形状的Tensor。
  • name:操作的名称(可选)。
import tensorflow as tf
#Build computational grapg
node1 = tf.compat.v1.placeholder(tf.float32)
node2 = tf.compat.v1.placeholder(tf.float32)
output = node1 + node2
#Run computational graph
sobj = tf.compat.v1.Session()
sobj.run(output,{node1:[1,3],node2:[4,5]})

变量来计算损失

TensorFlow变量是表示程序操纵的共享、持久状态的最佳方式。变量在调用run()时保持图中的状态。您可以通过构造变量类的实例将变量添加到图形中

import tensorflow as tf
#Model Parameter
w = tf.compat.v1.Variable([.3],tf.float32)
b = tf.compat.v1.Variable([-.3],tf.float32)
#Input and Output
x = tf.compat.v1.placeholder(tf.float32)
linear_model = w * x + b
y = tf.compat.v1.placeholder(tf.float32)
#loss function
squared_delta = tf.square(linear_model-y)
loss = tf.reduce_sum(squared_delta)
init = tf.global_variables_initializer()
#Run computational graph
sobj = tf.compat.v1.Session()
sobj.run(init)
sobj.run(loss,{x:[1,2,3,4],y:[0,-1,-2,-3]})

减少损失

我们使用损失函数来确定预测值与训练数据中的实际值的偏差。我们改变模型权重以使损失最小化,这就是训练的全部内容。 梯度下降是一种尝试最小化某些错误的学习算法

TensorFlow有一整套优化类型,并且您也可以定义自己的优化

  • 梯度下降优化器
  • Adagrad 优化器
  • Momentum 优化器
  • Adam优化器
  • Ftrl优化器
  • RMSProp优化器
import tensorflow as tf
#Model Parameter
w = tf.compat.v1.Variable([.3],tf.float32)
b = tf.compat.v1.Variable([-.3],tf.float32)
#Input and Output
x = tf.compat.v1.placeholder(tf.float32)
linear_model = w * x + b
y = tf.compat.v1.placeholder(tf.float32)
#loss function
squared_delta = tf.square(linear_model-y)
loss = tf.reduce_sum(squared_delta)
#optimiser
optimiser = tf.compat.v1.train.GradientDescentOptimizer(0.01)
train = optimiser.minimize(loss)
init = tf.global_variables_initializer()
#Run computationalgraph
sobj = tf.compat.v1.Session()
sobj.run(init)
for i in range(1000):
 sobj.run(train,{x:[1,2,3,4],y:[0,-1,-2,-3]})
sobj.run([w,b])

相关推荐