2017-09-04 45 views
1

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

ResNet50(weights='imagenet') 

谢谢!

+0

如果您的问题已经解决了,你应该标记最有用的答案,解决关闭这个主题粘层。 – FlashTek

回答

4

此代码行创建一个名为ResNet50的网络体系结构(您可以找到关于它的更多信息here)。 weights='imagenet'使得Keras加载该网络的权重,该网络已经在imagenet数据集上接受过培训。没有这些信息,Keras只能够准备网络架构,但不能将任何权重设置为“好”值,因为它不知道模型的用途。这是通过指定数据集来确定的。

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

+0

感谢您的回复。但是我正在使用不同的数据集。如何使用已在其他数据集上训练过的网络的权重来帮助我的模型学习(或使用来自预训练模型的权重的重要性?) –

+1

@AKSHAYAAVAIDYANATHAN请参阅编辑。 – FlashTek

3

以下@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是真就训练它你的数据集或否则为false。

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

+0

这是一个有趣的解释。谢谢。 –