Я пытаюсь создать инфраструктуру на экране для печати с раздувом.
Это мой код (я добавил все отпечатки для удобства чтения )
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 правильно ..
Я надеюсь, что проблема ясна .. Кто-нибудь может помочь?
Спасибо!