一、神经网络概述

神经网络是一种模仿生物神经网络结构和功能的计算模型,它由大量的人工神经元相互连接构成,能够通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。

 

1.1 神经网络的基本组成

  • 输入层:接收原始数据

  • 隐藏层:负责特征提取和转换(可以有多层)

  • 输出层:输出最终结果

  • 权重(Weights):连接神经元之间的强度

  • 偏置(Bias):增加模型的灵活性

  • 激活函数:引入非线性因素

 

1.2 神经网络的工作流程

  1. 前向传播:数据从输入层流向输出层

  2. 计算损失:比较预测值与真实值的差异

  3. 反向传播:根据损失调整权重和偏置

  4. 参数更新:使用优化器更新网络参数

二、使用TensorFlow构建神经网络

TensorFlow是Google开发的开源机器学习框架,下面我们详细介绍如何使用TensorFlow构建神经网络。

2.1 TensorFlow核心API介绍

2.1.1 tf.keras.Sequential

Sequential模型是层的线性堆叠,适用于简单的网络结构。

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers# 创建一个Sequential模型
model = keras.Sequential([layers.Dense(64, activation='relu', input_shape=(784,)),layers.Dense(64, activation='relu'),layers.Dense(10, activation='softmax')
])
2.1.2 layers.Dense

Dense是全连接层,主要参数包括:

  • units:正整数,输出空间的维度

  • activation:激活函数,如'relu', 'sigmoid', 'softmax'等

  • use_bias:布尔值,是否使用偏置向量

  • kernel_initializer:权重矩阵的初始化器

  • bias_initializer:偏置向量的初始化器

  • kernel_regularizer:权重矩阵的正则化函数

  • bias_regularizer:偏置向量的正则化函数

# 更详细的Dense层示例
dense_layer = layers.Dense(units=128,                           # 输出维度activation='relu',                   # 激活函数kernel_initializer='he_normal',      # 权重初始化bias_initializer='zeros',            # 偏置初始化kernel_regularizer=keras.regularizers.l2(0.01),  # L2正则化name='dense_layer_1'                 # 层名称
)

2.2 模型编译

在训练模型之前,需要配置学习过程,这是通过compile方法完成的。

model.compile(optimizer=keras.optimizers.Adam(learning_rate=0.001),  # 优化器loss='sparse_categorical_crossentropy',  # 损失函数metrics=['accuracy']                     # 评估指标
)
2.2.1 常用优化器参数
  • keras.optimizers.Adam:

    • learning_rate:学习率,默认为0.001

    • beta_1:一阶矩估计的指数衰减率,默认为0.9

    • beta_2:二阶矩估计的指数衰减率,默认为0.999

    • epsilon:数值稳定性的小常数,默认为1e-7

  • keras.optimizers.SGD:

    • learning_rate:学习率

    • momentum:动量参数

    • nesterov:是否使用Nesterov动量

2.2.2 常用损失函数
  • binary_crossentropy:二分类问题

  • categorical_crossentropy:多分类问题(标签为one-hot编码)

  • sparse_categorical_crossentropy:多分类问题(标签为整数)

  • mse:回归问题的均方误差

2.3 模型训练

使用fit方法训练模型:

history = model.fit(x_train,                    # 训练数据y_train,                    # 训练标签batch_size=32,              # 批量大小epochs=10,                  # 训练轮数validation_split=0.2,       # 验证集比例verbose=1,                  # 日志显示模式:0=不输出,1=进度条,2=每个epoch一行callbacks=[...]             # 回调函数列表
)

2.4 模型评估与预测 

# 评估模型
test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)# 进行预测
predictions = model.predict(x_test)

三、PyTorch神经网络实现

PyTorch是另一个流行的深度学习框架,下面介绍如何使用PyTorch构建神经网络。

3.1 PyTorch核心API

3.1.1 torch.nn.Module

所有神经网络模块的基类,自定义网络需要继承此类。

import torch
import torch.nn as nn
import torch.nn.functional as Fclass Net(nn.Module):def __init__(self):super(Net, self).__init__()self.fc1 = nn.Linear(784, 256)  # 输入层到隐藏层self.fc2 = nn.Linear(256, 128)  # 隐藏层到隐藏层self.fc3 = nn.Linear(128, 10)   # 隐藏层到输出层self.dropout = nn.Dropout(0.2)   # Dropout层def forward(self, x):x = x.view(-1, 784)            # 展平输入x = F.relu(self.fc1(x))        # 第一层+ReLU激活x = self.dropout(x)            # 应用Dropoutx = F.relu(self.fc2(x))         # 第二层+ReLU激活x = self.dropout(x)            # 应用Dropoutx = self.fc3(x)                # 输出层return F.log_softmax(x, dim=1)  # LogSoftmax激活
3.1.2 nn.Linear

PyTorch中的全连接层,参数包括:

  • in_features:输入特征数

  • out_features:输出特征数

  • bias:是否添加偏置(默认为True)

3.2 训练过程

# 实例化网络
model = Net()# 定义损失函数和优化器
criterion = nn.NLLLoss()  # 负对数似然损失
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)# 训练循环
for epoch in range(10):model.train()  # 设置为训练模式for data, target in train_loader:optimizer.zero_grad()  # 清空梯度output = model(data)   # 前向传播loss = criterion(output, target)  # 计算损失loss.backward()        # 反向传播optimizer.step()       # 更新参数# 验证model.eval()  # 设置为评估模式val_loss = 0correct = 0with torch.no_grad():  # 不计算梯度for data, target in val_loader:output = model(data)val_loss += criterion(output, target).item()pred = output.argmax(dim=1, keepdim=True)correct += pred.eq(target.view_as(pred)).sum().item()val_loss /= len(val_loader.dataset)print(f'Epoch {epoch}, Validation loss: {val_loss:.4f}, Accuracy: {correct}/{len(val_loader.dataset)} ({100. * correct / len(val_loader.dataset):.0f}%)')

四、神经网络高级API使用

4.1 Keras函数式API

对于更复杂的模型,可以使用Keras的函数式API:

# 输入层
inputs = keras.Input(shape=(784,), name='digits')# 中间层
x = layers.Dense(64, activation='relu', name='dense_1')(inputs)
x = layers.Dense(64, activation='relu', name='dense_2')(x)# 输出层
outputs = layers.Dense(10, activation='softmax', name='predictions')(x)# 创建模型
model = keras.Model(inputs=inputs, outputs=outputs)# 编译模型
model.compile(optimizer=keras.optimizers.RMSprop(learning_rate=0.001),loss='sparse_categorical_crossentropy',metrics=['accuracy']
)

4.2 自定义层

在Keras中创建自定义层:

class CustomDense(layers.Layer):def __init__(self, units=32, activation=None):super(CustomDense, self).__init__()self.units = unitsself.activation = keras.activations.get(activation)def build(self, input_shape):# 创建可训练权重self.w = self.add_weight(shape=(input_shape[-1], self.units),initializer='random_normal',trainable=True)self.b = self.add_weight(shape=(self.units,),initializer='zeros',trainable=True)def call(self, inputs):# 实现前向传播x = tf.matmul(inputs, self.w) + self.bif self.activation is not None:x = self.activation(x)return x# 使用自定义层
model = keras.Sequential([CustomDense(64, activation='relu'),CustomDense(10, activation='softmax')
])

4.3 回调函数

回调函数可以在训练过程中执行特定操作:

# 定义回调列表
callbacks = [# 早停:当验证损失不再改善时停止训练keras.callbacks.EarlyStopping(monitor='val_loss',  # 监控指标patience=5,         # 等待epochs数min_delta=0.001,    # 最小变化量verbose=1),# 模型检查点:保存最佳模型keras.callbacks.ModelCheckpoint(filepath='best_model.h5',  # 保存路径monitor='val_loss',        # 监控指标save_best_only=True,       # 只保存最佳模型verbose=1),# 学习率调度器keras.callbacks.ReduceLROnPlateau(monitor='val_loss',  # 监控指标factor=0.1,         # 学习率乘以的因子patience=3,         # 等待epochs数min_lr=0.00001,     # 学习率下限verbose=1)
]# 训练时使用回调
model.fit(x_train, y_train,epochs=50,validation_data=(x_val, y_val),callbacks=callbacks
)

五、神经网络应用示例

5.1 图像分类(CNN)

使用卷积神经网络进行图像分类:

# 构建CNN模型
model = keras.Sequential([# 卷积层layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),layers.MaxPooling2D((2, 2)),# 第二个卷积层layers.Conv2D(64, (3, 3), activation='relu'),layers.MaxPooling2D((2, 2)),# 第三个卷积层layers.Conv2D(64, (3, 3), activation='relu'),# 展平后接全连接层layers.Flatten(),layers.Dense(64, activation='relu'),layers.Dense(10, activation='softmax')
])# 编译模型
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])# 训练模型
history = model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels))

5.2 文本分类(RNN)

使用循环神经网络进行文本分类:

# 构建RNN模型
model = keras.Sequential([# 嵌入层:将单词索引转换为密集向量layers.Embedding(input_dim=10000, output_dim=64),# LSTM层layers.LSTM(64, return_sequences=True),layers.LSTM(32),# 全连接层layers.Dense(64, activation='relu'),layers.Dropout(0.5),layers.Dense(1, activation='sigmoid')  # 二分类输出
])# 编译模型
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])# 训练模型
history = model.fit(train_data, train_labels,epochs=10,batch_size=32,validation_split=0.2)

六、神经网络调优技巧

6.1 超参数调优

使用Keras Tuner进行超参数搜索:

import kerastuner as ktdef build_model(hp):model = keras.Sequential()model.add(layers.Flatten(input_shape=(28, 28)))# 调整全连接层单元数hp_units = hp.Int('units', min_value=32, max_value=512, step=32)model.add(layers.Dense(units=hp_units, activation='relu'))# 调整学习率hp_learning_rate = hp.Choice('learning_rate', values=[1e-2, 1e-3, 1e-4])model.add(layers.Dense(10, activation='softmax'))model.compile(optimizer=keras.optimizers.Adam(learning_rate=hp_learning_rate),loss='sparse_categorical_crossentropy',metrics=['accuracy'])return model# 初始化调优器
tuner = kt.Hyperband(build_model,objective='val_accuracy',max_epochs=10,factor=3,directory='my_dir',project_name='mnist')# 执行搜索
tuner.search(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels))# 获取最佳模型
best_model = tuner.get_best_models(num_models=1)[0]

6.2 正则化技术

防止过拟合的常用方法:

1.L1/L2正则化

# 添加L2正则化的Dense层
layers.Dense(64, activation='relu',kernel_regularizer=keras.regularizers.l2(0.01))

    2.Dropout

    model = keras.Sequential([layers.Dense(64, activation='relu'),layers.Dropout(0.5),  # 随机丢弃50%的神经元layers.Dense(10, activation='softmax')
    ])

    3.Batch Normalization

    model = keras.Sequential([layers.Dense(64),layers.BatchNormalization(),layers.Activation('relu'),layers.Dense(10, activation='softmax')
    ])

    七、总结

    本文详细介绍了神经网络的基本概念、TensorFlow和PyTorch框架的使用方法,包括核心API的参数解释和示例代码。我们还探讨了高级API使用、自定义层实现、回调函数应用以及神经网络在不同领域的应用示例。最后,介绍了神经网络调优的常用技巧。

    神经网络是深度学习的基础,掌握其原理和实现方法对于从事人工智能相关工作至关重要。希望本文能够帮助你更好地理解和应用神经网络。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
    如若转载,请注明出处:http://www.pswp.cn/web/88302.shtml
    繁体地址,请注明出处:http://hk.pswp.cn/web/88302.shtml
    英文地址,请注明出处:http://en.pswp.cn/web/88302.shtml

    如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    分桶表的介绍和作用

    一、分桶表的基本介绍1、什么是分桶表?分桶表主要是用于分文件的,在建表的时候,指定按照那些字段执行分桶操作,并可以设置需要分多少个桶,当插入数据的时候,执行MR的分区的操作,将数据分散各个分…

    HighReport报表工具开始支持BS报表设计器

    HighReport报表工具同时支持c/s报表设计器和b/s报表设计器,大部分情况下使用c/s报表设计器,在某些业务场景或者用户自己简单修改报表模板,可以用b/s报表设计器。b/s报表设计器和c/s报表设计器操作一样b/s报表设计器免费下载免费使用(c/s报表设…

    数据结构--堆的实现

    目录 一、堆的概念及结构 二、小根堆的实现 2.1 堆的数据结构 2.2 堆的初始化HeapInit 2.3 堆的销毁HeapDestory 2.4 堆的插入HeapPush ​2.4.1 插入代码HeapPush 2.4.2 向上调整代码AdjustUp 2.4.3 交换数据代码Swap 2.5 堆的删除HeapPop 2.5.1 删除代码HeapPop 2…

    evo轨迹评估工具

    文章目录evo参数设置evo_traj指标度量evo_apeevo_rpe结果比较evo工具主要有如下六个常用命令: evo_ape - 用于评估绝对位姿误差;evo_rpe- 用于评估相对位姿误差;evo_traj - 这个主要是用来画轨迹、输出轨迹文件、转换数据格式等功能&#xf…

    Django+DRF 实战:自定义异常处理流程

    文章目录一、DRF 异常处理流程DRF 默认异常处理流程源码二、实战DRF 自定义异常处理流程应用自定义异常处理流程一、DRF 异常处理流程 DRF 默认异常处理流程 DRF默认的异常处理流程如下: 当异常发生时,会自动调用rest_framework.views.exception_hand…

    Spring MVC 1

    什么是Spring Web MVC 官方对Spring MVC的描述是这样的:Spring Web MVC 是基于Severlet API构建的原始Web框架,从一开始就包含在Spring框架中。它的正式名称“Spring Web MVC”来自其源模块的名称(Spring-webmvc),但它…

    一个基于若依(ruoyi-vue3)的小项目部署记录

    一、背景 收到朋友的求助,他拿到了一个项目的源代码,说需要我帮助部署。部署要求是需要域名访问。 因为没有文档和其他资料以及帮助,我先清理了源收到的资料: 1.后端:是java代码,一看就是若依框架。心里大大…

    【实战总结】WMIC在HW行动中的4类关键应用

    WMIC命令完全指南:网络安全运维工程师的深度实践手册 关键词:WMIC命令、Windows管理、网络安全运维、系统信息收集、进程分析、自动化审计 【实战总结】WMIC在HW行动中的4类关键应用 1. 前言 在Windows环境下的网络安全运维中,WMIC&#x…

    LKT4304稳定可靠高兼容性国产安全加密芯片

    随着 IOT 的飞速发展,智能家居,智能汽车,智能工控等物联网设备和云服务的安全问题成为IOT普及的关键障碍。在设计之初就为物联网产品配备正确的安全解决方案,是帮助预防措施的关键所在。LKT4304是凌科芯安专为物联网应用场景而推出…

    Android 网络开发核心知识点

    Android 网络开发核心知识点 一、基础网络通信 1. HTTP/HTTPS 协议 HTTP方法:GET、POST、PUT、DELETE等状态码:200(成功)、404(未找到)、500(服务器错误)等HTTPS加密:SSL/TLS握手过程报文结构:请求头/响应头、请求体/响应体 2. 网…

    DVWA靶场通关笔记-弱会话IDs(Weak Session IDs Medium级别)

    目录 一、Session ID 二、代码审计(Medium级别) 1、配置security为Medium级别 2、源码分析 (1)index.php (2)Medium.php (3)对比分析 (4)渗透思路 三…

    编辑器Vim的快速入门

    如大家所了解的,Vim是一个很古老的编辑器,但是并没有随着时间的流逝消失在编辑器/IDE 的竞争中,Vim 独创的模式机制和 hjkl 移动光标方式使得使用者在编辑文件时可以双手不离开键盘,极大地提升了工作效率。由于 Vim 学习曲线极为陡…

    深度学习核心:从基础到前沿的全面解析

    🧠 深度学习核心:从基础到前沿的全面解析 🚀 探索深度学习的核心技术栈,从神经网络基础到最新的Transformer架构 📋 目录 🔬 神经网络基础:从感知机到多层网络🖼️ 卷积神经网络&am…

    MySQL索引:数据库的超级目录

    MySQL索引:数据库的「超级目录」 想象你有一本1000页的百科全书,要快速找到某个知识点(如“光合作用”): ❌ 无索引:逐页翻找 → 全表扫描(慢!)✅ 有索引:直接…

    景观桥 涵洞 城门等遮挡物对汽车安全性的影响数学建模和计算方法,需要收集那些数据

    对高速公路景观桥影响行车视距的安全问题进行数学建模,需要将物理几何、动力学、概率统计和交通流理论结合起来。以下是分步骤的建模思路和关键模型:一、 核心建模目标 量化视距(Sight Distance, SD):计算实际可用视距…

    Git 用户名和邮箱配置指南:全局与项目级设置

    查看全局配置 git config --global user.name # 查看全局name配置 git config --global user.email # 查看全局email配置 git config --global --list # 查看所有全局配置查看当前项目配置 git config user.name # 查看当前项目name配置 git config user.email # 查看当前项目…

    视频序列和射频信号多模态融合算法Fusion-Vital解读

    视频序列和射频信号多模态融合算法Fusion-Vital解读概述模型整体流程视频帧时间差分归一化TSM模块视频序列特征融合模块跨模态特征融合模块概述 最近看了Fusion-Vital的视频-射频(RGB-RF)融合Transformer模型。记录一下,对于实际项目中的多模…

    frp内网穿透下创建FTP(解决FTP“服务器回应不可路由的地址。使用服务器地址替代”错误)

    使用宝塔面板,点击FTP,下载Pure-FTPd插件 点击Pure-FTPd插件,修改配置文件,找到PassivePortRange, 修改ftp被动端口范围为39000 39003,我们只需要4个被动端口即可,多了不好在内网穿透frp的配置文件中增加…

    STM32控制四自由度机械臂(SG90舵机)(硬件篇)(简单易复刻)

    1.前期硬件准备 2s锂电池一个(用于供电),stm32f103c8t6最小系统板一个(主控板),两个摇杆(用于摇杆模式),四个电位器(用于示教器模式)&#xff0c…

    华为OD机试_2025 B卷_最差产品奖(Python,100分)(附详细解题思路)

    题目描述 A公司准备对他下面的N个产品评选最差奖, 评选的方式是首先对每个产品进行评分,然后根据评分区间计算相邻几个产品中最差的产品。 评选的标准是依次找到从当前产品开始前M个产品中最差的产品,请给出最差产品的评分序列。 输入描述 第…