当我有一些可训练的参数时,说layer.trainable_weights
。我想在进行其他操作之前对这些权重进行排序,我可以这样做吗?我可以使用
import tensorflow as tf
p = layer.trainable_weights
p = tf.sort(p)
或者Keras中有什么特别的方法吗?
我是Keras和TensorFlow的新手。非常感谢有人可以回答我的问题,谢谢!
编辑: 对于“其他操作”,我想将这些排序的可训练权重输入另一个神经网络,但是该神经网络是固定的(不可训练)。所以我想做的是像
import tensorflow as tf
p = model.layer[0].trainable_weights
p = tf.sort(p)
another_model.trainable = False
x = another_model(p)
# x is involved in the loss function of the original model
希望这很清楚,希望任何人都能帮助我!
(而且,我可以只使用x=another_model.predict(p)
而不是上面的x=another_model(p)
吗?)
答案 0 :(得分:0)
当然可以。由于您尚未清楚说明这些下游操作是什么,因此很难回答您的问题。
如果您只想做一些事情来监视培训过程,例如监视自定义指标以测量感兴趣的权重矩阵的累积分布函数,请随时使用tf.sort
(在对它进行排序之前,可以使用K.stop_gradient(W)
,以进一步确保没有梯度从任何下游流回处理)。
如果您要执行监控以外的其他操作,例如计算自定义正则项以在培训优化中发挥作用,您应该重新考虑如何高效,有效地实施这一部分。但是直接使用tf.sort
并没有帮助!为什么?由于此功能未通过反向传播实现,(您可能需要仔细检查以查看最新版本是否支持此功能)