Skip to main content
 首页 » 编程设计

python之tf.group 和 tensorflow 集合有什么不同

2024年09月03日42softidea

我是 tensorflow 的新手

我们可以通过两种方式一次运行多个张量。 使用 collection 和 tf.group 但我不确定有两个区别

举个简单的例子

const0=tf.constant(8) 
const1=tf.constant(11) 
 
tf.add_to_collection('my_collection' , const0) 
tf.add_to_collection('my_collection' , const1) 
 
#or  
tf.group(const0 , const1) 

下面的代码是tensorflow实现的Mandelbrot fractal 使用 tf.group 和 collection

执行的没有区别
#step = tf.group( 
#  tf.assign(zs, zs_add), 
#  tf.assign_add(ns, zs_cast) 
#) 
 
#tf.add_to_collection('my_collection',tf.assign(zs, zs_add)) 
#tf.add_to_collection('my_collection',(ns, zs_cast)) 
#step = tf.get_collection('my_collection') 
# 
 
import tensorflow as tf 
import numpy as np  
import matplotlib.pyplot as plt 
 
# Concept 
# input initial value 
#Y, X = np.mgrid[-1.3:1.3:0.005, -2:1:0.005] 
Y, X = np.mgrid[-1.3:1.3:0.005, -2:1:0.005] 
 
init_value = X + 1j*Y 
 
# 
xs = tf.constant(init_value ) 
zs = tf.Variable(xs) 
zs_zeros = tf.zeros_like(xs, tf.float32) 
ns = tf.Variable(zs_zeros) 
 
zs_squre = tf.multiply(zs,zs) 
zs_add = tf.add(zs_squre , xs) 
zs_abs = tf.abs(zs_add) 
 
zs_less = tf.math.less(zs_abs , 4) 
zs_cast = tf.cast(zs_less , tf.float32) 
 
# 
step = tf.group( 
  tf.assign(zs, zs_add), 
  tf.assign_add(ns, zs_cast) 
) 
 
 
# 
sess = tf.Session() 
sess.run(tf.global_variables_initializer()) 
 
for i in range(200): 
    sess.run(step) 
value = sess.run(ns) 
plt.imshow(value) 
plt.show() 

所以这是我的问题
tf.group 和 collection 有什么区别? 谢谢!

请您参考如下方法:

tf.group 在计算图内创建一个操作,一旦评估就会执行组中的所有张量:

op = tf.group(a,b) 

tf.add_to_collection相反,创建一组操作不在计算图中,但只在 python 脚本中。

tf.add_to_collection('coll', a) 
tf.add_to_collection('coll', b) 

您可以通过查看 op 的描述来了解这一点和 `tf.get_collection('coll'):

  • 操作:<tf.Operation 'group_deps' type=NoOp>
  • tf.get_collection:[<tf.Tensor 'Const:0' shape=() dtype=int32>, <tf.Tensor 'Const_1:0' shape=() dtype=int32>]

在您的示例中,使用 tf.group或 tf.add_to_collection + tf.get_collection是相同的:您只需要并行执行所有操作,因此 sess.run(op)和 sess.run(tf.get_collection('coll'))具有相同的行为。

但是在导出计算图的情况下(这只是一个让您了解可能情况的示例),您不能依赖 python 列表,因此您必须使用 tf.group