How to solve problem of : Graph disconnected: cannot obtain value for tensor Tensor?

Issue

I am trying to code a deep neural network but I am getting the following error:

ValueError: Graph disconnected: cannot obtain value for tensor Tensor("input_1:0", shape=(None, 256, 256, 3), dtype=float32) at layer "conv2d". The following previous layers were accessed without issue: []

Traceback (most recent call last):
  File "C:/Users/sanjay.g/PycharmProjects/Rethinking_Net/MIMO_Model2.py", line 99, in <module>
    gan = Pix2Pix()
  File "C:/Users/sanjay.g/PycharmProjects/Rethinking_Net/MIMO_Model2.py", line 21, in __init__
    self.generator = self.build_generator
  File "C:/Users/sanjay.g/PycharmProjects/Rethinking_Net/MIMO_Model2.py", line 97, in build_generator
    return Model(b3, S3)
  File "C:\Users\sanjay.g\Miniconda3\envs\pythonProject1\lib\site-packages\tensorflow\python\keras\engine\training.py", line 242, in __new__
    return functional.Functional(*args, **kwargs)
  File "C:\Users\sanjay.g\Miniconda3\envs\pythonProject1\lib\site-packages\tensorflow\python\training\tracking\base.py", line 457, in _method_wrapper
    result = method(self, *args, **kwargs)
  File "C:\Users\sanjay.g\Miniconda3\envs\pythonProject1\lib\site-packages\tensorflow\python\keras\engine\functional.py", line 115, in __init__
    self._init_graph_network(inputs, outputs)
  File "C:\Users\sanjay.g\Miniconda3\envs\pythonProject1\lib\site-packages\tensorflow\python\training\tracking\base.py", line 457, in _method_wrapper
    result = method(self, *args, **kwargs)
  File "C:\Users\sanjay.g\Miniconda3\envs\pythonProject1\lib\site-packages\tensorflow\python\keras\engine\functional.py", line 190, in _init_graph_network
    nodes, nodes_by_depth, layers, _ = _map_graph_network(
  File "C:\Users\sanjay.g\Miniconda3\envs\pythonProject1\lib\site-packages\tensorflow\python\keras\engine\functional.py", line 926, in _map_graph_network
    raise ValueError('Graph disconnected: '
ValueError: Graph disconnected: cannot obtain value for tensor Tensor("input_1:0", shape=(None, 256, 256, 3), dtype=float32) at layer "conv2d". The following previous layers were accessed without issue: []

How may I solve the above error?

from __future__ import print_function, division

import tensorflow as tf
from tensorflow.keras.layers import Input, Dense, Reshape, Flatten, Dropout, Concatenate
from tensorflow.keras.layers import BatchNormalization, Activation, ZeroPadding2D
from tensorflow.keras.models import Sequential, Model
from data_loader import DataLoader
from tensorflow.keras.layers import Conv2D, LeakyReLU, UpSampling2D, ReLU, Conv2DTranspose

class Pix2Pix():
    def __init__(self):
        # Input shape
        self.img_rows = 256
        self.img_cols = 256
        self.channels = 3
        self.img_shape = (self.img_rows, self.img_cols, self.channels)
        self.dataset_name = 'nayadata'
        self.data_loader = DataLoader(dataset_name=self.dataset_name, img_res=(self.img_rows, self.img_cols))
        self.gf = 32
        self.df = 32
        self.generator = self.build_generator
        img_A = Input(shape=self.img_shape)
        img_B = Input(shape=self.img_shape)
        fake_A = self.generator(img_B)
        self.combined = Model(inputs=[img_A, img_B], outputs=[fake_A])

    @property
    def build_generator(self):
        def convolutionLayer(layer_input, filters, kernel_size=3, stride=1, relu=True, bn=False, tran=False, bias=True):
            if bn and bias:
                bias = False
            if tran:
                d = Conv2DTranspose(filters, kernel_size=kernel_size, strides=stride, padding='same', use_bias=bias)(layer_input)
            else:
                d = Conv2D(filters, kernel_size=kernel_size, strides=stride, padding='same', use_bias=bias)(layer_input)
            if relu:
                d = ReLU()(d)
            if bn:
                d = BatchNormalization()(d)
            return d

        def residualBlocks(layer_input, filters, kernel_size=3, stride=1):
            d = convolutionLayer(layer_input, filters, kernel_size=kernel_size, stride=stride, relu=True)
            d = convolutionLayer(d, filters, kernel_size=kernel_size, stride=stride, relu=False)
            return d

        def SCM_Block(layer_input, filters, kernel_size=3, stride=1, relu=True, bn=False, tran=False, bias=True):
            d = convolutionLayer(layer_input, filters, kernel_size=kernel_size, stride=stride, relu=True)
            d = convolutionLayer(d, filters, kernel_size=kernel_size - 2, stride=stride, relu=True)
            d = convolutionLayer(d, filters, kernel_size=kernel_size, stride=stride, relu=True)
            d = convolutionLayer(d, filters, kernel_size=kernel_size - 2, stride=stride, relu=True)
            return d

        def eBlock(layer_input, filters, num_res=8):
            e = layer_input
            for num1 in range(num_res):
                e = residualBlocks(e, filters, kernel_size=3, stride=1)
            return e

        def dBlock(layer_input, filters, num_res=8):
            d = layer_input
            for num1 in range(num_res):
                d = residualBlocks(d, filters, kernel_size=3, stride=1)
            return d

        # Input Image
        b1 = Input(shape=self.img_shape)
        b2 = tf.image.resize(b1, [128, 128])
        b3 = tf.image.resize(b2, [64, 64])
        print(b3.shape)
        # Downsampling
        d1 = eBlock(b1, self.gf)
        #print(d1.shape)
        d1 = Conv2D(self.gf, kernel_size=3, strides=2, padding='same')(d1)
        #print(d1.shape)
        b_scm1 = SCM_Block(b2, self.gf)
        #print(b_scm1.shape)
        d2 = Concatenate()([b_scm1, d1])
        #print(d2.shape)
        d2 = eBlock(d2, self.gf*2)
        #print(d2.shape)

        d2 = Conv2D(self.gf*2, kernel_size=3, strides=2, padding='same')(d2)
        #print(d2.shape)
        b_scm2 = SCM_Block(b3, self.gf*2)
        #print(b_scm2.shape)
        d3 = Concatenate()([b_scm2, d2])
        #print(d3.shape)
        d3 = eBlock(d3, self.gf * 4)
        print(d3.shape)

        # # Upsampling
        u3 = dBlock(d3, self.gf * 4)
        print(u3.shape)
        S3 = Conv2D(3, kernel_size=3, strides=1, padding='same')(u3)
        print(S3.shape)
        return Model(b3, S3)
if __name__ == '__main__':
    gan = Pix2Pix()
    gan.train(epochs=201, batch_size=4, sample_interval=50)

Solution

In the above example: Model(b3, S3) needs to replace by Model(b1, S3) as follows:

S3 = UpSampling2D(size=2)(S3)
S3 = UpSampling2D(size=2)(S3)
Model(b1, S3)

since the input image started with b1 but in the code, the intermediate image was used as Model(b3, S3) and that could be wrong.

Answered By – Sanjay Kumar Gupta Res Scholar

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published