Python 如何使用张量代替变量来计算LSTM单元中的权重和偏差

Python 如何使用张量代替变量来计算LSTM单元中的权重和偏差,python,tensorflow,Python,Tensorflow,我需要创建LSTM单元,但不是为网络中的权重和偏差创建新变量,而是LSTM单元中的权重和偏差来自另一个网络的输出,即,我需要能够将张量(而不是变量,例如使用重用)传递给LSTM单元,以用于权重和偏差。在Tensorflow中是否有这样做的方法?请注意,我的目标不是定义LSTM,而是了解在当前实现中是否有传递张量的方法。Keras+TensorFlow Keras现在默认运行在TensorFlow之上,并且具有可以在您的模型中调用的特性。这将自动在层之间以张量形式传递权重 >>>

我需要创建LSTM单元,但不是为网络中的权重和偏差创建新变量,而是LSTM单元中的权重和偏差来自另一个网络的输出,即,我需要能够将张量(而不是变量,例如使用重用)传递给LSTM单元,以用于权重和偏差。在Tensorflow中是否有这样做的方法?请注意,我的目标不是定义LSTM,而是了解在当前实现中是否有传递张量的方法。

Keras+TensorFlow Keras现在默认运行在TensorFlow之上,并且具有可以在您的模型中调用的特性。这将自动在层之间以张量形式传递权重

>>>IN>>>
nb_words  = min(MAX_NB_WORDS, len(word_index))
lstm_out = MAX_SEQUENCE_LENGTH

model = Sequential()
model.add(Embedding(nb_words,EMBEDDING_DIM,input_length=MAX_SEQUENCE_LENGTH))
model.add(LSTM(50))
#model.add(Attention(MAX_SEQUENCE_LENGTH))
model.add(Dense(3, activation = 'softmax'))
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])
model.summary()

>>>OUT>>>
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
embedding_1 (Embedding)      (None, 100, 160)          480000    
_________________________________________________________________
lstm_1 (LSTM)                (None, 50)                42200     
_________________________________________________________________
dense_1 (Dense)              (None, 3)                 153       
=================================================================
Total params: 522,353
Trainable params: 522,353
Non-trainable params: 0
_________________________________________________________________

一个糟糕的解决方法是传递
trainable=False
,然后将第一个网络的输出值分配给权重,尽管这远不是一个方便的解决方案。或者在创建图形后重新布线,也相当复杂。可能会重复查看,看起来确实没有什么办法。创建权重并实现LSTM状态计算,因此看起来你不能没有另一个。我不会说这是另一个问题的重复,因为你真的只想要一个常规LSTM,但有不同的权重(这一个原则上不是Keras),但可能是唯一的“好”这样做的方法是实现你自己的子类,非常类似于(事实上你可以考虑子类,而不是变量创建)。(FWW,我认为这是API中的一个错误……LSTM数学定义及其作为可训练层的使用应该分开,以同样的方式存在和)。不幸的是,我认为这并不能解决问题。如您所见,您的模型中的lstm_1有42200个参数。问题的目标是在LSTM层中没有任何可训练的参数,而是使用另一个网络的输出来代替参数。