我是深度学习和 Keras 的新手。当用于在 Keras 中定义模型时,预训练权重初始化 weights='imagenet' 是什么意思?
ResNet50(weights='imagenet')
谢谢!
我是深度学习和 Keras 的新手。当用于在 Keras 中定义模型时,预训练权重初始化 weights='imagenet' 是什么意思?
ResNet50(weights='imagenet')
谢谢!
此代码行创建了一个名称已知的网络架构(您可以在此处ResNet50
找到有关它的更多信息)。这使得加载该网络的权重,该网络已在数据集上进行过训练。如果没有这些信息,将只能准备网络架构,但无法将任何权重设置为“好”值,因为它不知道模型的目的。这是通过指定数据集来确定的。weights='imagenet'
Keras
imagenet
Keras
如果您使用的是其他数据集,那么您正在使用该模型作为预训练模型。您可以在此处找到有关此技术的更多信息;但总体思路是:在对任何复杂(图像)数据集进行训练后,模型将在其最低层(大部分时间:卷积)中学习以检测非常基本的特征,例如边缘、角落等. 这有助于模型更快地学习分析自己的数据集,因为它不必再次学习检测这些基本特征。
按照@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)
在上面的代码中,我们可以指定我们必须在数据集上训练多少层 resnet,方法是将layer.trainable分配为 true 以在您的数据集上进行训练,否则为 false 。
除此之外,我们还可以在网络之后粘贴层,如添加自定义层所示