小白的机器学习之路(四)神经网络的初步认识:基于pytorch搭建自己的神经网络

这篇具有很好参考价值的文章主要介绍了小白的机器学习之路(四)神经网络的初步认识:基于pytorch搭建自己的神经网络。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引子

当前交通大数据业务的需要,需要承担一部分算法工作(数据处理)

小白的机器学习之路(四)神经网络的初步认识:基于pytorch搭建自己的神经网络,机器学习,机器学习,神经网络,pytorch

目标四:

  • 学习深度学习基础:了解神经网络的基本结构、反向传播算法和激活函数等。

目标任务:使用深度学习算法构建一个简单的神经网络模型,并训练模型。

学习计划小贴士:

  • 每天定期复习前几天的内容,巩固知识。

  • 在学习过程中遇到问题及时查阅资料,或向论坛、社区寻求帮助。

  • 尝试在学习过程中动手实践,通过编写代码来加深对算法和原理的理解。

  • 学习过程中保持积极的学习态度和耐心,机器学习和深度学习是复杂的领域,需要持续学习和实践。

  • 学习机器学习基础:了解机器学习的定义、分类和基本原理。

  • 掌握数据预处理:学习数据清洗、特征选择和特征工程的基本方法。

准备一份草稿,后面更新

神经网络的基本结构

神经网络是一种由多个层次(层)的神经元组成的模型,它们之间相互连接。神经网络的基本结构包括:

输入层:接受原始数据的输入。每个输入特征对应于输入层中的一个神经元。

隐藏层:在输入层和输出层之间的一层或多层,执行线性和非线性变换。这些层有助于神经网络学习数据中的复杂模式。

输出层:产生模型的最终输出。输出层的神经元数目通常由任务的性质决定,例如分类任务的输出类别数。

每个神经元都与前一层的所有神经元连接,并带有权重,这些权重是神经网络学习的关键。

反向传播算法和激活函数

反向传播是训练神经网络的核心算法。它通过计算模型输出与实际目标之间的误差,并将误差反向传播到网络中的每一层,以更新权重和偏置,减小误差。这个过程包括两个主要步骤:

前向传播:通过将输入数据从输入层传递到输出层,计算模型的预测输出。

反向传播:计算输出误差,然后从输出层向后传播,以便在每一层更新权重和偏置。

反向传播使用梯度下降等优化算法来最小化误差,使神经网络能够逐渐适应训练数据。

激活函数是神经网络中的非线性函数,它们在隐藏层中引入了非线性性质。常见的激活函数包括:

ReLU(Rectified Linear Unit):f(x) = max(0, x)。它是最常用的激活函数,引入非线性性质并提高了训练速度。
Sigmoid函数:f(x) = 1 / (1 + e^(-x))。它将输入映射到0和1之间,通常用于二元分类问题。
Tanh函数:f(x) = (e^(x) - e^(-x)) / (e^(x) + e^(-x))。它将输入映射到-1和1之间,也用于分类问题。
激活函数在神经网络中引入非线性性,允许神经网络模型学习更复杂的函数。

优化器

优化器是用于调整神经网络权重和偏置的算法,以最小化损失函数。常见的优化器包括:

随机梯度下降(SGD):通过计算损失函数的梯度来更新权重,是最基本的优化算法之一。
Adam:结合了动量和自适应学习率的特性,通常在深度学习中表现出色。
RMSprop:自适应学习率算法,用于处理不同特征的不同梯度尺度。
Adagrad:自适应学习率算法,根据历史梯度信息调整学习率。
优化器的选择可以影响模型的训练速度和性能,通常需要根据具体任务进行调整。

这些是神经网络和深度学习的基本概念。深度学习是一个广泛而深入的领域,涵盖了许多更复杂的技术和概念,但这些基础知识对于理解神经网络的工作原理和进行深度学习研究都是关键的。

如何通过pytorch搭建自己的BP network

这里用到一个新的接口 torch.nn.Module

小白的机器学习之路(四)神经网络的初步认识:基于pytorch搭建自己的神经网络,机器学习,机器学习,神经网络,pytorch

解释一下,torch.nn给了我们一个快速搭建bp的脚手架,我们可以直接设定参数来选择层数、神经元个数、每层的功能等;
对应的api如下

小白的机器学习之路(四)神经网络的初步认识:基于pytorch搭建自己的神经网络,机器学习,机器学习,神经网络,pytorch

小白的机器学习之路(四)神经网络的初步认识:基于pytorch搭建自己的神经网络,机器学习,机器学习,神经网络,pytorch

小白的机器学习之路(四)神经网络的初步认识:基于pytorch搭建自己的神经网络,机器学习,机器学习,神经网络,pytorch

这里,我搭建一个简单网络进行处理,输入一些数据进行测试:

import torch
import torchvision.datasets
from torch.utils.data import Dataset
from PIL import Image
from torch import nn
import torch.nn.functional as F
import numpy as np
from torch.utils.data import DataLoader


class MyData(nn.Module):

    def __init__(self) -> None:
        super().__init__()
        self.conv1 = nn.Conv2d(1,20,1)
        self.conv2 = nn.Conv2d(20,20,5)



    def forward(self, input):
        output = F.relu(self.conv1(input))
        output = F.relu(self.conv2(output))
        return output

dataset  = torchvision.datasets.CIFAR10("../data", train=False, transform=torchvision.transforms.ToTensor(),
                             download=True)
dataloader = DataLoader(dataset, batch_size=64)

MyData = MyData()
x = torch.Tensor([[
        [[0.1000, 0.1000, 0.1000, 0.1000, 0.5000],
        [0.1000, 0.1000, 0.1000, 0.1000, 0.5000],
        [0.1000, 0.1000, 0.1000, 0.1000, 0.5000],
        [0.1000, 0.1000, 0.1000, 0.1000, 0.5000],
        [0.1000, 0.1000, 0.1000, 0.1000, 0.5000]]
]])

print(x)
print("ouput:", MyData(x))


结果分析:

tensor([[[[0.1000, 0.1000, 0.1000, 0.1000, 0.5000],
[0.1000, 0.1000, 0.1000, 0.1000, 0.5000],
[0.1000, 0.1000, 0.1000, 0.1000, 0.5000],
[0.1000, 0.1000, 0.1000, 0.1000, 0.5000],
[0.1000, 0.1000, 0.1000, 0.1000, 0.5000]]]])

ouput: tensor([[[[0.0000]], [[0.1192]], [[0.0000]], [[0.0000]], [[0.0000]], [[0.0115]], [[0.0885]], [[0.0000]],

        self.conv1 = nn.Conv2d(1,20,1)
        self.conv2 = nn.Conv2d(20,20,5)

这里的Conv2d(1,20,1)是指进行卷积,输入通道数1,输出通道为20,我们的卷积核为1*1;
最后进过两轮卷积,最后生成对应的结果;

卷积广泛应用于图像分类,下一章我们将讲到一个图像分类的小项目;

图像分类,根据各自在图像信息中所反映的不同特征,把不同类别的目标区分开来的图像处理方法。它利用计算机对图像进行定量分析,把图像或图像中的每个像元或区域划归为若干个类别中的某一种,以代替人的视觉判读。

卷积神经网络(CNN)是用于图像分类问题的最流行的神经网络模型。CNN背后的一个重要思想是,对图像的局部理解是好的。实际的好处是,参数少将大大缩短了学习所需的时间,并减少了训练模型所需的数据量。CNN具有足够的权重来查看图像的小块,而不是来自每个像素的完全连接的权重网络。

神经网络是深度学习的基本组成部分,用于模拟人类大脑中神经元之间的连接。在这篇博客中,我们将初步认识神经网络,并使用PyTorch构建自己的神经网络,并通过可视化来理解其工作原理。

什么是神经网络?

神经网络是一种机器学习模型,它由多个层次(层)的神经元组成,这些神经元之间相互连接,通过学习来进行信息处理和预测。神经网络的核心是前馈传播(feedforward)和反向传播(backpropagation)。

前馈传播

在前馈传播中,输入数据通过神经网络的各个层,每个层都对输入进行一系列的线性变换和非线性变换(激活函数),最终产生输出。

反向传播

反向传播是用于训练神经网络的关键技术。它通过计算模型输出与实际标签之间的误差,并将误差反向传播到网络中的每一层,以更新权重和偏置,从而减小误差。

使用PyTorch构建神经网络

PyTorch是一个流行的深度学习框架,它使构建和训练神经网络变得更加容易。下面是一个使用PyTorch构建简单神经网络的示例,并通过可视化来理解其结构:

构建神经网络,可视化

import torch
import torch.nn as nn
import matplotlib.pyplot as plt

# 定义神经网络模型
class SimpleNet(nn.Module):
    def __init__(self):
        super(SimpleNet, self).__init__()
        self.fc1 = nn.Linear(2, 5)  # 输入层到隐藏层
        self.relu = nn.ReLU()       # 激活函数
        self.fc2 = nn.Linear(5, 1)  # 隐藏层到输出层

    def forward(self, x):
        x = self.fc1(x)
        x = self.relu(x)
        x = self.fc2(x)
        return x

# 创建神经网络实例
net = SimpleNet()

# 输出神经网络结构
print(net)

# 可视化神经网络结构
def visualize_network(model):
    # 获取每一层的权重矩阵
    layers = [layer for layer in model.children()]
    weights = [layer.weight.data.numpy() for layer in layers if hasattr(layer, 'weight')]
    layer_names = [str(i) for i in range(len(weights))]

    # 可视化权重矩阵
    fig, axs = plt.subplots(1, len(weights), figsize=(15, 5))
    for i, weight in enumerate(weights):
        axs[i].imshow(weight, cmap='viridis', aspect='auto')
        axs[i].set_title(f'Layer {i}')
        axs[i].set_xlabel('Neurons')
        axs[i].set_ylabel('Input Features')
    
    plt.tight_layout()
    plt.show()

# 可视化神经网络结构
visualize_network(net)

演示了如何使用PyTorch构建一个简单的前馈神经网络(Feedforward Neural Network)并使用matplotlib进行可视化。以下是代码的主要部分及其解释:

导入必要的库:

torch:PyTorch库,用于构建和训练神经网络。
torch.nn:PyTorch的神经网络模块,用于定义神经网络层。
matplotlib.pyplot:Matplotlib库,用于可视化神经网络的权重矩阵。
定义神经网络模型:

SimpleNet类是一个简单的神经网络模型。它包括一个输入层、一个隐藏层和一个输出层。
self.fc1:输入层到隐藏层的全连接层,输入特征数为2,输出特征数为5。
self.relu:激活函数层,使用ReLU(Rectified Linear Unit)作为激活函数。
self.fc2:隐藏层到输出层的全连接层,输入特征数为5,输出特征数为1。
创建神经网络实例:

创建了一个SimpleNet类的实例,即神经网络模型net。
输出神经网络结构:

使用print(net)打印神经网络的结构,包括每一层的信息。
可视化神经网络结构:

visualize_network函数用于可视化神经网络的权重矩阵。
通过遍历神经网络的每一层,提取每层的权重矩阵。
使用imshow函数将权重矩阵以图像的形式显示出来,每一列对应一个神经元,每一行对应一个输入特征。
创建一个图形,其中包含每一层的权重矩阵可视化图。
最后,使用plt.show()显示图形。
总的来说,这段代码演示了如何构建一个简单的神经网络模型,然后可视化神经网络中每一层的权重矩阵。这对于理解神经网络内部结构和权重分布非常有帮助,特别是在更复杂的神经网络中。你可以根据需要修改神经网络的结构和层数,并使用可视化来更好地理解和调试你的模型。文章来源地址https://www.toymoban.com/news/detail-615235.html

到了这里,关于小白的机器学习之路(四)神经网络的初步认识:基于pytorch搭建自己的神经网络的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【机器学习】神经网络入门

    如果对于下图使用Logistics回归算法,如果只有x1和x2两个特征的时候,Logistics回归还是可以较好地处理的。它可以将x1和x2包含到多项式中 但是有很多问题所具有的特征远不止两个,甚至是上万个,如果我们想要包含很多特征,那Logistics回归的假设函数将会相当复杂。这些多项

    2024年02月08日
    浏览(71)
  • 【机器学习】神经网络

    神经网络:一种计算模型,由大量的节点(或神经元)直接相互关联而构成。每个节点(除输入节点外)代表一种特定的输出函数(或者认为是运算),称为激励函数;每两个节点的连接都代表该信号在传输中所占的比重(即认为该信号对该节点的影响程度) 神经网络三要素:模型、策略

    2024年02月15日
    浏览(62)
  • 机器学习 | 卷积神经网络

    采用任意一种课程中介绍过的或者其它卷积神经网络模型(例如LeNet-5、AlexNet等)用于解决某种媒体类型的模式识别问题。 卷积神经网络可以基于现有框架如TensorFlow、Pytorch或者Mindspore等构建,也可以自行设计实现。 数据集可以使用手写体数字图像标准数据集,也可以自行构

    2024年01月17日
    浏览(28)
  • 【头歌】机器学习 --- 神经网络

    第1关:神经网络基本概念 第2关:激活函数 第3关:反向传播算法  第4关:使用pytorch搭建卷积神经网络识别手写数字

    2024年02月04日
    浏览(35)
  • 机器学习——RBF神经网络

    本文部分资料与案例来源:《MATLAB神经网络43个案例分析》 再介绍RBF神经网络之前我们先来看一下径向基函数(RBF),在百度百科上,RBF定义如下: 径向基函数是一个取值仅仅依赖于离原点距离的实值函数,也就是Φ(x)=Φ(‖x‖),或者还可以是到任意一点c的距离,c点称为中

    2024年02月08日
    浏览(37)
  • 机器学习 —— 神经网络(matlab)

    目录 一、介绍 二、实验数学原理 三、实验算法和实验步骤 四、实例分析         神经网络是一种运算模型,由大量的节点(或称“神经元”,或“单元”)和之间相互联接构成。每个节点代表一种特定的输出函数,称为激励函数(activation function)。每两个节点间的连接

    2024年02月05日
    浏览(23)
  • 机器学习-神经网络(西瓜书)

    在生物神经网络中,神经元之间相互连接,当一个神经元受到的外界刺激足够大时,就会产生兴奋(称为\\\"激活\\\"),并将剩余的\\\"刺激\\\"向相邻的神经元传导。 神经元模型 模型中 x i x_i x i ​ 表示各个神经元传来的刺激,刺激强度有大有小,所以 w i w_i w i ​ 表示不同刺激的权重

    2024年02月11日
    浏览(24)
  • 预测知识 | 神经网络、机器学习、深度学习

    神经网络 神经网络(neural network)是机器学习的一个重要分支,也是深度学习的核心算法。神经网络的名字和结构,源自人类的大脑构造,即神经网络是模拟生物学中神经元信号传输而形成的一种算法。 机器学习 在开展神经网络或深度学习研究前,需要理清人工智能(AI)、

    2024年02月13日
    浏览(30)
  • 机器学习之神经网络的层次

    大脑是一个巨大的神经元网络,所以神经网络是一个节点网络。根据节点的连接方式,可以创建多种神经网络。最常用的神经网络类型之一采用了如图所示的节点分层结构 正方形节点组称为 输入层 。输入层的节点仅仅作为将输入信号传输到下一个节点的通道。因此,他们不

    2024年02月07日
    浏览(28)
  • 机器学习-11 BP神经网络

    神经网络的训练目的是 希望能够学习到一个模型,实现输出一个期望的目标值 。 学习的方式是 在外界输入样本的刺激下不断改变网络的连接权值 。 传统神经网络主要分为以下几类: 前馈型神经网络,反馈型神经网络和自组织神经网络 。 前馈神经网络将神经元分层排列,

    2024年02月08日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包