我有一个带有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)数组。 每个列都是对一个样本的预测。
我检查了样品, 不同。我也尝试过,例如将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%的质量。
我这样做了吗?