在 Keras 中定义模型

Defining model in Keras

我是深度学习和 Keras 的新手。预训练权重初始化 weights='imagenet' 用于在 Keras 中定义模型时是什么意思?

ResNet50(weights='imagenet')

谢谢!

此代码行创建了一个名为 ResNet50 的网络架构(您可以找到有关它的更多信息 here)。 weights='imagenet' 使 Keras 加载该网络的权重,该网络已在 imagenet 数据集上进行训练。如果没有此信息,Keras 将只能准备网络架构,但无法将任何权重设置为 "good" 值,因为它不知道模型的目的。这是通过指定数据集来确定的。

如果您使用的是其他数据集,那么您就是将该模型用作预训练模型。您可以找到有关此技术的更多信息 here;但总体思路是:在任何复杂(图像)数据集上训练模型后,它将在其最低层(大部分时间:卷积)中学习以检测非常基本的特征,例如边缘、角等. 这有助于模型更快地学习分析您自己的数据集,因为它不必再次学习检测此基本特征。

按照@FlashTek 的回答,我们也可以在我们的数据集上训练这个模型。

看下面的代码:

model = applications.ResNet50(weights = "imagenet", include_top=False, 
input_shape = (img_width, img_height,3))


# Freeze the layers which you don't want to train. Here I am freezing the first 30 layers.
for layer in model.layers[0:30]:
    layer.trainable = False

for layer in model.layers[30:]:
    layer.trainable = True

#Adding custom Layers 
x = Flatten()(model.output)
# x = Dense(1024, activation="relu")(x)
# x = Dropout(0.5)(x)
# x = Dense(1024, activation="relu")(x)
# x = Dropout(0.5)(x)
x = Dense(1024, activation="relu")(x)
predictions = Dense(2, activation="softmax")(x)

在上面的代码中,我们可以通过分配 layer.trainable 来指定我们必须在我们的数据集上训练多少层 resnet 要么在你的数据集上训练它否则为 false。

除此之外,我们还可以在网络之后粘贴图层,如添加自定义图层

所示