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

如何初始化API模型中使用的keras张量,api,initialization,keras,tensor,Api,Initialization,Keras,Tensor,我试图实现一个记忆增强型神经网络,其中记忆和读/写/使用权重向量根据其先前值的组合进行更新。这些重量不同于使用fit()函数自动更新的层间经典重量矩阵!我的问题是:如何正确地将这些权重初始化为keras张量,并在模型中使用它们?我用下面的简化示例更好地解释了它 我的API模型类似于: input = Input(shape=(5,6)) controller = LSTM(20, activation='tanh',stateful=False, return_sequences=True)(i

我试图实现一个记忆增强型神经网络,其中记忆和读/写/使用权重向量根据其先前值的组合进行更新。这些重量不同于使用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)`
但是,与(entron)中所述类似,这些命令不会返回包含所有所需元数据的keras张量,因此会返回以下错误:

AttributeError:“非类型”对象没有“入站节点”属性

我还想在每次迭代中使用旧的M、w_r和w_作为进一步的输入,并类似地在输出中获得相同的变量以完成循环。但这意味着我必须使用fit()函数在线训练只有目标作为最终输出的模型(模型1),并使用predict()函数对具有所有辅助输出的模型(模型2)进行预测,以获得在下一次迭代中使用的变量。我还必须使用get_weights()和set_weights()将weights矩阵从模型1传递到模型2。正如你所看到的,它变得有点凌乱,太慢了

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


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

试试
w\u w=add([w\u,w\u r])
谢谢你的建议,但它似乎不起作用。你想让它们成为训练期间更新的权重吗?必须创建自定义图层。或者它们只是常数。有趣。是的,这个想法是,在学习如何与记忆交互的每次迭代中,权重都会发生变化。但我不认为他们保持不变。。。不管怎样,你到底有什么建议?要将我用于更新的Add()层替换为一个自定义层,该自定义层接收加法作为输入,并在未定义加法的情况下对其进行初始化?或者自定义层接受K.variable()对象作为输入?
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`