Keras:可训练的占位符或每个样本的图层权重

时间:2018-10-20 20:34:16

标签: keras

我正在使用Keras。我的目标是建立一个自动编码器,该编码器可以学习其他每个样本的潜在代码。这是一些数学解释我的问题的方法:让zᵢ = e(xᵢ;a)为编码器,yᵢ = d(zᵢ;b)为解码器,其中xᵢ为输入,yᵢ为输出,{{1 }}是潜在代码,zᵢa分别是编码器和解码器的参数。正常的自动编码器训练任务是使权重bL(.,.),即a的损失b最小。

我想在潜在维度中添加一个附加的每个样本参数min_{a,b} L(xᵢ, d(e(xᵢ;a);b)) ∀i,也应将其最小化,即kᵢ。但是,min_{a,b,kᵢ} L(xᵢ, d(e(xᵢ;a)+kᵢ);b)a是在b的所有样本中共享的常规模型参数,但是xᵢ应该是每个样本的参数或权重。

我想在喀拉拉邦实现这种模式。最简单的方法是使用功能性API并将kᵢ指定为Input(占位符)。我的主要问题是此输入/占位符不可训练。

这是一个最小的示例程序:

kᵢ

正如评论所说,K不会被训练。有没有一种方法可以实现我想要的目标,即使import numpy as np import keras import keras.layers as L from keras.models import Model x = L.Input([2]) enc = L.Dense(1, activation='tanh') dec = L.Dense(2, activation='tanh') k = L.Input([1]) z = enc(x) y = dec(L.add([z,k])) m = Model([x,k],y) X = np.random.randn(10,2) # my samples K = np.random.randn(10,1) # the latent code that should be learned m.compile('sgd', 'mse') m.fit([X,K],X) # K won't update, obviously 可训练但将数据保留在模型之外?我知道可以使用低级后端API来完成此操作。但这要求我从根本上重新实现所有高级工具(优化器,图层等),这是我要使用keras的主要原因。

0 个答案:

没有答案