да я везде читал, что 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 с правильными слоями. Каким-то образом.