【Tensorflow】【损失函数】交叉熵数据验证(下)---BinaryCrossentropy二分类

every blog every motto: You can do more than you think.

0. 前言

对交叉熵的具体过程用数据进行验证
说明: 关于交叉熵的基本概念和多分类交叉熵数据验证,参考上篇多分类交叉熵CategoricalCrossentropy

1. 正文

1.1 BinaryCrossentropy公式

l o s s = − 1 o u t p u t s i z e ∑ i = 1 o u t p u t s i z e [ y i × l o g y i ^ + ( 1 − y i ) × l o g ( 1 − y i ^ ) ] loss = -\frac{1}{output size}\sum_{i=1}^{output size}[y_i \times log\hat{y_i}+(1-y_i) \times log(1-\hat{y_i})] loss=outputsize1i=1outputsize[yi×logyi^+(1yi)×log(1yi^)]

说明:

  • yi: 是真实值
  • y_hat: 预测值
  • output size: 图片的 “像素值” 的个数,如:图片shape: (batch,height,width,channel) , 那就是他们4个数的乘积。

1.2 数据验证

import os

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import tensorflow as tf
from tensorflow.keras.losses import BinaryCrossentropy
import numpy as np

loss = BinaryCrossentropy()

1.2.1 一维

# 一维
y_true = np.array([0, 1, 1])
y_pred = np.array([0.6, 0.4, 0.3])
  1. tf
loss_result_1 = loss(y_true, y_pred)
print('交叉熵计算:', loss_result_1)

在这里插入图片描述
2. numpy

np_result_1 = y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred)
np_result_1 = -np.sum(np_result_1)/y_true.size
print('numpy计算:', np_result_1)
  1. 单个元素计算
    每个对应的值进行计算
    在这里插入图片描述
# 3. 单个元素计算
temp = -(1*np.log(0.4)+1*np.log(0.4)+1*np.log(0.3))/3
print('单个元素计算:', temp)

在这里插入图片描述

1.2.2 二维

y_true = np.array([[0, 1], [0, 0]])
y_pred = np.array([[0.2, 0.9], [0.1, 0.2]])
  1. tf
loss_result_1 = loss(y_true, y_pred)
print('交叉熵计算:', loss_result_1)

在这里插入图片描述

  1. numpy
np_result_1 = y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred)
np_result_1 = -np.sum(np_result_1) / y_true.size
print('numpy计算:', np_result_1)

在这里插入图片描述
3. 单个元素计算

temp = -(1 * np.log(0.8) + 1 * np.log(0.9) + 1 * np.log(0.9)+ 1 * np.log(0.8)) / 4
print('单个元素计算:', temp)

在这里插入图片描述

1.2.3 小结

以图片分割为例:
图片shape: (batch,height,width,channel)

  • 上篇文章中Crossentropy是对通道方向上进行计算,损失=总和/(batch+height+width)。
  • 本文的BinaryCrossentropy对每个值进行计算,损失=总和/(batch+height+width+channel
<think>嗯,用户想了解如何使用TensorFlow.js开始训练模型。首先,我需要整理入门教程的步骤,确保结构清晰。根据提供的引用,应该从项目设置开始,引用[2]提到了设置基本项目,包括浏览器和Node.js环境。所以第一步应该是环境搭建。 接下来是构建模型结构。需要解释如何用TensorFlow.js的API创建模型,比如使用tf.sequential()添加层,输入层、隐藏层、输出层。引用[3]中的代码示例可能有帮助,可以展示定义模型的代码片段。 然后是数据处理部分。用户需要知道如何将数据转换为张量,引用[3]提到了将图片数据转换为张量,这里可能需要解释tf.tensor2d和tf.oneHot的使用,以及数据标准化的重要性。 编译模型涉及选择优化器、损失函数和评估指标,引用[3]中的fit方法参数可以作为例子,但编译通常在调用fit之前完成。需要说明compile方法的作用和参数。 训练模型部分,引用[3]中的fit方法示例可以用来展示训练循环的设置,比如epochs、batchSize和回调函数,比如保存模型。这里要注意解释每个参数的意义,以及如何监控训练过程。 模型评估和应用可能需要展示evaluate方法或直接使用预测,比如引用[3]中的预测部分,可以给出一个简单的预测示例,比如判断数字是否为奇数。 最后,相关问题的生成需要覆盖用户可能进一步询问的方向,比如数据处理、模型保存、可视化工具、迁移学习和浏览器与Node.js的区别。这些问题应基于引用中的内容,例如引用[1]提到模型转换,引用[4]提到示例项目,可以引导用户参考这些资源。 需要确保所有数学公式使用正确的LaTeX格式,行内公式用$...$,独立公式用$$...$$。检查是否有遗漏的步骤,比如数据预处理或模型保存,根据引用[3]中的回调函数保存模型,应提到这一点。同时,确保回答的中文流畅,并正确添加引用标记,比如在保存模型部分引用[3],在项目设置引用[2]和[4]。</think>### TensorFlow.js 训练模型入门教程 #### 1. 环境搭建 在浏览器或Node.js环境中均可使用TensorFlow.js。浏览器环境通过`<script>`标签引入,Node.js环境使用npm安装: ```bash npm install @tensorflow/tfjs-node ``` 引用[2]提供了基础项目设置方法,推荐优先通过官方示例库`tfjs-examples`学习实践[^4]。 #### 2. 构建模型结构 使用`tf.sequential()`创建顺序模型,示例代码定义包含全连接层的简单神经网络: ```javascript const model = tf.sequential({ layers: [ tf.layers.dense({ units: 64, activation: 'relu', inputShape: [784] }), // 输入层 tf.layers.dense({ units: 32, activation: 'relu' }), // 隐藏层 tf.layers.dense({ units: 1, activation: 'sigmoid' }) // 输出层 ] }); ``` #### 3. 数据预处理 将数据转换为张量格式,例如输入数据$x$和标签$y$的处理: ```javascript // 假设原始数据为32位浮点型数组 const inputs = tf.tensor2d(dataArray, [样本数量, 784]); const labels = tf.oneHot(tf.tensor1d(labelArray, 'int32'), 2); // 二分类任务 ``` #### 4. 编译模型 配置学习过程参数: ```javascript model.compile({ optimizer: tf.train.adam(0.001), // 学习率0.001的Adam优化器 loss: 'binaryCrossentropy', // 二分类交叉熵损失函数 metrics: ['accuracy'] // 监控准确率 }); ``` #### 5. 模型训练 调用`fit()`方法启动训练,示例展示带回调函数的配置: ```javascript await model.fit(inputs, labels, { epochs: 15, // 迭代次数 batchSize: 32, // 批处理大小 validationSplit: 0.2, // 自动划分20%验证集 callbacks: { onEpochEnd: (epoch, logs) => { console.log(`第${epoch}轮: 损失=${logs.loss}`); model.save(`file://model_${epoch}`); // 每轮保存模型[^3] } } }); ``` #### 6. 模型应用 训练完成后进行预测: ```javascript const testSample = tf.tensor2d([...], [1, 784]); // 新样本 const prediction = model.predict(testSample); console.log(`预测概率: ${prediction.dataSync()[0]}`); ``` $$ \text{预测结果} = \begin{cases} \text{类别A} & \text{if } p \geq 0.5 \\ \text{类别B} & \text{if } p < 0.5 \end{cases} $$ #### 7. 关键数学原理 神经网络的损失函数计算示例(二分类): $$ L(y, \hat{y}) = -\frac{1}{N}\sum_{i=1}^N [y_i \log(\hat{y}_i) + (1-y_i)\log(1-\hat{y}_i)] $$ 其中$y_i$为真实标签,$\hat{y}_i$为预测概率,$N$为样本数量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡侃有料

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值