使用keras的自动编码器,具有固定重量

使用keras的自动编码器,具有固定重量,keras,fixed,autoencoder,Keras,Fixed,Autoencoder,大家早上好,我不知道这对keras来说是否可行。我想创建一个自动编码器,其中一些权重始终为0。假设我有3个输入到一个2节点的密集层,我想释放的不是一个层,而是输入1和节点2之间的权重。你能给我举个例子吗?谢谢 编辑。谢谢Marco,所以我用这种方式制作了我的自动编码器 autoencoder = Sequential() Atac=Atac.iloc[range(2),range(2)] autoencoder.add(Dense(minFeature, activation='relu',na

大家早上好,我不知道这对keras来说是否可行。我想创建一个自动编码器,其中一些权重始终为0。假设我有3个输入到一个2节点的密集层,我想释放的不是一个层,而是输入1和节点2之间的权重。你能给我举个例子吗?谢谢

编辑。谢谢Marco,所以我用这种方式制作了我的自动编码器

autoencoder = Sequential()
Atac=Atac.iloc[range(2),range(2)]
autoencoder.add(Dense(minFeature, activation='relu',name="encoder4",input_shape=(Atac.shape[1],),kernel_constraint=prova()))
autoencoder.add(Dense(Atac.shape[1], activation='relu',name="decoder4",kernel_constraint=prova()))

autoencoder.compile(optimizer=keras.optimizers.Adam( lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0), loss='mean_squared_error')
autoencoder.summary()

autoencoder_train = autoencoder.fit(Atac, Atac, batch_size=256, epochs=1,validation_data=(Atac, Atac))
和im使用以下内核约束函数:

class prova(constraints.Constraint):
    def __call__(self, w):
        #return tf.math.multiply(w,tf.constant(np.asarray(relationMatrix),tf.float32))
        return tf.math.multiply(w,tf.transpose(tf.constant(np.asarray(relationMatrix),tf.float32)))
但这是疯狂的,如果我使用第一个multilpy,我有以下错误:

ValueError: Dimensions must be equal, but are 795 and 2 for 'training_63/Adam/Mul_17' (op: 'Mul') with input shapes: [795,2], [2,795].
如果我用第二个乘法

ValueError: Dimensions must be equal, but are 2 and 795 for 'training_64/Adam/Mul_6' (op: 'Mul') with input shapes: [2,795], [795,2].

我认为您必须编写一个自定义约束(),然后将其传递给密集层的
内核约束
参数。我认为您必须编写一个自定义约束(),然后将其传递给密集层的
内核约束
参数。