相关疑难解决方法(0)

在NN中指定连接(在keras中)

我正在使用keras和tensorflow 1.4。

我想明确指定两层之间连接的神经元。因此,每当第一层中的神经元i与第二层中的神经元j连接且在其他位置为零时,我就有一个矩阵A。

我的第一个尝试是创建一个带有内核的自定义层,该内核的大小与A相同,其中包含不可训练的零,其中A包含零,可训练的权重,其中A包含一个零。这样,所需的输出将是一个简单的点积。不幸的是,我没有设法弄清楚如何实现部分可训练和部分不可训练的内核。

有什么建议么?

(用很多神经元通过手工连接建立功能模型可能是一种解决方法,但是某种程度上是“丑陋”的解决方案)

keras tensorflow keras-layer

2
推荐指数
1
解决办法
1185
查看次数

具有对角权重矩阵的自定义层

我想实现一个带有稀疏输入层的分类器。我的数据有大约 60 个维度,我想检查特征重要性。为此,我希望第一层具有对角权重矩阵(我想对其应用 L1 核正则化器),所有非对角线都应该是不可训练的零。因此,每个输入通道一对一连接,密集层将混合输入变量。我检查了在 NN 中指定连接(在 keras 中)层之间的自定义连接 Keras。后一个我不能使用,因为 Lambda 层不引入可训练的权重。

然而,这样的事情不会影响实际的权重矩阵:

class MyLayer(Layer):
def __init__(self, output_dim,connection, **kwargs):
    self.output_dim = output_dim
    self.connection=connection
    super(MyLayer, self).__init__(**kwargs)

def build(self, input_shape):
    # Create a trainable weight variable for this layer.
    self.kernel = self.add_weight(name='kernel', 
                                  shape=(input_shape[1], self.output_dim),
                                  initializer='uniform',
                                  trainable=True)
    self.kernel=tf.linalg.tensor_diag_part(self.kernel)
    self.kernel=tf.linalg.tensor_diag(self.kernel)
    super(MyLayer, self).build(input_shape)  # Be sure to call this at the end

def call(self, x):
    return K.dot(x, self.kernel)

def compute_output_shape(self, input_shape):
    return (input_shape[0], self.output_dim)
Run Code Online (Sandbox Code Playgroud)

当我训练模型并打印权重时,我没有得到第一层的对角矩阵。

我究竟做错了什么?

python keras tensorflow keras-layer

1
推荐指数
1
解决办法
1426
查看次数

标签 统计

keras ×2

keras-layer ×2

tensorflow ×2

python ×1