使用 tf.keras.layers 和 keras.model
Using tf.keras.layers with keras.model
是的,我到处都读到 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)
我的代码产生了这个错误:类型错误:
Dense 类型的对象没有 len
如何让我的这个工作?显然有办法让它工作,因为 keras.applications 预建模型似乎支持它并且工作正常
我想使用 tf.keras.layers,因为它们的 batchnormalization 层工作方式不同。这可能是将其放入我们庞大的现有代码库中的最简单方法。
我确实看到这个相关的 Whosebug post 有同样的错误:Object of Type 'Dense' has no len()
他们正确地提到这是由于 tf.keras 和 keras 不兼容。但同样,我已经确认将 tf.keras.layers 传递到 keras.applications.resnet50 确实 return 具有正确层的 keras 模型。不知何故。
你得出错误的结论,keras.applications
是一个同时支持keras
和tf.keras
包的模块,因为keras.applications
使用models.Model
,它检测如果您使用 tf.keras
或 keras
并获取相应的模块,那么代码与实际的 keras 实现无关。
keras.applications
不是混合使用 keras
和 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.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,因为它们的 batchnormalization 层工作方式不同。这可能是将其放入我们庞大的现有代码库中的最简单方法。
我确实看到这个相关的 Whosebug post 有同样的错误:Object of Type 'Dense' has no len()
他们正确地提到这是由于 tf.keras 和 keras 不兼容。但同样,我已经确认将 tf.keras.layers 传递到 keras.applications.resnet50 确实 return 具有正确层的 keras 模型。不知何故。
你得出错误的结论,keras.applications
是一个同时支持keras
和tf.keras
包的模块,因为keras.applications
使用models.Model
,它检测如果您使用 tf.keras
或 keras
并获取相应的模块,那么代码与实际的 keras 实现无关。
keras.applications
不是混合使用 keras
和 tf.keras
,它只是支持两者。