张量流复制整个图形

时间:2018-01-24 00:55:07

标签: python tensorflow

我正在尝试创建一个相当通用的遗传算法实现I' TensorFlow。我有一个缓慢的实现,并试图提高其速度。我将提供一个非常简单的示例,说明程序变慢的地方,并欢迎提高当前实现速度的建议。

让我们说我们创建以下内容:

W  = tf.Variable(tf.convert_to_tensor(Warr, dtype=tf.float32))
X  = tf.placeholder(dtype=tf.float32, shape=(3, None))
y  = tf.placeholder(dtype=tf.float32, shape=(None) )

我们希望找到条件W

Warr = np.array([[0.1, 0, 0]])
Xarr = np.random.random((3, 100))
yarr = np.dot(Warr, Xarr)

一个天真的实现(就像我创建的那样)是这样的:

1为此实现创建了一个成本函数:

yHat  = tf.matmul(W, X)
costFunction = tf.reduce_mean( tf.sqrt((y - yHat)*(y - yHat)) )

请注意,成本函数可能是任意复杂的,并且不知道 apriori 。因此,它将被传递到一个类中。请注意,其余代码是类中的摘录,但主要思想很容易理解:

2生成一个人口(在一个班级内)。

self.population   = []
for i in tqdm(range(self.GAconfig['numChildren'])):
    temp = []
    for j, v in enumerate(locVars):
        v = (v + (np.random.random( v.shape ) - 0.5) * 2)
        v = tf.Variable(tf.convert_to_tensor(v, dtype=tf.float32))
        temp.append(v)
    self.population.append( temp )

找到这个人口的成本函数是一项相当艰巨的任务。首先将总体中的权重复制到原始权重张量中,然后计算原始成本函数:

for ps in self.population:
    for i, v in enumerate(self.variables): 
        sess.run(tf.assign( self.variables[i], ps[i] ))

    result = sess.run(self.costFunction, feed_dict={
                            self.X : X, self.y : y
                            }) 

这种实施显然很慢。一种可能的方法是生成一组成本函数张量而不是权重变量,它们都可以一次更新。

然而,这就是我不确定什么是好的实施"将是可以提高当前实施的速度。蚂蚁帮助将不胜感激......

注意:完整实施可在此处获取:

https://oauth.io

  • 现在还处于初期阶段,因此目前的代码非常糟糕。
  • 可以在文件src/lib/GA/GA.py
  • 中找到GA功能的实现
  • GA
  • 中找到了交叉
  • 这是从文件src/moduleGA/moduleGA.py
  • 中调用的

1 个答案:

答案 0 :(得分:0)

您是否尝试过下一个功能?

copy_variable_to_graph
copy_op_to_graph
get_copied_op

source