我构建了一个自定义Keras图层,它有两种权重,可学习和不可学习。在build(self, input_shape)
我添加了两个权重矩阵Wt和Wu,如下所示。
self.trainable_weights = [self.Wt]
self.non_trainable_weights = [self.Wu]
self.non_trainable_weights[0].eval(K.get_session()) # why?
在call(self, x, mask=None)
我做:
gwt = K.gather(self.Wt, x)
gwu = K.gather(self.Wu, x)
return gwu + gwt
我的后端是TensorFlow。
只有当我为不可训练的权重调用eval
时,代码才有效。如果我将其删除,我会获得ValueError: None values not supported.
对于可训练的重量,我不必致电eval
。
无论eval
的影响如何,是否有更好的方法来实现同样的目标?
答案 0 :(得分:1)
您是否尝试在x?
指示的索引处获取权重值Tensorflow象征性地存储变量;在会话图上评估它们时,它们实际上不会在运行时获取值。因此,为了获得权重,您必须首先评估它们以加载它们的值。