深度学习之线性回归,使用maxnet工具

简介: 深度学习之线性回归,使用maxnet工具

1 算法介绍

 

2 代码实现

2.1 比较复杂的代码,函数自己写。

# -*- coding:utf-8 -*-
from matplotlib import pyplot as plt
from mxnet import autograd, nd
import matplotlib as mpl
import random
mpl.rcParams["font.sans-serif"] = ['Fangsong']
mpl.rcParams['axes.unicode_minus'] = False
def visualization(features, labels):
    plt.scatter(features[:, 1].asnumpy(), labels.asnumpy())
    plt.show()
def data_iter(batch_size, features, labels):
    num_examples = len(features)
    indices = list(range(num_examples))
    random.shuffle(indices)  # 读取样本是随机的
    for i in range(0, num_examples, batch_size):
        j = nd.array(indices[i: min(i + batch_size, num_examples)])
        yield features.take(j), labels.take(j)  # take函数根据索引返回函数对应元素
def linreg(x, w, b):
    return nd.dot(x, w) + b
def squared_loss(y_hat, y):
    return (y_hat - y.reshape(y_hat.shape)) ** 2 / 2
def sgd(params, lr, batch_size):
    for params in params:
        params[:] = params - lr * params.grad / batch_size
if __name__ == '__main__':
    num_inputs = 2
    num_examples = 1000
    true_w = [2, -3.4]
    true_b = 4.2
    features = nd.random.normal(scale=1, shape=(num_examples, num_inputs))
    labels = true_w[0] * features[:, 0] + true_w[1] * features[:, 1] + true_b
    # visualization(features, labels)
    batch_size = 10
    # for x, y in data_iter(batch_size, features, labels):
    #     print(x, y)
    #     break
    w = nd.random.normal(scale=0.01, shape=(num_inputs, 1))
    b = nd.zeros(shape=(1,))
    w.attach_grad()
    b.attach_grad()
    lr = 0.03
    num_epoch = 30
    net = linreg
    loss = squared_loss
    for epoch in range(num_epoch):
        for x,y in data_iter(batch_size, features, labels):
            with autograd.record():
                l = loss(net(x, w, b), y)
            l.backward()
            sgd([w, b], lr, batch_size)
        train_l = loss(net(features, w, b), labels)
        print('epoch %d, loss: %lf'%(epoch+1, train_l.mean().asnumpy()))
    print(true_w, true_b)
    print(w, b)

2.2 比较简洁的代码,都是调用的包。

# -*- coding:utf-8 -*-
from matplotlib import pyplot as plt
from mxnet import autograd, nd, init
from mxnet.gluon import data as gdata
import matplotlib as mpl
from mxnet.gluon import nn
from mxnet import gluon
from mxnet.gluon import loss as gloss
import random
mpl.rcParams["font.sans-serif"] = ['Fangsong']
mpl.rcParams['axes.unicode_minus'] = False
def visualization(features, labels):
    plt.scatter(features[:, 1].asnumpy(), labels.asnumpy())
    plt.show()
if __name__ == '__main__':
    num_inputs = 2
    num_examples = 1000
    true_w = [2, -3.4]
    true_b = 4.2
    features = nd.random.normal(scale=1, shape=(num_examples, num_inputs))
    labels = true_w[0] * features[:, 0] + true_w[1] * features[:, 1] + true_b
    # visualization(features, labels)
    batch_size = 10
    dataset = gdata.ArrayDataset(features, labels)
    data_iter = gdata.DataLoader(dataset, batch_size, shuffle=True)
    lr = 0.03
    num_epoch = 30
    net = nn.Sequential()
    net.add(nn.Dense(1))
    net.initialize(init.Normal(sigma=0.01))
    loss = gloss.L2Loss()
    trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': 0.03})
    for epoch in range(num_epoch):
        for x, y in data_iter:
            with autograd.record():
                l = loss(net(x), y)
            l.backward()
            trainer.step(batch_size)
        l=loss(net(features), labels)
        print('epoch %d, loss: %lf' % (epoch + 1, l.mean().asnumpy()))
    dense = net[0]
    print(true_w, dense.weight.data())
    print(true_b, dense.bias.data())
目录
相关文章
|
3天前
|
机器学习/深度学习 算法 TensorFlow
机器学习算法简介:从线性回归到深度学习
【5月更文挑战第30天】本文概述了6种基本机器学习算法:线性回归、逻辑回归、决策树、支持向量机、随机森林和深度学习。通过Python示例代码展示了如何使用Scikit-learn、statsmodels、TensorFlow库进行实现。这些算法在不同场景下各有优势,如线性回归处理连续值,逻辑回归用于二分类,决策树适用于规则提取,支持向量机最大化类别间隔,随机森林集成多个决策树提升性能,而深度学习利用神经网络解决复杂模式识别问题。理解并选择合适算法对提升模型效果至关重要。
16 4
|
18天前
|
机器学习/深度学习 人工智能 PyTorch
《人工智能专栏》专栏介绍 & 专栏目录 & Python与Python | 机器学习 | 深度学习 | 目标检测 | YOLOv5及其改进 | YOLOv8及其改进 | 关键知识点 | 各种工具教程
《人工智能专栏》专栏介绍 & 专栏目录 & Python与Python | 机器学习 | 深度学习 | 目标检测 | YOLOv5及其改进 | YOLOv8及其改进 | 关键知识点 | 各种工具教程
133 1
|
18天前
|
机器学习/深度学习 人工智能 分布式计算
R和Python机器学习:广义线性回归glm,样条glm,梯度增强,随机森林和深度学习模型分析
R和Python机器学习:广义线性回归glm,样条glm,梯度增强,随机森林和深度学习模型分析
|
18天前
|
机器学习/深度学习 数据可视化 Linux
深度学习模型可视化工具——Netron使用介绍
深度学习模型可视化工具——Netron使用介绍
122 2
|
18天前
|
机器学习/深度学习 JSON 自然语言处理
python自动化标注工具+自定义目标P图替换+深度学习大模型(代码+教程+告别手动标注)
python自动化标注工具+自定义目标P图替换+深度学习大模型(代码+教程+告别手动标注)
52 0
|
8月前
|
机器学习/深度学习 API TensorFlow
【深度学习】实验09 使用Keras完成线性回归
【深度学习】实验09 使用Keras完成线性回归
34 0
|
8月前
|
机器学习/深度学习 自然语言处理 TensorFlow
【深度学习】实验06 使用TensorFlow完成线性回归
【深度学习】实验06 使用TensorFlow完成线性回归
47 0
|
8月前
|
机器学习/深度学习 物联网 算法框架/工具
数字时代的自我呈现:探索个人形象打造的创新工具——FaceChain深度学习模型工具
数字时代的自我呈现:探索个人形象打造的创新工具——FaceChain深度学习模型工具
数字时代的自我呈现:探索个人形象打造的创新工具——FaceChain深度学习模型工具