Использование tf.keras.layers с keras.model - PullRequest
0 голосов
/ 12 марта 2020

да я везде читал, что keras и tf.keras не совместимы. Но вы можете передать tf.keras.layers в модель keras, и она работает. Когда я пытаюсь сделать это с моими собственными моделями ... это не работает!

Если вы изучите исходный код re snet для Resnet50.py, они создадут такие модели, как

input = layers.Input(shape=input_shape)
x = layers.Dense()(x)
model = Model(input,x)

, и он отлично работает независимо от того, передаете ли вы в layer = tf.keras.layers или layer = keras.layers

демонстрационный код:

import tensorflow as tf
import keras

# THIS WORKS!
input_shape = (224,224,3)
base_model = keras.applications.ResNet50(layers=tf.keras.layers, weights='imagenet',
                  weights='imagenet', include_top=False, pooling=None,
                  input_shape=input_shape,
                  classes=1000)

# this fails!!
input = tf.keras.layers.Input(shape=input_shape)
x = tf.keras.layers.Dense(1000,activation='relu')(input)
model = keras.Model(input, x)

Мой код выдает эту ошибку: ошибка типа: объект типа Dense не имеет len

Как сделать эту работу моей ? Видимо, есть способ заставить его работать, потому что встроенные модели keras.applications, кажется, поддерживают его, и он отлично работает

Я хочу использовать tf.keras.layers, потому что их слой пакетной нормализации работает по-другому. Это потенциально самый простой способ перенести его в нашу огромную базу существующего кода.

Я вижу этот связанный пост stackoverflow с той же ошибкой: У объекта типа 'Dense' нет len ()

Они правильно упоминают, что это связано с несовместимостью tf.keras и keras. но опять же, я подтвердил, что передача tf.keras.layers в keras.applications.resnet50 действительно возвращает модель keras с правильными слоями. Каким-то образом.

1 Ответ

1 голос
/ 12 марта 2020

Вы пришли к неверному выводу, keras.applications - это модуль, который поддерживает пакеты keras и tf.keras, поскольку keras.applications использует models.Model, он обнаруживает, если вы используете tf.keras или keras, и получает соответствующие модули, поэтому код соответствует c фактической реализации keras.

keras.applications не смешивает использование keras и tf.keras, он просто поддерживает оба.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...