<p>这里的情况是不同的,而且有点误导,特别是当您将<code>predict_proba</code>方法与同名的<code>sklearn</code>方法进行比较时。在Keras(不是sklearn包装器)中,方法<code>predict_proba</code>与方法<code>predict</code>完全相同。你甚至可以检查一下<a href="https://github.com/fchollet/keras/blob/master/keras/models.py" rel="noreferrer">here</a>:</p>
<pre><code>def predict_proba(self, x, batch_size=32, verbose=1):
"""Generates class probability predictions for the input samples
batch by batch.
# Arguments
x: input data, as a Numpy array or list of Numpy arrays
(if the model has multiple inputs).
batch_size: integer.
verbose: verbosity mode, 0 or 1.
# Returns
A Numpy array of probability predictions.
"""
preds = self.predict(x, batch_size, verbose)
if preds.min() < 0. or preds.max() > 1.:
warnings.warn('Network returning invalid probability values. '
'The last layer might not normalize predictions '
'into probabilities '
'(like softmax or sigmoid would).')
return preds
</code></pre>
<p>所以-在二进制分类的情况下-输出取决于网络的设计:</p>
<ul>
<li>如果网络的最终输出是通过一个sigmoid输出获得的,那么<code>predict_proba</code>的输出只是分配给类1的概率。</li>
<li>如果网络的最终输出是通过应用<code>softmax</code>函数的二维输出获得的,那么<code>predict_proba</code>的输出是一对,其中<code>[a, b]</code>,其中<code>a = P(class(x) = 0)</code>和<code>b = P(class(x) = 1)</code>。</li>
</ul>
<p>第二种方法很少使用,使用第一种方法在理论上有一些优势,但我想告诉你,以防万一。</p>