gitfox 发表于 2024-9-6 16:23:54

从零开始的深度学习1:实现线性回归

本帖最后由 gitfox 于 2024-9-7 10:56 编辑

材料准备:一.安装Miniconda,需要勾选ADDAnaconda to the system PATH environment variable 选项。

               二.前往https ://zh.d2l.ai/d2l-zh-1.1.zip 下载压缩包并解压,在该文件地址栏输入cmd。
               三.使用conda创建虚拟环境:conda env create -f environment.yml 。
               四.激活已创建的环境:conda activate gluon 。
               五.输入jupyter notebook打开jupyter notebook(如果没有安装用pip install jupyter安装)

所需要安装的python第三方库:IPython,matplotlib,mxnet

预备知识:什么是深度学习:深度学习是一种机器学习算法。深度指神经网络的层数,学习指训练神经网络的过程。
               什么是线性回归:线性回归是一种单层神经网络,它可以解决预测连续值的问题(如预测气温,房价),而分类与之相反,用于解决离散值的问题。
                   可以用数学将其表示为:y _=w1x1+w2x2...+wnxn+b
                   其中w1,w2...wn和b均为标量,它们是线性回归模型的参数,w表示权重,b表示偏差,而y_则表示对真实值y的预测。
               机器学习方法的构成:模型,损失函数,优化算法,模型评估
实践部分:
             1.生成数据集
             首先,我们导入所需要的包和模块,然后我们创建一个样本数为1000的训练数据集,其特征数为2(可以理解为因变量有两个,即有x1和x2),设权重w= T(T表示对矩阵转置),偏差b=4.2 。最后,我们加入噪声c,让噪声服从均值为0,标准差为0.01的正态分布。
(噪声代表了数据集中无意义的干扰)

         2.生成关系图
         features里储存着很多个长度为2的向量,可以理解为是由很多个组成, 而在分别乘以同样向量长度为2的权重后再加上噪声后,显然得到的labels存储着很多个长度为1的向量,即标量,可以理解为是由很多个y_组成的。我们查看features列表和labels列表中的第一个数据来检验一下。如图所示,符合我们的预期。
      然后,我们通过featrures[:,1] 和标签labels来生成一个散点图,可以理解为生成一个x2和y_的关系图。通过这个关系图,我们可以直观的观察到两者之间的线性关系。



      3.读取数据集
         在训练模型时,我们需要遍历数据集并不断读取小批量数据样本,这里我们定义一个函数,它每次返回batch_size(批量大小)个随机样本的特征和标签。
      
      num_examples 为样本数(features中向量的数量),indices是根据样本数构建的索引列表,如样本数是10,则生成列表 。
      random.shuffle()将这个列表随机打乱,以达到随机读取样本的目的。
      range(0,num_examples,batch_size) 中前两个表示范围,而batch_size表示步长,即达到每次返回批量大小的目的,而take函数根据索引返回对应元素。
       让我们设置批量大小为10,并打印根据这种方法读取到的features和labels的值,结果如图所示.
       4.初始化模型参数
      我们将权重初始化城均值为0,标准差为0.01的正态随机数,偏差则初始化为0。
      
      再之后我们将不断迭代它们的值,所以创建它们的梯度。
    5.定义模型
   这里我们使用dot函数来做矩阵乘法。
   
    6.定义损失函数
   这里我们使用平方函数,这也是最为常用的选择。
   
   7.定义优化算法
   sgd函数实现了小批量随机梯度下降的算法。
   
   8.训练模型
   
在训练中,我们将多次迭代模型参数。在每次迭代中,我们根据当前读取的数据,通过调用反向函数backward计算小批量随机梯度,并通过sgd函数来优化权重和偏差,其中num_epochs代表迭代周期的数量。
训练完成后,来对比一下训练得到的参数和生成训练集的真实参数,可以看出非常相近。

#演示案例来自于《dive into deep learning》
      


凯诺斯 发表于 2024-9-6 16:31:06

天啦噜挺专业的惹,线性回归什么的感觉已经忘光了{:6_169:}

前方无怪 发表于 2024-9-6 16:41:58

文科生表示开头就开始犯迷糊了{:4_87:},好复杂的感觉

折木 发表于 2024-9-6 16:53:57

环境配置比较麻烦 代码还能看懂{:6_169:}

肥而快乐 发表于 2024-9-6 17:07:28

没想到会在这里看见这种内容

辞筠裳 发表于 2024-9-6 17:22:30

emmmm,我能说我完全看不懂嘛:'(

娱乐法师火布偶 发表于 2024-9-6 17:41:55

最近在工作上面根据需求写了随机森林分类器和模糊C均值的算法,具体实现都是网上抄的,反正能用,毕竟写python的人很多

PURO_ 发表于 2024-9-6 17:51:16

学过运筹学的我头开始痛了,数据分析打咩

三分春色描来易 发表于 2024-9-6 17:54:45

啊?泥潭真的啥都有啊

zhuovboyan 发表于 2024-9-6 18:17:27

0-0 好专业硬核的感觉 看得头晕了。。QAQ

sonyboy049 发表于 2024-9-6 18:50:59

:lol完全看不懂啊 消失的记忆

l312687174 发表于 2024-9-6 19:10:14

啊?   重生之我在gamemale学深度学习?

肥鱼 发表于 2024-9-6 19:11:47

完全看不懂是啥子东东 233

dwsleyi 发表于 2024-9-6 19:25:35

我的天……通讯录里还有这等牛逼人物
感觉自己也受益了

cinder 发表于 2024-9-6 19:31:44

提醒一下,論壇不能回自己的帖子避免灌水,
請善用文章左下的編輯,已回的帖子記得去請版主刪除/w\

毛茸茸兽兽 发表于 2024-9-6 20:29:58

吼(´×ω×`)训练模型的?挠头ing不知道是不是放错版块了哇

福黎 发表于 2024-9-6 20:42:00

大学的时候学过一点,但是感觉已经完全看不懂了.jpg

silencedonkey 发表于 2024-9-6 20:53:30

楼主加油,这个领域还是有很多内容可学的
我最近也在补深度学习基础知识,虽然已经用了很多年,但面试如果问到一些基础问题,平时根本不会想这么细

kanya 发表于 2024-9-6 21:10:12

认真的?我要晕了,看见数学头就大起来了

我们一起学狗叫 发表于 2024-9-6 21:11:20

我在哪儿?我在干嘛?{:6_165:}
页: [1] 2 3
查看完整版本: 从零开始的深度学习1:实现线性回归