2016-08-17 43 views
0

我建立了一個自定義的Keras圖層,它有兩種類型的權重,可學習和不可學習。在build(self, input_shape)ValueError:無值不支持

我添加兩個權重矩陣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是什麼效果,是否有更好的方法來實現相同?

回答

1

您是否試圖獲得由x表示的索引的權重值?

Tensorflow象徵性地存儲變量;他們直到運行時纔會在會話圖上評估它們時才真正採用值。因此,爲了獲得權重,您必須先評估它們才能加載它們的值。

+0

謝謝你的回答。沒有更好的方法來加載值,而不是調用'eval'?例如,可訓練權重矩陣可以在沒有調用的情況下使用,但不可訓練權重矩陣不是(請參閱我的小調整)。 – Alex

+0

我不確定。它必須與Wt和Wu初始化的方式有關,這些將在代碼中的其他地方進行。 –