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