Python 在预测层之前添加掩蔽层是否正确?

Python 在预测层之前添加掩蔽层是否正确?,python,machine-learning,tensorflow,neural-network,keras,Python,Machine Learning,Tensorflow,Neural Network,Keras,我想给我们一个预先训练的模型来分类图像。每个图像可以有多个类(在本例中最多21个)。当然,并非所有类都出现在每个图像中。因此,我想在模型中添加一个屏蔽层屏蔽所有零(如果类不存在,则为给定值) 现在我以前从未使用过掩蔽层,但在大多数在线示例中,它直接添加在输入层之后。但是,在下面的示例中,这是不可能的,因为掩蔽层与所有层(在本例中为Conv2D层)不兼容 可以在完全连接的输出层之前插入屏蔽层。但这并没有真正影响模型的损失(损失约为20!) 我做得对吗?还是在模型顶部添加屏蔽层完全没有用 我的型号

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

现在我以前从未使用过
掩蔽
层,但在大多数在线示例中,它直接添加在
输入
层之后。但是,在下面的示例中,这是不可能的,因为
掩蔽
层与所有层(在本例中为
Conv2D
层)不兼容

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

我做得对吗?还是在模型顶部添加
屏蔽层完全没有用

我的型号

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)意味着你要输入0。你能描述一下掩蔽的目的吗?单个掩蔽的形状是什么?我想要一个模型来预测一个类1-21是否出现在一个图像中。如果一个类没有出现,它被标记为0。这些零会导致我的数据集中的不平衡,所以我不希望模型对它们进行训练。我认为掩蔽零你可能会在stats.stackexchange.com上遇到“如何处理“不平衡”的ML问题。话虽如此,我还是很好奇,你指的是什么“不平衡”。如果你不想让你的人际网络了解“非班级”,是否可以让损失函数忽略非类的预期值和实际值之间的差异?另外,我注意到在您的输入示例中,您使用数字21来表示第21个类。当相应的类存在时,您可能只想在输入数组中放入1。这将使任何类的存在/不存在都被重新表示我也这么认为。根据目前的计划,你可能更重视预测21级而不是预测1级。