我需要为3个相同的神经网络(在架构上相同,而不是参数)执行以下任务-A,B,C
将C的权重更新为A和B的函数
火车C
根据新的(训练后的C权重)更新A,B的权重
更新遮罩数组的值
我对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
这没有给出预期的结果,表明操作未按我希望的顺序运行。如何获得理想的结果?任何建议都将受到欢迎。
答案 0 :(得分:0)
由于您尚未共享所有代码,因此很难思考到底可能出了什么问题,但是您可能需要检查以下几件事。
确保您的genRandMat函数实际上在每次迭代后都生成一个新的随机矩阵。请记住,如果它使用numpy或其他API而不是Tensorflow,则它可能无法达到您的期望。如果您确实在使用其他API来实现此目的,请尝试查看tf.Variable.load()。\
要顺序运行操作,您可能会考虑研究tensorflow的Eager Execution模式,尽管我本人对此经验有限,所以我不建议您这样做。
希望这会有所帮助。