【单层神经网络】基于MXNet库简化实现线性回归

写在前面

同最开始的两篇文章

完整程序及注释

python 复制代码
'''
导入使用的库
'''
# 基本
from mxnet import autograd, nd, gluon
# 模型、网络
from mxnet.gluon import nn                     
from mxnet import init
# 学习
from mxnet.gluon import loss as gloss
# 数据集
from mxnet.gluon import data as gdata
python 复制代码
'''
生成测试数据集
'''
# 被拟合参数
true_w = [2, -3.4]      # 特征的权重系数
true_b = 4.2            # 整体模型的偏置
# 创建训练数据集
num_inputs = 2          
num_examples = 1000
features = nd.random.normal(loc=0, scale=1, shape=(num_examples, num_inputs))  # 均值为0,标准差为1
labels = true_w[0]*features[:,0] + true_w[1]*features[:,1] + true_b
labels_noise = labels + nd.random.normal()
python 复制代码
'''
确定模型
'''
net = nn.Sequential()                       # 声明一个Sequential容器,存放Neural Network
net.add(nn.Dense(1))                        # 向容器中添加一个全连接层,且不使用激活函数,"1"表示该全连接层的输出神经元有1个
net.initialize(init.Normal(sigma=0.01))     # 权重参数随机取自均值=0,标准差=0.01的高斯分布,bias默认=0
python 复制代码
'''
确定学习方式
'''
loss = gloss.L2Loss()       # L2范数损失 等价于 平方损失
# .collect_params()方法获取net实例的全部参数,并提供给trainer
# 选择小批量随机梯度下降法(sgd)寻优,学习率为0.03
trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': 0.03})
python 复制代码
'''
数据集采样
'''
batch_size = 10
dataset = gdata.ArrayDataset(features, labels_noise)        # 将标签和特征组合成完整数据集
# DataLoader返回一个迭代器,每次从数据集中提取一个长度为batch_size的子集出来
data_iter = gdata.DataLoader(dataset, batch_size, shuffle=True) # shuffle=True 打乱数据集(随机采样)
python 复制代码
'''
开始训练
'''
num_epoch = 3       # 训练轮次
for epoch in range(0, num_epoch):
    for x, y in data_iter:          # 随机取出一组小批量,同时做到遍历
        with autograd.record():     # 自动保存梯度数据
            l = loss(net(x), y)     # 将得到的一组特征放入网络,求得到的输出与对应的标签(含噪声)的损失
        l.backward()                # 计算该次损失的梯度
        trainer.step(batch_size)    # 反向传播,基于l.backward()得到的梯度来更新模型的参数
    l = loss(net(features), labels_noise)     # 该轮训练结束后,求网络对数据集特征的输出,再求输出和含噪声标签的损失
    print('epoch %d, mean loss: %f' % (epoch+1, l.mean().asnumpy()))  # 展示训练轮次和数据集损失的平均

具体函数解释

trainer.step(batch_size):batch_size指定了当前批的大小,用于计算这次梯度下降的步长

with autograd.record():这行代码的作用是在其作用域内的计算将会被记录下来,以便自动求导

相关推荐
聚客AI1 小时前
深度解构神经网络的底层引擎:从感知机到反向传播的数学之旅
人工智能·神经网络·掘金·日新计划
狂小虎3 小时前
01 Deep learning神经网络的编程基础 二分类--吴恩达
深度学习·神经网络·分类
天天代码码天天20 小时前
C# Onnx 动漫人物头部检测
人工智能·深度学习·神经网络·opencv·目标检测·机器学习·计算机视觉
codegarfield1 天前
关于神经网络中的激活函数
人工智能·深度学习·神经网络·激活函数
Steve lu1 天前
回归任务和分类任务损失函数详解
pytorch·深度学习·神经网络·机器学习·分类·回归
Coovally AI模型快速验证1 天前
基于YOLO-NAS-Pose的无人机象群姿态估计:群体行为分析的突破
人工智能·神经网络·算法·yolo·目标检测·无人机·cocos2d
天天代码码天天1 天前
C# Onnx 动漫人物人脸检测
人工智能·深度学习·神经网络·opencv·目标检测·机器学习·计算机视觉
cndes1 天前
用“红烧鱼”类比说明卷积神经网络CNN的概念
深度学习·神经网络·cnn
lishaoan772 天前
实验设计与分析(第6版,Montgomery著,傅珏生译) 第10章拟合回归模型10.9节思考题10.12 R语言解题
回归·r语言·线性回归·残差分析·实验设计与数据分析·回归显著性
蹦蹦跳跳真可爱5892 天前
Python----目标检测(《SSD: Single Shot MultiBox Detector》论文和SSD的原理与网络结构)
人工智能·python·深度学习·神经网络·目标检测·计算机视觉