Странные различия в построении модели tf.keras в версиях 1.4 и 2.0 - PullRequest
2 голосов
/ 29 сентября 2019

Я заметил различия в построении топологии сети в tf.keras в версиях 1.4 и 2.0. Я хотел бы построить сеть с общими слоями:

tf2

input_2 --> []
input_3 --> []
input_1 --> []
conv2d --> ['input_1', 'input_2', 'input_3']
conv2d_1 --> ['conv2d', 'conv2d', 'conv2d']
max_pooling2d --> ['conv2d_1', 'conv2d_1', 'conv2d_1']
flatten --> ['max_pooling2d', 'max_pooling2d', 'max_pooling2d']
concatenate --> ['model', 'model']
dense --> ['concatenate']



tf1

input_2 --> []
input_3 --> []
input_1 --> []
conv2d --> ['input_1']
conv2d_1 --> ['conv2d']
max_pooling2d --> ['conv2d_1']
flatten --> ['max_pooling2d']
concatenate --> ['model', 'model']
dense --> ['concatenate']

Вопрос: это ошибка или особенность, потому что я использую этот материал для преобразования моделей keras в пользовательский формат фреймворка. И я хотел бы сохранить совместимость tf2.

Существует код для печати соединений:

from tensorflow import keras


def toList(x):
    if isinstance(x, list):
        return x
    return [x]


def printInputLayers(layer):
    inputLayers = []
    for node in toList(layer._inbound_nodes):
        for inbLayer in toList(node.inbound_layers):
            inputLayers.append(inbLayer.name)
    print(layer.name + " --> " + str(inputLayers))


def printModelsInputLayersForEachLayer(model):
    for layer in model.layers:
        if not isinstance(layer, keras.models.Model):
            printInputLayers(layer)
        else:
            printModelsInputLayersForEachLayer(layer)


if __name__ == "__main__":
    model = keras.models.Model(...)
    printModelsInputLayersForEachLayer(model)

Заранее спасибо!

...