Python 为什么Keras是;绘图“U模型”;为双嵌套模型绘制不正确的图形

Python 为什么Keras是;绘图“U模型”;为双嵌套模型绘制不正确的图形,python,tensorflow,keras,tensorflow2.0,Python,Tensorflow,Keras,Tensorflow2.0,当我从两个嵌套模型(编码器、解码器)创建一个模型时,plot\u model会正确地绘制它们。但是,当我进一步将model_AE和model_HR嵌套到最终的end2end model_e2e中时,绘制的模型是不正确的。箭头从模型_AE的输入到模型_HR的输入,但它应该从模型_AE的输出到模型_HR的输入。我已经附上了下面的代码来复制它以及生成的图形。我知道plot_model()还有其他未解决的问题,但是我想确定我是否在这里做了一些错误的事情。在Mac(tensorflow 2.0)和Wind

当我从两个嵌套模型(编码器、解码器)创建一个模型时,plot\u model会正确地绘制它们。但是,当我进一步将model_AE和model_HR嵌套到最终的end2end model_e2e中时,绘制的模型是不正确的。箭头从模型_AE的输入到模型_HR的输入,但它应该从模型_AE的输出到模型_HR的输入。我已经附上了下面的代码来复制它以及生成的图形。我知道plot_model()还有其他未解决的问题,但是我想确定我是否在这里做了一些错误的事情。在Mac(tensorflow 2.0)和Windows(tensorflow 2.1)上试用Anaconda。感谢您的帮助。谢谢

更新1

我验证了只有在双重嵌套(嵌套嵌套模型)时才会发生问题。为此,我尝试在没有嵌套(编码器、解码器)模型的情况下创建模型,并且plot\u模型工作正常。到目前为止,我认为这是我在上面同一期GitHub中作为评论添加的bug

import tensorflow as tf
from tensorflow.keras import layers
from tensorflow import keras

HR_win_len=200
in_shape=(400,)
latent_shape=(16,)

#Simple AE model
encoder_in = layers.Input(shape=in_shape,name="encoder_in")
x = layers.Dense(256,activation='relu')(encoder_in)
encoder_out = layers.Dense(latent_shape[0],activation='relu')(x)
encoder = keras.Model(encoder_in, encoder_out, name="encoder")

decoder_in = layers.Input(shape=latent_shape,name="decoder_in")
x = layers.Dense(256,activation='relu')(decoder_in)
decoder_out = layers.Dense(in_shape[0])(x)
decoder = keras.Model(decoder_in, decoder_out, name="decoder")

#Connect encoder and decoder and create model_AE
AE_in = keras.Input(shape=in_shape, name="AE_in")
sig_hat = decoder(encoder(AE_in))
model_AE = keras.Model(AE_in, sig_hat, name="AE")

#Create model_HR
expand_dims = layers.Lambda(lambda x: tf.expand_dims(x,axis=-1), 
                                name='expand_dims')
rnn = layers.GRU(64, return_sequences=True, return_state=True)
sig_in = layers.Input(shape=in_shape)
x = expand_dims(sig_in)
_, final_state=rnn(x[:,:HR_win_len,:]) #warm-up RNN
rnn_out, _ = rnn(x[:,HR_win_len:,:],initial_state=final_state)
HR_hat=layers.Conv1D(filters=1,kernel_size=1, strides=1,padding='same',
                     activation=None,name='Conv_{}'.format(1))(rnn_out)
HR_hat=layers.Flatten()(HR_hat)
model_HR = keras.Model(sig_in, HR_hat, name="HR")

#Connect model_AE and model_HR and create model_e2e
e2e_in = keras.Input(shape=in_shape, name="e2e_in")
e2e_out=model_HR(model_AE(e2e_in))
model_e2e = keras.Model(e2e_in, e2e_out, name="e2e")

tf.keras.utils.plot_model(model_e2e,to_file='e2e.png', 
dpi=200, show_shapes=True, show_layer_names=True, expand_nested=True)