numpy手写二分类交叉熵

在这里插入图片描述

下面是一个使用NumPy手写二分类交叉熵损失的代码,包括详细注释。我们将定义一个简单的函数来计算交叉熵损失,并使用main函数来演示如何使用它。

import numpy as np

def binary_cross_entropy(y_true, y_pred):
    """
    计算二分类交叉熵损失
    
    参数:
    y_true -- 真实标签,形状为 (n_samples, ),其中每个值都是 0 或 1
    y_pred -- 预测概率,形状为 (n_samples, ),值范围在 0 和 1 之间

    返回:
    loss -- 二分类交叉熵损失的标量
    """
    # 防止 log(0) 导致数值问题,使用 epsilon 限制预测概率的最小值
    epsilon = 1e-15
    y_pred = np.clip(y_pred, epsilon, 1 - epsilon)

    # 计算交叉熵损失
    loss = -np.mean(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred))
    return loss

def main():
    # 定义真实标签和预测概率
    y_true = np.array([1, 0, 1, 0, 1])   # 真实标签
    y_pred = np.array([0.9, 0.1, 0.8, 0.3, 0.6])  # 预测概率

    # 计算交叉熵损失
    loss = binary_cross_entropy(y_true, y_pred)
    print(f"Binary Cross Entropy Loss: {loss}")

if __name__ == "__main__":
    main()

代码解释

  1. binary_cross_entropy函数:

    • 输入:
      • y_true:真实标签,值为0或1。
      • y_pred:预测概率,范围在0到1之间。
    • 处理:
      • 使用np.clipy_pred的值限制在一个非常小的范围内,以避免log(0)带来的数值问题。
      • 计算交叉熵损失公式。
    • 输出:返回计算得到的二分类交叉熵损失。
  2. main函数:

    • 创建一些示例数据,包括真实标签和预测概率。
    • 调用binary_cross_entropy函数来计算损失。
    • 打印计算结果。

运行这个代码将输出二分类交叉熵损失的值。

以下是一个基于TensorFlow和Keras的手写数字识别实验代码: ```python import tensorflow as tf from tensorflow import keras import numpy as np import matplotlib.pyplot as plt # 加载MNIST数据集 mnist = keras.datasets.mnist (train_images, train_labels), (test_images, test_labels) = mnist.load_data() # 对数据进行预处理 train_images = train_images / 255.0 test_images = test_images / 255.0 # 构建模型 model = keras.Sequential([ keras.layers.Flatten(input_shape=(28, 28)), keras.layers.Dense(128, activation='relu'), keras.layers.Dense(10, activation='softmax') ]) # 编译模型 model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # 训练模型 model.fit(train_images, train_labels, epochs=10) # 评估模型 test_loss, test_acc = model.evaluate(test_images, test_labels) print('Test accuracy:', test_acc) # 预测结果 predictions = model.predict(test_images) ``` 上述代码中,我们首先加载MNIST数据集,然后对训练集和测试集的图片数据进行归一化处理。接着,我们构建了一个包含两个Dense层的神经网络模型,其中第一个Dense层有128个神经元,使用ReLU激活函数;第二个Dense层有10个神经元,使用Softmax激活函数。我们使用Adam优化器和稀疏分类交叉熵作为损失函数来编译模型。然后,我们使用训练集数据对模型进行训练,训练10个周期。最后,我们评估模型在测试集上的表现,并对测试集的图片进行预测。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值