我有一个一般性问题。
我正在开发新的层以合并到自动编码器中。更具体地说,该层类似于KCompetitive
上的here类。我想要的是我需要将这一层的输出保存在一个变量中,我们将其称为previous_mat_values
,然后在下一个时期将其传递到同一层。
换句话说,我希望能够将这一层epoch 1
的输出保存在一个变量中,然后在epoch 2
中,再次使用相同的矩阵。
所以问题出现了,在第一个时期该矩阵的值是多少,因为它还没有该层的输出。我们可以使用权重矩阵的相同形状初始化一个数组,但是使用0
的值,我会这样做。
previous_mat_values = tf.zeros_like(weight_tensor)
因此步骤如下:
在第一个时期,previous_mat_values
和weight_mat
将传递到图层
1.a在该层函数的末尾,我们将其最终值称为modified_weight_mat
将保存到previous_mat_values
中
previous_mat_values = modified_weight_mat
在第二个时期,previous_mat_values
和weight_mat
将传递到图层,但是,previous_mat_values
的值保存在第一个时期。
通过weight_mat
并进行与此相关的操作,我没有任何问题。这里唯一的问题是我们如何保存每个时期的previous_mat_values
值并将其传递给下一个时期。
我曾想在class of that layer
中创建一个全局张量变量,并将其初始化为零,但我认为将前一个时期的值保留到第二个时期不会有帮助。
您知道我该如何实施吗?
如果我的解释不清楚,请让我知道。
您可以按预期使用变量在历元之间保留:
previous_mat_values = tf.Variable(tf.zeros_like(weight_tensor), trainable=False)
assign_op = previous_mat_values.assign(modified_weight_mat)
然后确保对sess.run的调用中包括了assign_op:
out, _ = sess.run([output, assign_op])