【问题标题】:Can't understand: ValueError: Graph disconnected: cannot obtain value for tensor Tensor无法理解:ValueError: Graph disconnected: cannot get value for tensor Tensor
【发布时间】:2020-09-06 13:59:21
【问题描述】:

我写了一个类似于这段代码的架构: 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, visual_features, et_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: []

知道为什么吗?

【问题讨论】:

    标签: python tensorflow keras keras-layer tf.keras


    【解决方案1】:

    在构建模型时注意正确定义输入层

    他们是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, 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_encoding_input, visual_features_input, et_features_input],
      outputs=[group_pred]
      # outputs=[group_pred, score_pred],
    )
    
    hybrid_model.summary()
    

    【讨论】: