【机器学习:十五、神经网络的编译和训练】

server/2025/1/16 19:37:24/

1. TensorFlow实现代码

TensorFlow 是深度学习中最为广泛使用的框架之一,提供了灵活的接口来构建、编译和训练神经网络。以下是实现神经网络的一个完整代码示例,以“手写数字识别”为例:

import tensorflow as tf
from tensorflow.keras import layers, models# 加载 MNIST 数据集
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0# 构建模型
model = models.Sequential([layers.Flatten(input_shape=(28, 28)),layers.Dense(128, activation='relu'),layers.Dense(10, activation='softmax')
])# 编译模型
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])# 训练模型
model.fit(x_train, y_train, epochs=5)# 测试模型
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f"测试准确率: {test_acc}")

以上代码展示了从加载数据到模型训练和测试的完整流程,后续小节将分解具体步骤进行详解。


2. 编译 compile()

编译模型的重要性
model.compile()神经网络模型在 TensorFlow 中的关键步骤,用于指定优化器、损失函数和评估指标。编译后,模型才能够进行训练。其功能包括:

  • 定义优化器:决定模型如何更新权重(如 Adam、SGD)。
  • 设置损失函数:衡量预测值与真实值之间的误差。
  • 选择评估指标:训练过程中实时监控模型性能。

常用参数解释

model.compile(optimizer='adam',  # 指定优化器loss='sparse_categorical_crossentropy',  # 损失函数metrics=['accuracy'])  # 评估指标
  • optimizer:优化器可选用 SGD、RMSprop、Adam 等。Adam 适合大多数任务。
  • loss:根据任务选择合适的损失函数。例如分类任务用交叉熵,回归任务用均方误差。
  • metrics:常用指标包括准确率(accuracy)和均方误差(mse)。

3. 训练 fit()

fit() 是 TensorFlow 模型训练的核心方法,用于指定训练数据、批量大小、训练轮数等。

model.fit(x_train, y_train, batch_size=32, epochs=10, validation_split=0.2)

参数解释

  • x_trainy_train:训练数据及其对应标签。
  • batch_size:每次训练使用的数据样本数。较小的批量会增加训练时间,但收敛更稳定。
  • epochs:完整训练数据通过神经网络的次数。
  • validation_split:从训练数据中划分一定比例用于验证模型性能。

训练结果分析
fit() 会输出训练过程的损失值和评估指标(如准确率)。通过观察这些值的变化,可以判断模型是否过拟合或欠拟合。


4. 模型结构及代码

神经网络的结构设计直接影响模型性能。以下是经典网络的常见设计:

  • 输入层:用于接受数据。
  • 隐藏层:包含多个神经元,负责提取特征。
  • 输出层:根据任务设置输出类别或数值。

以 MNIST 分类为例

model = models.Sequential([layers.Flatten(input_shape=(28, 28)),  # 输入层layers.Dense(128, activation='relu'),  # 隐藏层layers.Dense(10, activation='softmax')  # 输出层
])

5. 算法步骤

训练神经网络的基本步骤如下:

  1. 初始化模型和参数。
  2. 数据预处理:归一化、数据增强等。
  3. 构建模型:选择适当的层数、神经元数和激活函数。
  4. 编译模型:定义损失函数和优化器。
  5. 模型训练:使用训练数据进行多轮迭代。
  6. 测试模型:用测试数据评估最终性能。

6. 损失函数和优化函数的数学公式

  • 损失函数:衡量预测值与真实值之间的差距。

    • 分类任务:CrossEntropy = -Σ(y_true * log(y_pred))
    • 回归任务:MSE = (1/n)Σ(y_true - y_pred)^2
  • 优化函数:通过梯度下降最小化损失函数。

    • 梯度下降公式:w_new = w_old - learning_rate * ∂L/∂w

7. 二元交叉熵损失函数:适用于二分类问题

对于二分类任务(如垃圾邮件检测),交叉熵损失函数是最常用的选择:

  • 数学公式:
    BinaryCrossEntropy = -[y * log(p) + (1-y) * log(1-p)]

  • TensorFlow 实现:

    loss = tf.keras.losses.BinaryCrossentropy()
    

8. 均方误差损失函数:适用于回归问题

均方误差(MSE)适用于预测连续数值:

  • 数学公式:
    MSE = (1/n)Σ(y_true - y_pred)^2

  • TensorFlow 实现:

    loss = tf.keras.losses.MeanSquaredError()
    

9. 总结

神经网络的编译和训练是深度学习的核心环节。通过选择合适的损失函数和优化器,结合数据的有效预处理,能够实现高效的模型训练与预测。TensorFlow 提供了丰富的接口和工具,使得开发者可以快速构建和调试神经网络应用。


http://www.ppmy.cn/server/158896.html

相关文章

C++建楼梯贪心算法

问题描述 有𝑁个正方形从左到右排成一行。第𝑖个正方形的高度是𝐻𝑖。 对于每个正方形,你可以执行以下操作之一: • 将正方形的高度减少1。 • 什么也不做。 确定是否可以通过执行这些操作使得正方形的高…

STM32F1——CAN驱动代码

一、 CAN.H。 #ifndef __CAN_H #define __CAN_H #include "stm32f10x.h" #include "SysTick.h" //PA11--CANRX PA12--CANTX //CAN接收RX0中断使能 #define CAN_RX0_INT_ENABLE 0 //0,不使能;1,使能.u8 CAN_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 …

【Linux】10.Linux基础开发工具使用(3)

文章目录 使用 git 命令行(初级)Ubuntu安装 git注册gitee用户并创建gitee仓库Ubuntu下使用git 使用 git 命令行(初级) Ubuntu安装 git 首先更新软件源: sudo apt update然后再次尝试安装 git: sudo apt…

解锁“搭子小程序”开发新机遇,助力企业数字化转型

搭子作为一种新型的社交方式,逐渐进入到了年轻人的生活中,在日常旅游、学习、逛街等,年轻人都可以找到志同道合的“搭子”,提高生活的幸福指数。 随着搭子市场的发展,通过互联网寻找搭子已经成为了年轻人的必备方式。…

计算机网络八股文学习笔记

总结来自于javaguide,本文章仅供个人学习复习 javaguide计算机网络八股 文章目录 计算机网络基础网络分层模型OSI七层模型TCP/IP四层模型 HTTP从输入URL到页面展示到底发生了什么?(非常重要)HTTP状态码HTTP Header中常见的字段有哪些?HTTP和HTTPS有什么区别?(重要)HTTP/1.0和…

PMP–一、二、三模、冲刺–分类–7.成本管理

文章目录 技巧一模7.成本管理--4.控制成本--数据分析--挣值分析--进度绩效指数(SPI)是测量进度效率的一种指标,表示为挣值与计划价值之比,反映了项目团队完成工作的效率。 当 SPI小于 1.0 时,说明已完成的工作量未达到…

Unity3D仿星露谷物语开发21之添加更多道具

1、目标 截至目前,我们的道具有Corn,Parsnip,Pumpkin,Grass1,Grass2,PricklyCactus这6种,我们需要添加更多的道具到游戏场景中。 2、思路 当前Assets -> Prefabs -> Item下有一个Item预…

客户案例:某家居制造企业跨境电商,解决业务端(亚马逊平台)、易仓ERP与财务端(金蝶ERP)系统间的业务财务数据对账互通

一、系统定义 1、系统定位: 数据中台系统是一种战略选择和组织形式,通过有型的产品支撑和实施方法论,解决企业面临的数据孤岛、数据维护混乱、数据价值利用低的问题,依据企业特有的业务和架构,构建一套从数据汇聚、开…