【问题标题】:Graph disconnected: cannot obtain value for tensor Tensor Input Keras Python图表断开:无法获取张量张量输入 Keras Python 的值
【发布时间】:2019-01-02 12:08:53
【问题描述】:

我有这个代码:

# Declare the layers
inp1 = Input(shape=input_shape, name="input1")
inp2 = Input(shape=input_shape, name="input2")


# 128 -> 64
conv1_inp1 = Conv2D(start_neurons * 1, 3, activation="relu", padding="same")(inp1)
conv1_inp2 = Conv2D(start_neurons * 1, 3, activation="relu", padding="same")(inp2)
conv1 = Concatenate()([conv1_inp1, conv1_inp2])
conv1 = Conv2D(start_neurons * 1, 3, activation="relu", padding="same")(conv1)
conv1 = MaxPooling2D((2, 2))(conv1)
conv1 = Dropout(0.25)(conv1)

# 64 -> 32
conv2 = Conv2D(start_neurons * 2, (3, 3), activation="relu", padding="same")(conv1)
conv2 = Conv2D(start_neurons * 2, (3, 3), activation="relu", padding="same")(conv2)
pool2 = MaxPooling2D((2, 2))(conv2)
pool2 = Dropout(0.5)(pool2)

# 32 -> 16
conv3 = Conv2D(start_neurons * 4, (3, 3), activation="relu", padding="same")(pool2)
conv3 = Conv2D(start_neurons * 4, (3, 3), activation="relu", padding="same")(conv3)
pool3 = MaxPooling2D((2, 2))(conv3)
pool3 = Dropout(0.5)(pool3)

# 16 -> 8
conv4 = Conv2D(start_neurons * 8, (3, 3), activation="relu", padding="same")(pool3)
conv4 = Conv2D(start_neurons * 8, (3, 3), activation="relu", padding="same")(conv4)
pool4 = MaxPooling2D((2, 2))(conv4)
pool4 = Dropout(0.5)(pool4)

# Middle
convm = Conv2D(start_neurons * 16, (3, 3), activation="relu", padding="same")(pool4)
convm = Conv2D(start_neurons * 16, (3, 3), activation="relu", padding="same")(convm)

# 8 -> 16
deconv4 = Conv2DTranspose(start_neurons * 8, (3, 3), strides=(2, 2), padding="same")(convm)
uconv4 = Concatenate()([deconv4, conv4])
uconv4 = Dropout(0.5)(uconv4)
uconv4 = Conv2D(start_neurons * 8, (3, 3), activation="relu", padding="same")(uconv4)
uconv4 = Conv2D(start_neurons * 8, (3, 3), activation="relu", padding="same")(uconv4)

# 16 -> 32
deconv3 = Conv2DTranspose(start_neurons * 4, (3, 3), strides=(2, 2), padding="same")(uconv4)
uconv3 = Concatenate()([deconv3, conv3])
uconv3 = Dropout(0.5)(uconv3)
uconv3 = Conv2D(start_neurons * 4, (3, 3), activation="relu", padding="same")(uconv3)
uconv3 = Conv2D(start_neurons * 4, (3, 3), activation="relu", padding="same")(uconv3)

# 32 -> 64
deconv2 = Conv2DTranspose(start_neurons * 2, (3, 3), strides=(2, 2), padding="same")(uconv3)
uconv2 = Conv2D(start_neurons * 2, (3, 3), activation="relu", padding="same")(uconv2)
uconv2 = Conv2D(start_neurons * 2, (3, 3), activation="relu", padding="same")(uconv2)

# 64 -> 128
deconv1 = Conv2DTranspose(start_neurons * 1, (3, 3), strides=(2, 2), padding="same")(uconv2)
uconv1 = Conv2D(start_neurons * 1, (3, 3), activation="relu", padding="same")(deconv1)
uconv1 = Conv2D(start_neurons * 1, (3, 3), activation="relu", padding="same")(uconv1)

uncov1 = Dropout(0.5)(uconv1)
output_layer = Conv2D(1, (1,1), padding="same", activation="sigmoid")(uconv1)



# Declare the model and add the layers
model = Model(inputs = [inp1, inp2], outputs = output_layer)

model.summary()
model.compile(optimizer='adam',loss='binary_crossentropy')

它会产生这个错误:

Graph disconnected: cannot obtain value for tensor Tensor("input_28:0", shape=(?, 128, 128, 1), dtype=float32) at layer "input_28". The following previous layers were accessed without issue: []

输入具有相同的形状,在某些论坛中,他们说问题出在输入来自 2 个不同的来源,因此破坏了您之前的链接。

我真的不知道如何解决这个问题。

谁能帮帮我?

提前致谢。

【问题讨论】:

    标签: python input keras


    【解决方案1】:

    这是您的图表断开连接的地方(uconv2 在您调用它时未定义):

    # 32 -> 64
    deconv2 = Conv2DTranspose(start_neurons * 2, (3, 3), strides=(2, 2), padding="same")(uconv3)
    uconv2 = Conv2D(start_neurons * 2, (3, 3), activation="relu", padding="same")(uconv2)
    

    【讨论】:

    • 你也可以得到你的模型的图表:from keras.utils import plot_model plot_model(model, to_file='model.png')keras.io/visualization
    • @Jacopofar 我认为你不能因为Graph disconnected 是在Model(...) 上提出的,所以你没有对plot_model 的模型的引用
    【解决方案2】:

    为我解决了这个图表错误的原因是改变了这个:

    x_in = Input(shape=(10,), name="InputLayer")
    _ = order2_embs_model(x_in)
    ...
    model = Model(inputs=x_in, outputs=Y, name='DeepFFM') 
    

    到这里:

    model = Model(inputs=order2_embs_model.inputs, outputs=Y, name='DeepFFM') 
    

    【讨论】:

    • 输入可能会导致此错误。如果您遇到此“图表断开连接”错误,请仔细检查以确保您将所需的所有输入都包含在模型中。
    猜你喜欢
    • 1970-01-01
    • 2021-09-26
    • 2019-06-06
    • 1970-01-01
    • 2020-05-13
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多