将tf.keras.layers与keras.model一起使用

将tf.keras.layers与keras.model一起使用,keras,tensorflow2.0,tf.keras,Keras,Tensorflow2.0,Tf.keras,是的,我到处都读到keras和tf.keras不兼容。但是您可以将tf.keras.layers传递到一个keras模型中,它确实起作用。当我尝试使用自己的模型时。。。它不起作用 如果检查Resnet50.py的resnet源代码,它们会构建如下模型 input = layers.Input(shape=input_shape) x = layers.Dense()(x) model = Model(input,x) 无论您是传入layers=tf.keras.layers还是传入layers

是的,我到处都读到keras和tf.keras不兼容。但是您可以将tf.keras.layers传递到一个keras模型中,它确实起作用。当我尝试使用自己的模型时。。。它不起作用

如果检查Resnet50.py的resnet源代码,它们会构建如下模型

input = layers.Input(shape=input_shape)
x = layers.Dense()(x)
model = Model(input,x)
无论您是传入layers=tf.keras.layers还是传入layers=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)
我的代码产生以下错误:类型错误: 稠密类型的对象没有透镜

如何使我的工作?显然,有一种方法可以让它工作,因为keras.applications预构建模型似乎确实支持它,而且工作正常

我想使用tf.keras.layers,因为它们的batchnormalization层工作方式不同。这可能是将其放入大量现有代码库的最简单方法

我确实看到了这篇相关的stackoverflow文章,其中有相同的错误:


他们正确地提到这是因为tf.keras和keras不兼容。但我再次确认,将tf.keras.layers传递到keras.applications.resnet50会返回具有正确层的keras模型。不知何故。

您得出了错误的结论,
keras.applications
是一个同时支持
keras
tf.keras
包的模块,因为
keras.applications
使用
models.Model
,它检测您是否使用
tf.keras
keras
,并获取相应的模块,因此代码与实际的keras实现无关


keras.applications
不是混合使用
keras
tf.keras
,它只是支持两者。

不,你弄错了,keras.applications使用models.Model,所以它会检测你是使用tf.keras还是keras,并获取相应的模块。它不是混合keras.和tf.keras,它只是支持两者。这对我帮助很大,谢谢。