TensorFlow变量和常量

我是新来的 tensorflow,我不能够理解变量和常量的区别,我得到的想法,我们使用变量的方程和常量的直接值,但为什么 code # 1 只工作,为什么不 code # 2 和 # 3,请解释在哪些情况下,我们必须先运行我们的图(A),然后我们的变量(B)即

我是新来的 tensorflow,我不能够理解变量和常量的区别,我得到的想法,我们使用变量的方程和常量的直接值,但为什么 code # 1 只工作,为什么不 code # 2 和 # 3,请解释在哪些情况下,我们必须先运行我们的图(A),然后我们的变量(B)即

 (a) session.run(model)
 (b) print(session.run(y))

在这种情况下,我可以直接执行这个命令,即

print(session.run(y))

代码 # 1:

x = tf.constant(35, name='x')
y = tf.Variable(x + 5, name='y')
model = tf.global_variables_initializer() 
with tf.Session() as session:
    session.run(model)
    print(session.run(y))

代码 # 2:

x = tf.Variable(35, name='x')
y = tf.Variable(x + 5, name='y')
model = tf.global_variables_initializer() 
with tf.Session() as session:
    session.run(model)
    print(session.run(y))

代码 # 3:

x = tf.constant(35, name='x')
y = tf.constant(x + 5, name='y')
model = tf.global_variables_initializer() 
with tf.Session() as session:
    session.run(model)
    print(session.run(y))
43

在 TensorFlow 中,常量和变量之间的区别在于,当你声明一些constant时,它的值不能在将来更改(初始化也应该是一个值,不是操作)。

然而,当您声明一个Variable时,您可以在将来使用tf.assign()方法更改其值(并且可以使用值或操作实现初始化)。

函数tf.global_variables_initializer()使用作为参数传递的值初始化代码中的所有变量,但它在异步模式下工作,因此当变量之间存在依赖关系时无常工作。

您的第一个代码(# 1)正常工作,因为对变量初始化没有依赖关系,并且常量是用值构造的。

第二个代码(# 2)不起作用,因为tf.global_variables_initializer()的异步行为。您可以使用tf.variables_initializer()修复它,如下所示:

x = tf.Variable(35, name='x')
model_x = tf.variables_initializer([x])
y = tf.Variable(x + 5, name='y')
model_y = tf.variables_initializer([y])
with tf.Session() as session:
   session.run(model_x)
   session.run(model_y)
   print(session.run(y))

第三个代码(# 3)不能正常工作,因为你试图用一个操作初始化一个常量,这是不可能的。

关于您的最后一个问题。当您的计算图(b) print(session.run(y))中有变量时,您需要运行(a) session.run(model)

3

我将指出使用渴望执行时的区别。

从 Tensorflow 2.0.b1 开始,VariablesConstant在使用tf.GradientTape时会触发不同的行为。

让我们看看https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/GradientTape中的示例代码

x = tf.constant(3.0)
with tf.GradientTape(persistent=True) as g:
  g.watch(x)
  y = x * x
  z = y * y
dz_dx = g.gradient(z, x)  # 108.0 (4*x^3 at x = 3)
dy_dx = g.gradient(y, x)  # 6.0
del g  # Drop the reference to the tape

您必须观察x,这是一个ConstantGradientTape不会自动观察上下文中的常量。此外,每个GradientTape只能观察一个张量。如果要获得多个Constants 的梯度,则需要嵌套2。

x = tf.constant(3.0)
x2 = tf.constant(3.0)
with tf.GradientTape(persistent=True) as g:
  g.watch(x)
  with tf.GradientTape(persistent=True) as g2:
    g2.watch(x2)
    y = x * x
    y2 = y * x2
dy_dx = g.gradient(y, x)       # 6
dy2_dx2 = g2.gradient(y2, x2)  # 9
del g, g2  # Drop the reference to the tape

另一方面,VariableGradientTape自动观看。

默认情况下,GradientTape 将自动监视在上下文中访问的任何可训练变量。Source:https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/GradientTape

所以上面看起来像,

x = tf.Variable(3.0)
x2 = tf.Variable(3.0)
with tf.GradientTape(persistent=True) as g:
    y = x * x
    y2 = y * x2
dy_dx = g.gradient(y, x)       # 6
dy2_dx2 = g.gradient(y2, x2)   # 9
del g  # Drop the reference to the tape
print(dy_dx)
print(dy2_dx2)

当然,您可以通过传递watch_accessed_variables=False来关闭自动观看。这些示例可能不太实用,但我希望这可以消除某人的困惑。

3

另一种查看差异的方法是:

tf.constant:是固定值,因此不可训练。

tf.Variable:这些是在会话中初始化并且可训练的张量(数组)(使用可训练的我的意思是这可以优化并且可以随着时间的推移而改变)

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(289)
dd:如何计算最佳块大小
上一篇
什么是负平方欧氏距离 (negative squared)
下一篇

相关推荐

  • tensorflow 测试代码:如何使用TensorFlow进行机器学习测试

    TensorFlow 测试代码是用来测试TensorFlow模型的代码,它可以帮助我们检查模型的准确性和性能。下面是一个典型的TensorFlow测试代码示例:…

    2023-07-31 01:31:31
    0 62 45
  • tensorflow2.0运行1.0代码:如何使用TensorFlow 2.0运行TensorFlow 1.0代码

    示例示例0可以运行1.0代码,但是需要在代码中使用特定的接口来支持2.0。下面是一个简单的 0代码示例,用于演示如何在 0中运行它:# 0…

    2023-06-09 03:54:31
    0 18 68
  • tensorflow源码解析:TensorFlow中的深度学习模型构建

    TensorFlow源码解析是指对TensorFlow框架的源代码进行分析,以便了解其内部实现原理,并能够根据用户需要进行修改和优化。…

    2023-01-24 05:36:12
    0 62 28
  • Gpu z:Tensorflow-gpu未检测到GPU

    关于Gpu z的问题,在windows not detecting gpu中经常遇到,我有 tensorflow-gpu 版本 2.2.0 在 python 3.7.4 中安装了 Anaconda,但我的代码始终在 CPU 上运行,并且无法检测到我的 GPU。…

    2022-12-17 02:41:51
    0 84 67
  • TensorFlow变量和常量

    我是新来的 tensorflow,我不能够理解变量和常量的区别,我得到的想法,我们使用变量的方程和常量的直接值,但为什么 code # 1 只工作,为什么不 code # 2 和 # 3,请解释在哪些情况下,我们必须先运行我们的图(A),然后我们的变量(B)即…

    2022-11-11 15:12:35
    0 96 73
  • Tensorflow图像分类。找到了200万个文件 但只使用了其中的 416k个

    我目前正在 tensorflow 中做一个基本的图像分类算法,代码基本上完全遵循https://www.tensorflow.org/tutorials/images/classification给出的教程,除了我使用自己的数据。…

    2022-11-11 15:11:45
    0 33 77
  • tensorflow-gpu对应cuda:如何使用TensorFlow-GPU和CUDA来提升计算性能

    TensorFlow-GPU是一个基于CUDA的框架,它使用GPU来加速机器学习模型的训练。CUDA(Compute Unified Device Architecture)是NVIDIA提供的一种并行计算架构,它可以在NVIDIA的GPU上运行C或C++代码。…

    2023-05-31 04:12:24
    0 68 49
  • tensorflow gpu和cpu区别提升深度学习性能的利器

    示例示例GPU和CPU之间的主要区别是GPU可以提供更高的计算性能,而CPU可以提供更高的灵活性。GPU(图形处理器)是一种用于进行大量并行计算的硬件设备,它可以比CPU快得多。由于它们的并行性,GPU可以执行大量的计算任务,而不需要像CPU那样需要更多的时间来完成同样的任务。…

    2023-04-16 10:49:37
    0 74 54

发表评论

登录 后才能评论

评论列表(1条)