Keras-理解示例

Keras-理解示例,keras,deep-learning,Keras,Deep Learning,我目前正试图通过关注Keras和《使用Python Keras进行深入学习》一书来学习深度学习 我确实有一个例子——我理解代码,但不理解结果——我需要你的帮助。该示例是关于从包含在Keras中的imdB数据集分析电影评论。代码如下 def vectorize_sequences(sequences,dimension=10000): results=np.zeros((len(sequences),dimension)) for i, sequence in enumerate(

我目前正试图通过关注Keras和《使用Python Keras进行深入学习》一书来学习深度学习

我确实有一个例子——我理解代码,但不理解结果——我需要你的帮助。该示例是关于从包含在Keras中的imdB数据集分析电影评论。代码如下

def vectorize_sequences(sequences,dimension=10000):
    results=np.zeros((len(sequences),dimension))
    for i, sequence in enumerate(sequences):
        results[i,sequence]=1.
    return results

X_train=vectorize_sequences(train_data)
X_test=vectorize_sequences(test_data)
y_train=np.asarray(train_labels)
y_test=np.asarray(test_labels)

model=models.Sequential()
model.add(layers.Dense(16,activation="relu",input_shape=(10000,)))
model.add(layers.Dense(16,activation="relu"))
model.add(layers.Dense(1,activation="sigmoid"))
model.compile(optimizer="rmsprop",loss="binary_crossentropy",metrics=["accuracy"])

history=model.fit(X_train,y_train,epochs=4,batch_size=512)
在说明中写道,“最后一层将使用乙状结肠激活,以便输出一个概率,指示样本具有目标“1”的可能性。

我知道sigmoid函数的范围在[0,1]之间。假设我的网络输出为0.6 为什么我可以说这个值给出了目标为“1”而不是目标为“0”的概率


我有点结巴,需要一些帮助:)

对输出的解释取决于您在培训期间使用的标签。因此,
train\u标签
test\u标签
由0和1组成。
在训练期间,对网络进行优化,以产生与输入序列相对应的正确标签。因此,如果您的输出为0或1,则网络将给出可靠的分类。但是,如果您的输出为0.5,则网络完全不确定您的输入属于哪个类别

现在我们假设您的输入对应于类1。对于0.6这样的输出,类可能为1,但置信度仅为60%。它描述了1类的概率,因为1的输出是对其标签输入的正确解释。如果输出为0,则将是输入的最差分类,因为标签为1。因此,这最终对应于0到1之间的值,而越接近1,分类效果越好-因此这是一个最终的概率。
但请记住,只有当您知道您的输入属于类1时,此定义才成立。如果它是类0的一部分,则必须改变以前的定义

最后,你有两个选择。首先,您可以将这些值保持原样,并将其视为输入对应于其中一个类的概率。其次,您可以引入一个阈值(在本例中,将其设置为0.5是有意义的),并说如果您大于阈值,则将您的输入分类到类1,否则分类到类0。输出越接近0.5,网络最终就越是猜测类


阈值的选择最终会直接影响网络的性能。例如,可以使用ROC曲线()对其进行评估。

谢谢您的回复。我同意你的结论。我对这句话有点惊讶,因为这意味着我的输入总是有一个积极的结果,即“1”。事实并非如此,因为培训和测试数据包含50%的“1”和50%的“0”。因此,我不能说我的输出给出了接收“1”作为结果的可能性,感谢澄清