问题描述
我写了一个类似于以下代码的架构: https://keras.io/guides/functional_api/#manipulate-complex-graph-topologie:
visual_features_input = keras.Input(
shape=(1000,),name="Visual-Input-FM",dtype='float')
et_features_input = keras.Input(
shape=(12,name="ET-input",dtype='float')
sentence_encoding_input = keras.Input(
shape=(784,name="Sentence-Input-Encoding",dtype='float')
et_features = layers.Dense(units = 12,name = 'et_features')(et_features_input)
visual_features = layers.Dense(units = 100,name = 'visual_features')(visual_features_input)
sentence_features = layers.Dense(units = 60,name = 'sentence_features')(sentence_encoding_input)
x = layers.concatenate([sentence_features,visual_features,et_features],name = 'hybrid-concatenation')
score_pred = layers.Dense(units = 1,name = "score")(x)
group_pred = layers.Dense(units = 5,name="group")(x)
# Instantiate an end-to-end model predicting both score and group
hybrid_model = keras.Model(
inputs=[sentence_features,outputs=[group_pred]
# outputs=[group_pred,score_pred],)
但是我得到了错误:
ValueError: Graph disconnected: cannot obtain value for tensor Tensor("Sentence-Input-Encoding_2:0",shape=(None,784),dtype=float32) at layer "sentence_features". The following prevIoUs layers were accessed without issue: []
知道为什么吗?
解决方法
在构建模型时,请注意正确定义输入层
它们是inputs=[sentence_encoding_input,visual_features_input,et_features_input]
而不是inputs=[sentence_features,visual_features,et_features]
这里是完整模型
from tensorflow import keras
from tensorflow.keras import layers
visual_features_input = keras.Input(
shape=(1000,),name="Visual-Input-FM",dtype='float')
et_features_input = keras.Input(
shape=(12,name="ET-input",dtype='float')
sentence_encoding_input = keras.Input(
shape=(784,name="Sentence-Input-Encoding",dtype='float')
et_features = layers.Dense(units = 12,name = 'et_features')(et_features_input)
visual_features = layers.Dense(units = 100,name = 'visual_features')(visual_features_input)
sentence_features = layers.Dense(units = 60,name = 'sentence_features')(sentence_encoding_input)
x = layers.concatenate([sentence_features,et_features],name = 'hybrid-concatenation')
score_pred = layers.Dense(units = 1,name = "score")(x)
group_pred = layers.Dense(units = 5,name="group")(x)
# Instantiate an end-to-end model predicting both score and group
hybrid_model = keras.Model(
inputs=[sentence_encoding_input,et_features_input],outputs=[group_pred]
# outputs=[group_pred,score_pred],)
hybrid_model.summary()