我想使用ResNet模型架构,并想要更改最后几层;我如何才能只使用Tensorflow中模型动物园的模型架构?
发布于 2020-08-12 11:16:09
要使用ResNet模型,您可以从tensorflow.keras.applications中选择几个,包括ResNet50、ResNet101和ResNet152。然后,如果您想要进行迁移学习,则需要更改一些默认参数。对于您的问题,您需要将weights参数设置为等于None。否则,将提供'imagenet'权重。此外,您需要将include_top设置为False,因为针对您的问题的类的数量可能与ImageNet不同。最后,您需要在input_shape中提供数据的形状。这看起来像这样。
base = tf.keras.applications.ResNet50(include_top=False, weights=None, input_shape=shape)要获取模型的摘要,您可以执行以下操作
base.summary()要添加自己的head,可以使用Functional API。您将需要添加一个Input层和您自己的Dense层,这将与您的任务相对应。这可能是
input = tf.keras.layers.Input(shape=shape)
base = base(input)
out = tf.keras.layers.Dense(num_classes, activation='softmax')(base)最后,要构造一个模型,您可以这样做
model = tf.keras.models.Model(input, out)Model构造函数有两个参数。第一个是模型的输入,第二个是输出。请注意,调用model.summary()会将ResNet基础显示为一个单独的层。要查看ResNet基础的所有层,您可以执行model.layers[1].summary(),或者您可以修改构建模型的代码。第二种方法是
out = tf.keras.layers.Dense(num_classes, activation='softmax')(base.output)
model = tf.keras.models.Model(base.input, out)现在,您只需使用model.summary()即可查看所有图层。
https://stackoverflow.com/questions/63367995
复制相似问题