在预测图层正确之前添加遮罩层吗?

时间:2017-09-05 08:14:11

标签: python machine-learning tensorflow neural-network keras

我想要一个预训练的模型来分类图像。每个图像都可以有多个类(在本例中最多为21个)。当然,并非所有类都出现在每个图像中。因此,我想在模型中添加一个Masking图层来屏蔽所有零(如果某个类不存在,则给定值)。

现在我以前从未使用Masking图层,但在大多数在线示例中,它都是在Input图层之后直接添加的。但是,在下面的示例中,这是不可能的,因为Masking图层与所有图层都不兼容(在这种情况下是Conv2D图层。

可以在完全连接的输出层之前插入Masking层。但这并没有真正影响模型的损失(损失大约是20!)。

我做得对还是在模型顶部添加Masking图层完全没用?

我的模特

from keras.layers import Input, GlobalAveragePooling2D, Masking, Dense, Dropout
from keras.applications.inception_v3 import InceptionV3
from keras.models import Model

#Define input tensor
input_tensor = Input(shape=(512, 512, 3))

# create the base pre-trained model
base_model = InceptionV3(input_tensor=input_tensor, weights='imagenet', include_top=False)

# add a global spatial average pooling layer
x = base_model.output
x = GlobalAveragePooling2D()(x)
# let's add a Mask fully-connected layer and a dropout
x = Masking(0.)(x)
x = Dense(1024, activation='relu')(x)
x = Dropout(0.2)(x)
# and a logistic layer with 21 classes
predictions = Dense(21, activation='sigmoid')(x)

# create final model
model = Model(inputs=base_model.input, outputs=predictions)

# compile model
model.compile(optimizer='rmsprop', loss='categorical_crossentropy')

示例标签

# input
np.array([[1,2,0,0,0,6,7,8,0,0,0,12,13,14,15,16,17,18,19,20,21],
          [0,2,0,4,5,6,7,8,9,10,11,0,0,14,15,16,17,18,19,20,21]])

0 个答案:

没有答案