![](/img/trans.png)
[英]Keras - TypeError: Output tensors to a Model must be Keras tensors - while modelling multiple input , multiple output network
[英]Multiply multiple tensors pairwise keras
我想问问是否可以将两个张量成对相乘。 例如,我有LSTM层的张量输出,
lstm=LSTM(128,return_sequences=True)(input)
output=some_function()(lstm)
some_function()
应该做h1*h2,h2*h3....hn-1*hn
我发现如何取两个Keras张量的平方差? 几乎没有什么帮助,但是由于我将拥有可训练的参数,因此我将必须自己制作图层。 另外, some_function
层会自动解释输入尺寸,因为它会是hn-1
我对如何处理call()
感到困惑
一种可能性是先进行两次修剪操作,然后再进行一次乘法。 这可以解决问题!
import numpy as np
from keras.layers import Input, Lambda, Multiply, LSTM
from keras.models import Model
from keras.layers import add
batch_size = 1
nb_timesteps = 4
nb_features = 2
hidden_layer = 2
in1 = Input(shape=(nb_timesteps,nb_features))
lstm=LSTM(hidden_layer,return_sequences=True)(in1)
# Make two slices
factor1 = Lambda(lambda x: x[:, 0:nb_timesteps-1, :])(lstm)
factor2 = Lambda(lambda x: x[:, 1:nb_timesteps, :])(lstm)
# Multiply them
out = Multiply()([factor1,factor2])
# set the two outputs so we can see both results
model = Model(in1,[out,lstm])
a = np.arange(batch_size*nb_timesteps*nb_features).reshape([batch_size,nb_timesteps,nb_features])
prediction = model.predict(a)
out_, lstm_ = prediction[0], prediction[1]
for x in range(nb_timesteps-1):
assert all( out_[0,x] == lstm_[0,x]*lstm_[0,x+1])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.