Keras 为什么所有训练样本的预测结果都相同?

Keras 为什么所有训练样本的预测结果都相同?,keras,Keras,我有一个带有num_标签的神经网络独立输出,其中每个输出由一个带有两个节点的softmax层组成(是/否) 我获取卷积层的输出,并将其作为简单softmax\u层的输入,我进一步将其输入到每个所述输出中: softmax\u层=密集(num\u标签,activation='softmax',name='softmax\u层')(卷积层) 输出=列表() 对于范围内的i(num_标签): out_y=densite(2,activation='softmax',name='out_{:d}'。格式

我有一个带有
num_标签的神经网络
独立输出,其中每个输出由一个带有两个节点的softmax层组成(是/否)

我获取
卷积层的输出
,并将其作为简单
softmax\u层
的输入,我进一步将其输入到每个所述输出中:

softmax\u层=密集(num\u标签,activation='softmax',name='softmax\u层')(卷积层)
输出=列表()
对于范围内的i(num_标签):
out_y=densite(2,activation='softmax',name='out_{:d}'。格式(i))(softmax_层)
输出。追加(输出)
到目前为止,我能够通过对模型进行训练,但现在我注意到,对于一批完全不同的样品,我得到了完全相同的输出:

请注意:这里,每列由(2,1)个数组组成。每列为一个样本的预测值

我检查过样品,它们不一样。我还尝试将
卷积层
输入到输出中。在这种情况下,预测是不同的。我只有按照上面所示的方法才能看到这个结果

我可以接受这样一个事实,即产出是“相似的”。在这种情况下,我认为网络只是在学习,而不是我想让它学习的东西,但由于它们实际上是一样的,我不太确定这里的问题是什么


我尝试过类似的简单前馈网络:

类前馈:
定义初始(自、输入尺寸、nb类):
in_x=Input(shape=(Input_dim,),name='in_x')
h1=密集(14,name='h1',activation='relu')(in_x)
h2=稠密(8,name='h2',activation='relu')(h1)
out=密集型(nb_类,名称='out',激活='softmax')(h2)
self.model=model(输入=[in_x],输出=[out])
def compile_model(self,optimizer='adam',loss='binary'u crossentropy'):
self.model.compile(优化器=优化器,损耗=损耗,度量=[“精度”])
但它的行为类似。我无法想象这是由于数据不平衡造成的。有13个班。有一些不平衡,但它不像一个类有90%的质量


我这样做对吗?

你的是/否课程是否平衡?一个比另一个更常见吗?@MatiasValdenegro不,它们不平衡,你是对的,这会在这里引起问题,结果可能不是很令人满意。然而,奇怪的是,所有样本的结果都是完全相同的,不是吗?这取决于有多不平衡,问题是如果其中一个类占数据的90%,然后,NN可以学会始终输出该类,并获得90%的准确率。@MatiasValdenegro供您参考。我在github存储库中用运行示例代码+所需的数据集(csv文件)提出这个问题。如果需要,请查看: