如何初始化API模型中使用的keras张量

时间:2017-07-03 14:11:51

标签: api initialization keras tensor

我正在尝试实现一种内存增强神经网络,其中内存和读/写/使用权重向量根据其先前值的组合进行更新。这些重量不同于使用fit()函数自动更新的图层之间的经典权重矩阵!我的问题如下:如何正确地将这些权重初始化为keras张量并在模型中使用它们?我用以下简化的例子更好地解释它。

我的API模型类似于:

input = Input(shape=(5,6))
controller = LSTM(20, activation='tanh',stateful=False, return_sequences=True)(input)
write_key = Dense(4,activation='tanh')(controller)
read_key = Dense(4,activation='tanh')(controller)
w_w = Add()([w_u, w_r])                            #<---- UPDATE OF WRITE WEIGHTS
to_write = Dot()([w_w, write_key])
M = Add()([M,to_write])
cos_sim = Dot()([M,read_key])
w_r = Lambda(lambda x: softmax(x,axis=1))(cos_sim) #<---- UPDATE OF READ WEIGHTS
w_u = Add()([w_u,w_r,w_w])                         #<---- UPDATE OF USAGE WEIGHTS
retrieved_memory = Dot()([w_r,M])
controller_output = concatenate([controller,retrieved_memory])
final_output = Dense(6,activation='sigmoid')(controller_output)`

你可以看到,为了计算w_w ^ t,我必须首先定义w_r ^ {t-1}和w_u ^ {t-1}。因此,在开始时我必须为这些向量提供有效的初始化。最好的方法是什么?我想要的初始化是:

M = K.variable(numpy.zeros((10,4)))       # MEMORY
w_r = K.variable(numpy.zeros((1,10)))     # READ WEIGHTS
w_u = K.variable(numpy.zeros((1,10)))     # USAGE WEIGHTS`

但是,类似于#2486(entron)中所述的内容,这些命令不会返回包含所有必需元数据的keras张量,因此会返回以下错误:

  

AttributeError:'NoneType'对象没有属性'inbound_nodes'

我还想过在每次迭代时使用旧的M,w_r和w_u作为进一步的输入,并类似地输出相同的变量来完成循环。但这意味着我必须使用fit()函数在线训练只有目标作为最终输出的模型(模型1),并在模型上使用predict()函数,所有次级输出(模型2)到获取在下一次迭代中使用的变量。我还要使用get_weights()和set_weights()将Weigth矩阵从Model 1传递给Model 2。正如你所看到的,它变得有点混乱和太慢。

你对这个问题有什么建议吗?

P.S。请不要过多关注上面的API模型,因为它是完整版本的简化(几乎无意义)版本,我跳过了几个关键步骤。

0 个答案:

没有答案