Ошибка: объект NoneType не имеет атрибута _inbound_nodes - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь создать инфраструктуру на экране для печати с раздувом.

enter image description here

Это мой код (я добавил все отпечатки для удобства чтения )

def get_vgg_model(input_size=72):

    vgg_model = VGG16(include_top=False, pooling='max', input_shape=(72, 72, 3))    
    x_vgg = Model(inputs=vgg_model.input, outputs=vgg_model.get_layer('block1_conv2').output)
    print(x_vgg.summary())
    x_vgg = tf.convert_to_tensor(x_vgg.outputs)
    x_vgg = x_vgg[0,:,:,:,:]


    return x_vgg


def create_mdoel(input_size = 72):


    first_input = Input(shape=(input_size, input_size, 3))
    # print('first_input shape {}'.format(first_input.get_shape()))

    x_vgg = get_vgg_model()
    print('\n\nx_vgg shape {}'.format(x_vgg.get_shape()))


    x = Conv2D(64, kernel_size=3, activation='relu',padding='same')(first_input)
    x = Conv2D(64, kernel_size=3, activation='relu', padding='same')(x)
    print('x shape {}'.format(x.get_shape()))

    x_concat = Concatenate(axis=3)([x, x_vgg])
    print('x_concat shape {}'.format(x_concat.get_shape()))

    x_concat = UpSampling2D()(x_concat)
    print('x_concat Upsample shape {}'.format(x_concat.get_shape()))


    output = Conv2D(3, kernel_size=1, activation='relu',padding='same')(x_concat)
    print('output shape {}'.format(output.get_shape()))

    x1 = UpSampling2D()(output)

    output_1 = Conv2D(3, kernel_size=1, activation='relu',padding='same')(x1)
    print('output_1 shape {}'.format(output_1.get_shape()))

    model = Model(inputs=first_input, outputs=[output, output_1]) 

    model.compile(optimizer=SGD(learning_rate=0.01, momentum=0.0), loss='mse')

    print (model.summary())

    return model

model = create_mdoel()

Это вывод (добавляя его, чтобы вы могли видеть размеры):

Layer (type)                 Output Shape              Param #   
=================================================================
input_260 (InputLayer)       (None, 72, 72, 3)         0         
_________________________________________________________________
block1_conv1 (Conv2D)        (None, 72, 72, 64)        1792      
_________________________________________________________________
block1_conv2 (Conv2D)        (None, 72, 72, 64)        36928     
=================================================================
Total params: 38,720
Trainable params: 38,720
Non-trainable params: 0
_________________________________________________________________
None


x_vgg shape (None, 72, 72, 64)
x shape (None, 72, 72, 64)
x_concat shape (None, 72, 72, 128)
x_concat Upsample shape (None, 144, 144, 128)
output shape (None, 144, 144, 3)
output_1 shape (None, 288, 288, 3)

И я получаю эту ошибку:

AttributeError                            Traceback (most recent call last)
<ipython-input-191-6c1096840864> in <module>()
     53     return model
     54 
---> 55 model = step_6(input_size=72)
     56 # print(model)
     57 # model_fit = model.fit(X_train, [y_mid_train, y_large], epochs=2)

8 frames
<ipython-input-191-6c1096840864> in step_6(input_size)
     45     print('output_1 shape {}'.format(output_1.get_shape()))
     46 
---> 47     model = Model(inputs=first_input, outputs=[output, output_1])
     48 
     49     model.compile(optimizer=SGD(learning_rate=0.01, momentum=0.0), loss='mse')

/usr/local/lib/python3.6/dist-packages/keras/legacy/interfaces.py in wrapper(*args, **kwargs)
     89                 warnings.warn('Update your `' + object_name + '` call to the ' +
     90                               'Keras 2 API: ' + signature, stacklevel=2)
---> 91             return func(*args, **kwargs)
     92         wrapper._original_function = func
     93         return wrapper

/usr/local/lib/python3.6/dist-packages/keras/engine/network.py in __init__(self, *args, **kwargs)
     92                 'inputs' in kwargs and 'outputs' in kwargs):
     93             # Graph network
---> 94             self._init_graph_network(*args, **kwargs)
     95         else:
     96             # Subclassed network

/usr/local/lib/python3.6/dist-packages/keras/engine/network.py in _init_graph_network(self, inputs, outputs, name, **kwargs)
    239         # Keep track of the network's nodes and layers.
    240         nodes, nodes_by_depth, layers, layers_by_depth = _map_graph_network(
--> 241             self.inputs, self.outputs)
    242         self._network_nodes = nodes
    243         self._nodes_by_depth = nodes_by_depth

/usr/local/lib/python3.6/dist-packages/keras/engine/network.py in _map_graph_network(inputs, outputs)
   1432                   layer=layer,
   1433                   node_index=node_index,
-> 1434                   tensor_index=tensor_index)
   1435 
   1436     for node in reversed(nodes_in_decreasing_depth):

/usr/local/lib/python3.6/dist-packages/keras/engine/network.py in build_map(tensor, finished_nodes, nodes_in_progress, layer, node_index, tensor_index)
   1419             tensor_index = node.tensor_indices[i]
   1420             build_map(x, finished_nodes, nodes_in_progress, layer,
-> 1421                       node_index, tensor_index)
   1422 
   1423         finished_nodes.add(node)

/usr/local/lib/python3.6/dist-packages/keras/engine/network.py in build_map(tensor, finished_nodes, nodes_in_progress, layer, node_index, tensor_index)
   1419             tensor_index = node.tensor_indices[i]
   1420             build_map(x, finished_nodes, nodes_in_progress, layer,
-> 1421                       node_index, tensor_index)
   1422 
   1423         finished_nodes.add(node)

/usr/local/lib/python3.6/dist-packages/keras/engine/network.py in build_map(tensor, finished_nodes, nodes_in_progress, layer, node_index, tensor_index)
   1419             tensor_index = node.tensor_indices[i]
   1420             build_map(x, finished_nodes, nodes_in_progress, layer,
-> 1421                       node_index, tensor_index)
   1422 
   1423         finished_nodes.add(node)

/usr/local/lib/python3.6/dist-packages/keras/engine/network.py in build_map(tensor, finished_nodes, nodes_in_progress, layer, node_index, tensor_index)
   1391             ValueError: if a cycle is detected.
   1392         """
-> 1393         node = layer._inbound_nodes[node_index]
   1394 
   1395         # Prevent cycles.

AttributeError: 'NoneType' object has no attribute '_inbound_nodes'

так .. похоже, что ошибка происходит, когда я пытаюсь сгенерировать модель

model = Model(inputs=first_input, outputs=[output, output_1]) 

, но я предполагаю, что это происходит, потому что что-то не так с типом вывода из модели VGG. Я попытался создать Model() непосредственно на выходе из модели VGG, и я получаю ту же ошибку при применении его непосредственно к выходу из x, работает отлично.

возможно, я не получаю правильно подготовленные веса VGG правильно ..

Я надеюсь, что проблема ясна .. Кто-нибудь может помочь?

Спасибо!

...