【单层神经网络】基于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():这行代码的作用是在其作用域内的计算将会被记录下来,以便自动求导

相关推荐
知乎的哥廷根数学学派3 小时前
基于卷积特征提取和液态神经网络的航空发动机剩余使用寿命预测算法(python)
人工智能·pytorch·python·深度学习·神经网络·算法
岑梓铭3 小时前
YOLO深度学习(计算机视觉)—毕设笔记(yolo训练效率加快)
人工智能·笔记·深度学习·神经网络·yolo·计算机视觉
AI街潜水的八角3 小时前
基于深度学习神经网络YOLOv4目标检测的汽车车牌识别系统
深度学习·神经网络·yolo
CCPC不拿奖不改名3 小时前
“Token→整数索引” 的完整实现步骤
人工智能·python·rnn·神经网络·自然语言处理·token·josn
叫我:松哥3 小时前
基于神经网络算法的多模态内容分析系统,采用Flask + Bootstrap + ECharts + LSTM-CNN + 注意力机制
前端·神经网络·算法·机器学习·flask·bootstrap·echarts
AI街潜水的八角3 小时前
基于keras框架的LeNet/AlexNet/Vgg16深度学习神经网络花卉/花朵分类识别系统源码
深度学习·神经网络·keras
Yeats_Liao3 小时前
显存瓶颈分析:大模型推理过程中的内存管理机制
python·深度学习·神经网络·架构·开源
程序猿阿伟4 小时前
《从理论到应用:量子神经网络表达能力的全链路优化指南》
人工智能·深度学习·神经网络
AI街潜水的八角5 小时前
基于深度学习神经网络的验证码识别系统
人工智能·深度学习·神经网络
AI街潜水的八角5 小时前
火焰烟雾检测和识别3:基于深度学习YOLO26神经网络实现火焰烟雾检测和识别(含训练代码、数据集和GUI交互界面)
深度学习·神经网络·yolo