TensorFlow基础知识

TensorFlow基础知识,第1张

TensorFlow工作机制

TensorFlow让我们通过创建和计算相互交互的 *** 作来实现机器学习算法。这些交互形成了我们所称的“计算图”,通过计算图我们可以直观地表达复杂的功能结构。

什么是计算图?

计算图组成部分:

  • 节点(表示要执行的 *** 作)
  • 边 (用于数据的流通)

使用TensorFlow包含两个主要步骤:

  • 创建图
  • 执行该图

在TensorFlow中我们创建相关的运算时,并没有立马被执行,而是在图中创建了一个又一个的节点,这些节点记录着我们要执行的 *** 作,但是不会被执行。

完成计算图的描述后,就可以运行图所表示的计算。为了实现这一点,我们需要创建和运行会话。

  • 首先在tf.Session()中启动图
  • 然后调用Session对象的.run()方法完成运行(该方法是从请求的输出开始计算,然后反向进行计算,这里节点的计算必须根据依赖关系集来执行。所以最后被计算的那部分图其实取决于我们的输出需求)
  • 当任务完成时,最好使用sess.close()命令关闭会话,确保该会话使用的资源释放

看一个例子:

import tensorflow as tf
#创建前三个节点,将值5,2和3分别赋予a,b,c
a= tf.constant(5)
print(a)
b= tf.constant(2)
print(b)
c=tf.constant(3)
print(c)
#创建后三个节点,执行简单的算术 *** 作
d=tf.multiply(a,b)
print(d)
e=tf.add(c,b)
print(e)
f=tf.subtract(d,e)
print(f)
#执行图
'''sess=tf.Session()
out=sess.run(f)
sess.close()'''
with tf.Session() as sess:
    print(sess.run(a))
    print(sess.run(b))
    print(sess.run(c))
    print(sess.run(d))
    print(sess.run(e))
    print(sess.run(f))
变量、占位符和简单的优化

变量:

优化过程的作用是调整某些给定模型的参数。为此,TensorFlow使用变量。与其他每次运行会话时“重新填充”数据的Tensor对象不同,变量在图中保持固定状态。这很重要,因为它们的当前状态可能会影响下一次迭代中它们的变化。像其他Tensor对象一样,变量可以用作图中其他 *** 作的输入。

使用变量分两个阶段完成:

  • 首先调用tf.Variable()函数来创建一个变量并定义它将被初始化的值。
  • 然后必须通过使用tf.global_variables_initializer()方法运行会话来显式执行初始化 *** 作。

像其他Tensor对象一样,仅当模型运行时才会计算变量。

init_val = tf.random_normal((1,5),0,1)
var=tf.Variable(init_val,name='var')
print('pre run\n {} '.format(var))
#定义变量时必须遵守步骤 进行初始化 *** 作 这一步是必不可少的
init=tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    print('\n post run:\n{}'.format(sess.run(var)))

占位符:

占位符是空的供填充数据的变量。可以理解为在图中我们先创建了一个结构,这个结构里什么也没有只是占据了图中的一块地方,我们可以根据需要去向这些地方填充我们想要填充的数据。

占位符有一个可选的形状参数(shape)。如果一个形状没有输入值或者输入值为None,那么占位符可以被输入任何大小的数据。

占位符使用步骤分为两步:

  • 创建占位符
  • 输入数据(定义占位符必须给它一些输入值,否则将抛出异常)

输入的数据作为字典传递给session.run()方法,其中每个键对应一个占位符变量名称,匹配值是以列表或Numpy数组形式给出的数据值

x_data=np.random.randn(5,10)
w_data=np.random.randn(10,1)
with tf.Graph().as_default():
    #创建占位符
    x=tf.placeholder(tf.float32,shape=(5,10))
    w=tf.placeholder(tf.float32,shape=(10,1))
    b=tf.fill((5,1),-1)
    xw=tf.matmul(x,w)
    xwb=xw+b
    s=tf.reduce_max(xwb)
    with tf.Session() as sess:
        #将数据传入到占位符中
        outs=sess.run(s,feed_dict={x:x_data,w:w_data})
print("outs={}".format(outs))

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/735378.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存