• 【深度学习实验】线性模型(一):使用NumPy实现简单线性模型:搭建、构造损失函数、计算损失值


     

    目录

    一、实验介绍

     二、实验环境

    1. 配置虚拟环境

    2. 库版本介绍

    三、实验内容

    0. 导入库

    1. 定义线性模型linear_model

    2. 定义损失函数loss_function

    3. 定义数据

    4. 调用函数


     

     

     

    一、实验介绍

    • 使用Numpy实现
      • 线性模型搭建
      • 构造损失函数
      • 计算损失值

     

     二、实验环境

            本系列实验使用了PyTorch深度学习框架,相关操作如下:

    1. 配置虚拟环境

    conda create -n DL python=3.7 
    conda activate DL
    pip install torch==1.8.1+cu102 torchvision==0.9.1+cu102 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
    
    conda install matplotlib
     conda install scikit-learn

    2. 库版本介绍

    软件包本实验版本目前最新版
    matplotlib3.5.33.8.0
    numpy1.21.61.26.0
    python3.7.16 
    scikit-learn0.22.11.3.0
    torch1.8.1+cu1022.0.1
    torchaudio0.8.12.0.2
    torchvision0.9.1+cu1020.15.2

     

    三、实验内容

    ChatGPT:

            线性模型是一种基本的机器学习模型,用于建立输入特征与输出之间的线性关系。它是一种线性组合模型,通过对输入特征进行加权求和,再加上一个偏置项,来预测输出值。

            线性模型的一般形式可以表示为:y = w1x1 + w2x2 + ... + wnxn + b,其中y是输出变量,x1, x2, ..., xn是输入特征,w1, w2, ..., wn是特征的权重,b是偏置项。模型的目标是通过调整权重和偏置项,使预测值与真实值之间的差异最小化。

    线性模型有几种常见的应用形式:

    1. 线性回归(Linear Regression):用于建立输入特征与连续输出之间的线性关系。它通过最小化预测值与真实值的平方差来拟合最佳的回归直线。

    2. 逻辑回归(Logistic Regression):用于建立输入特征与二分类或多分类输出之间的线性关系。它通过使用逻辑函数(如sigmoid函数)将线性组合的结果映射到概率值,从而进行分类预测。

    3. 支持向量机(Support Vector Machines,SVM):用于二分类和多分类问题。SVM通过找到一个最优的超平面,将不同类别的样本分隔开。它可以使用不同的核函数来处理非线性问题。

    4. 岭回归(Ridge Regression)和Lasso回归(Lasso Regression):用于处理具有多重共线性(multicollinearity)的回归问题。它们通过对权重引入正则化项,可以减小特征的影响,提高模型的泛化能力。

            线性模型的优点包括简单、易于解释和计算效率高。它们在许多实际问题中都有广泛的应用。然而,线性模型也有一些限制,例如对非线性关系的建模能力较弱。在处理复杂的问题时,可以通过引入非线性特征转换或使用核函数进行扩展,以提高线性模型的性能。

    本系列为实验内容,对理论知识不进行详细阐释

    (咳咳,其实是没时间整理,待有缘之时,回来填坑)

     

    0. 导入库

    首先,导入了numpy库,用于进行数值计算。

    import numpy as np

     

    1. 定义线性模型linear_model

            该函数接受输入数据x,使用随机生成的权重w和偏置b,计算输出值output。这里的线性模型的形式为 output = x * w + b

    1. def linear_model(x):
    2. w = np.random.randn(1)
    3. b = np.random.randn(1)
    4. output = np.dot(x, w) + b
    5. return output

     

    2. 定义损失函数loss_function

            该函数接受目标值y和模型预测值prediction,计算均方误差损失。均方误差损失的计算公式为 (prediction - y) * (prediction - y)

    1. def loss_function(y, prediction):
    2. loss = (prediction - y) * (prediction - y)
    3. return loss

     

    3. 定义数据

    • 生成了一个形状为(5, 1)的随机输入数据x,每个元素都是在0到1之间的随机数。
    • 生成了一个形状为(5,)的目标值y,包含了5个标签(1或-1),用于模型训练和损失计算。
    • 打印了数据的信息,包括每个样本的输入值x和目标值y
    1. x = np.random.rand(5, 1)
    2. y = np.array([1, -1, 1, -1, 1]).astype('float')
    3. print("The data is as follows:")
    4. for i in range(x.shape[0]):
    5. print("Item " + str(i), "x:", x[i][0], "y:", y[i])

    7f3d4ccc2e19464a99db8f09ac2b533b.png

     

    4. 调用函数

    • 调用linear_model函数,传入输入数据x,得到模型的预测值prediction
    • 调用loss_function函数,传入目标值y和预测值prediction,得到损失值loss
    • 打印了每个样本的损失值。
    1. prediction = linear_model(x)
    2. loss = loss_function(y, prediction)
    3. print("The all loss value is:")
    4. for i in range(len(loss)):
    5. print("Item ", str(i), "Loss:", loss[i])

    66793c45f637471fb4ce2662f515f77f.png


    注意:

            本实验的线性模型仅简单地使用随机权重和偏置,计算了模型在训练集上的均方误差损失,没有使用优化算法进行模型参数的更新。

            通常情况下会使用梯度下降等优化算法来最小化损失函数,并根据训练数据不断更新模型的参数,具体内容请听下回分解。

     

     

     

     

     

  • 相关阅读:
    从零开始教你dubbo自定义负载均衡策略
    MYSQL运维篇(已完结)
    c-const修饰指针-day16
    Flink学习9:配置idea开发flink-Scala程序环境
    【面试题】为什么Object.prototype.toString.call() 可以准确判断对象类型?
    ubuntu下载conda
    Vue的`provide`和`inject`特性:上下文传递与数据共享
    Java算法(五):手写数组逆置API方法,实现数组逆置。 while实现 && for循环实现
    2022年下半年网络规划设计师下午真题及答案解析
    AI面试必备-《家居必备的AI精选资源列表》免费分享
  • 原文地址:https://blog.csdn.net/m0_63834988/article/details/132925337