用于矩阵向量乘法的Keras Lambda层

时间:2017-10-04 17:40:01

标签: neural-network deep-learning keras

我正在尝试在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的新手,所以任何帮助都将受到赞赏。感谢

2 个答案:

答案 0 :(得分:2)

我认为您可以添加Dense图层,初始权重为矩阵A,并设置参数trainable=Falseuse_bias=False。该层将等同于固定矩阵乘法。

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

答案 1 :(得分:0)

为lambda创建一个函数:

$data = array();
$i = 0.94;
$j = 35;
while($i > 0.50){
    $data[(string)$i] = $j;
    $i -= 0.01;
    $j++;
}

var_dump($data);