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