每次迭代后,代码都会变慢,并且无法提供预期的输出

时间:2019-06-09 13:50:49

标签: tensorflow

我需要为3个相同的神经网络(在架构上相同,而不是参数)执行以下任务-A,B,C

  1. 将C的权重更新为A和B的函数

  2. 火车C

  3. 根据新的(训练后的C权重)更新A,B的权重

  4. 更新遮罩数组的值

我对Tensorflow还是陌生的,无法弄清楚如何顺序执行这些操作。这是我想出的代码

#Step 3
ass=(W1a.assign((W1c* trans_arr1)+(W1a*(tf.ones([784, L]-trans_arr1)))))

#Step 1
a1=W1c.assign((W1a*trans_arr1)+(W1b*(tf.ones([784, L])-trans_arr1))))

#Step 4
trans_arr1 = genRandMat(784,L,ptrans)

#Loop
for i in range((400)+1):

    #Train C

    training_step(i, i % 100 == 0, i % 20 == 0)

    # Update weights of A,B based on new weights of C

    sess.run([ass])

    #Update masking array

    sess.run([trans_arr1])

    #update C based on A,B
    sess.run([a1])

注意-trans_arr是具有1和0的掩蔽矩阵,其中每个位置1的概率为ptrans

这没有给出预期的结果,表明操作未按我希望的顺序运行。如何获得理想的结果?任何建议都将受到欢迎。

1 个答案:

答案 0 :(得分:0)

由于您尚未共享所有代码,因此很难思考到底可能出了什么问题,但是您可能需要检查以下几件事。

  1. 确保您的genRandMat函数实际上在每次迭代后都生成一个新的随机矩阵。请记住,如果它使用numpy或其他API而不是Tensorflow,则它可能无法达到您的期望。如果您确实在使用其他API来实现此目的,请尝试查看tf.Variable.load()。\

  2. 要顺序运行操作,您可能会考虑研究tensorflow的Eager Execution模式,尽管我本人对此经验有限,所以我不建议您这样做。

希望这会有所帮助。