为什么我对所有训练样本都有相同的预测?

时间:2017-02-16 21:41:01

标签: keras

我有一个带有num_labels个独立输出的神经网络,其中每个输出都包含一个带有两个节点的 softmax 层(是/否)。

我正在获取convolution_layer的输出并将其作为简单softmax_layer的输入提供,我将进一步输入每个输出:

softmax_layer = Dense(num_labels, activation='softmax', name='softmax_layer')(convolution_layer)

outputs = list()

for i in range(num_labels):
    out_y = Dense(2, activation='softmax', name='out_{:d}'.format(i))(softmax_layer)
    outputs.append(out_y)

到目前为止,我能够通过providing a list of training samples训练模型,但现在我注意到我在一批中完全不同的样本获得完全相同的输出:

  

请注意:此处,每列包含(2,1)数组。 每个列都是对一个样本的预测。

enter image description here

我检查了样品, 不同。我也尝试过,例如将convolution_layer输入到输出中。在那种情况下,预测是不同的。如果我按照上面显示的方式进行,我只能看到这个结果。

我可以忍受这样的事实:输出是"类似的"。在那种情况下,我认为网络只是学习不是我想要学习的东西,但由于它们实际上是相同,我不太清楚这里的问题是什么。

我尝试过与简单的前馈网络相似的东西:

class FeedForward:

    def __init__(self, input_dim, nb_classes):

        in_x = Input(shape=(input_dim, ), name='in_x')
        h1 = Dense(14, name='h1', activation='relu')(in_x)
        h2 = Dense(8, name='h2', activation='relu')(h1)
        out = Dense(nb_classes, name='out', activation='softmax')(h2)

        self.model = Model(input=[in_x], output=[out])

    def compile_model(self, optimizer='adam', loss='binary_crossentropy'):
        self.model.compile(optimizer=optimizer, loss=loss, metrics=["accuracy"])

但它的行为相似。由于数据不平衡,我无法想象它。有13个班级。存在一些不平衡,但并不像一个类有90%的质量。

我这样做了吗?

0 个答案:

没有答案