|
本帖最后由 gitfox 于 2024-9-7 10:56 编辑
材料准备:一.安装Miniconda,需要勾选ADD Anaconda 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= [2,-3.4]T(T表示对矩阵转置),偏差b=4.2 。最后,我们加入噪声c,让噪声服从均值为0,标准差为0.01的正态分布。
(噪声代表了数据集中无意义的干扰)
2.生成关系图
features里储存着很多个长度为2的向量,可以理解为是由很多个[x1,x2]组成, 而在分别乘以同样向量长度为2的权重后再加上噪声后,显然得到的labels存储着很多个长度为1的向量,即标量,可以理解为是由很多个y_组成的。我们查看features列表和labels列表中的第一个数据来检验一下。如图所示,符合我们的预期。
然后,我们通过featrures[:,1] 和标签labels来生成一个散点图,可以理解为生成一个x2和y_的关系图。通过这个关系图,我们可以直观的观察到两者之间的线性关系。
3.读取数据集
在训练模型时,我们需要遍历数据集并不断读取小批量数据样本,这里我们定义一个函数,它每次返回batch_size(批量大小)个随机样本的特征和标签。
num_examples 为样本数(features中向量的数量),indices是根据样本数构建的索引列表,如样本数是10,则生成列表 [0,1,2,3,4,5,6,7,8,9]。
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》
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
查看全部评分
- 前方无怪
:
sgd函数的图片发错了
这里补充一下:
def sgd (params,lr,batch_size):
for param in params:
param[:]=param-lr*param.grad/batch_size
- 前方无怪
:楼主请勿回复自己的帖子,如需对帖子内容进行补充或者修改,可以使用左下角的“编辑”功能
-
|