2017-10-04 275 views
0

我想要在將kera傳遞給另一圖層之前執行向量矩陣乘法的keras中的lambda層。矩陣是固定的(我不想學習它)。下面的代碼:用於矩陣向量乘法的Keras Lambda層

model.add(Dropout(0.1))  
model.add(Lambda(lambda x: x.dot(A))) 
model.add(Dense(output_shape, activation='softmax')) 
model.compile(<stuff here>)} 

A是固定的矩陣,我想做x.dot(A)

,當我運行它,我得到以下錯誤:

'Tensor' object has no attribute 'dot'

當我用matmul替換點(我正在使用tensorflow後端)時出現同樣的錯誤

最後,當我用lambda層替換

model.add(Lambda(lambda x: x*A))

我得到下面的錯誤:

model.add(Lambda(lambda x: x*G))

model.add(Dense(output_shape, activation='softmax'))

AttributeError: 'tuple' object has no attribute '_dims'

我是新來Keras所以任何幫助將不勝感激。謝謝

回答

0

創建拉姆達功能:

import keras.backend as K 
import numpy as np 

numpyA = np.array(define A correctly here, with 2 dimensions) 

def multA(x): 
    A = K.variable(numpyA) 

    return K.dot(x,A) 

model.add(Lambda(multA)) 
1

我認爲你可以添加一個Dense圖層,初始權重爲矩陣A,並設置參數trainable=Falseuse_bias=False。該層將相當於固定矩陣乘法。

model.add(Dense(A.shape[1], trainable=False, weights=[A], use_bias=False)) 
+0

這似乎是合理的,我嘗試過,但得到如下:層重量形狀(1,265)所提供的重量形狀(265不兼容, 265)。 265是A.shape [1](這是一個方形矩陣) – NSR

+0

你能提供'model.summary()'嗎?看起來之前的圖層的輸出尺寸等於1. –

+0

如果前一圖層的輸出形狀是'(None,265,1)',那麼我認爲您可以通過添加一個'Flatten'圖層來移除額外的座標軸。 –