美文网首页
深度学习_线性回归初探

深度学习_线性回归初探

作者: VictorHong | 来源:发表于2019-07-31 17:04 被阅读0次

练习 线性回归从零开始

import mxnet as mx
from mxnet import nd
import random
from mxnet import autograd as ag

生成数据

num_inputs = 2
num_examples = 2000

true_w = [5.5,-2.6]
true_b = 3.4

features = nd.random.normal(shape=(num_examples,num_inputs))
labels = features[:,0]*true_w[0] + features[:,1]*true_w[1] + true_b
labels += nd.random.normal(scale=0.01,shape=labels.shape)

features[0:10],labels[0:10]
(
 [[ 1.1630785   0.4838046 ]
  [ 0.29956347  0.15302546]
  [-1.1688148   1.558071  ]
  [-0.5459446  -2.3556297 ]
  [ 0.54144025  2.6785064 ]
  [ 1.2546344  -0.54877406]
  [-0.68106437 -0.1353156 ]
  [ 0.37723133  0.41016456]
  [ 0.5712682  -2.7579627 ]
  [ 1.07628    -0.6141325 ]]
 <NDArray 10x2 @cpu(0)>, 
 [ 8.5570145e+00  4.6516924e+00 -7.0968418e+00  6.5224156e+00
  -5.8473641e-01  1.1730561e+01  1.0545446e-02  4.3994021e+00
   1.3717617e+01  1.0907241e+01]
 <NDArray 10 @cpu(0)>)

获取小批量数据

def data_iter(batch_szie,features,labels):
    num_examples = len(features)
    idx = list(range(num_examples))
    random.shuffle(idx)
    for i in range(0,num_examples,batch_szie):
        j = nd.array(idx[i:min(i+batch_szie,num_examples)])
        yield features.take(j),labels.take(j)
for x,y in data_iter(10,features,labels):
    print(x,y)
    break
[[ 1.5999995  -0.5617653 ]
 [ 0.75412536  0.12447102]
 [-0.69230694 -0.7290668 ]
 [-2.5128932  -0.26212415]
 [ 0.28285232  1.1859419 ]
 [ 0.34267116 -0.36542156]
 [ 0.91700655  1.0906272 ]
 [-0.4991787   0.23789974]
 [-1.1900624   0.02474929]
 [ 0.9383549  -0.75709605]]
<NDArray 10x2 @cpu(0)> 
[13.677179    7.2258916   1.4948013  -9.739497    1.8581214   6.23214
  5.5850635   0.03775719 -3.2022686  10.532288  ]
<NDArray 10 @cpu(0)>

初始化模型参数

w = nd.random.normal(scale=0.01,shape=(num_inputs,1))
b = nd.zeros(shape=1)
w,b
(
 [[ 0.00538086]
  [-0.0016038 ]]
 <NDArray 2x1 @cpu(0)>, 
 [0.]
 <NDArray 1 @cpu(0)>)
w.attach_grad()
b.attach_grad()

定义模型

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 param in params:
        param[:] = param - param.grad*lr/batch_size

训练

lr = 0.01
epochs = 5
net = linreg
loss = squared_loss
batch_size = 10

for epoch in range(1,epochs+1):
    for X,y in data_iter(batch_size,features,labels):
        with ag.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 %f" % (epoch,train_l.mean().asscalar()))
epoch 1 ,loss 0.402907
epoch 2 ,loss 0.006754
epoch 3 ,loss 0.000162
epoch 4 ,loss 0.000050
epoch 5 ,loss 0.000048
true_w,w
([5.5, -2.6], 
 [[ 5.499551 ]
  [-2.6001654]]
 <NDArray 2x1 @cpu(0)>)
true_b,b
(3.4, 
 [3.400331]
 <NDArray 1 @cpu(0)>)

相关文章

  • 深度学习_线性回归初探

    练习 线性回归从零开始 生成数据 获取小批量数据 初始化模型参数 定义模型 定义损失函数 定义优化算法 训练

  • 深度学习-1

    深度学习基础 介绍单层神经网络:线性回归和softmax回归多层神经网络:多层感知机 1.线性回归 例如房价预测,...

  • 机器学习初探-线性回归

    题外话 我很早就对人工智能是非常感兴趣的。记得我大学的毕业论文,就是使用遗传算法解决了一个经典的寻路问题。 我一直...

  • 机器学习初探-线性回归

    题外话 我很早就对人工智能是非常感兴趣的。记得我大学的毕业论文,就是使用遗传算法解决了一个经典的寻路问题。我一直对...

  • 线性回归初探

    这篇文章躺在简书的草稿里好久了,一直没有鼓起勇气来写,理由其实也很简单,自己并没有学透这个概念。另外也以前也完全没...

  • 线性回归的实现

    选自 李沐 《动手学深度学习》 第三章。 3.3 线性回归的简洁实现 随着深度学习框架的发展,开发深度学习应用变得...

  • 深度学习——keras模型的保存和加载

    在上一篇关于深度学习的推文中,我们介绍了使用Keras来实现机器学习中的线性回归和非线性回归算法。不过在那期的推文...

  • 大纲

    一、回归算法 1:线性回归 2:逻辑回归 二、神经网络 1:深度学习 三、SVM(支持向量机) 四、聚类算法 五、...

  • TensorFlow自学第2篇——线性回归

    很多道友都说,MNIST是深度学习领域的Hello World,我认为这种说法欠妥。应该这么说,线性回归是深度学习...

  • 【深度学习实践】01. 线性回归

    线性模型既是机器学习中最基础的学习模型,也是深度神经网络中的神经元基础。而线性回归是借助线性模型解决一个或者多个自...

网友评论

      本文标题:深度学习_线性回归初探

      本文链接:https://www.haomeiwen.com/subject/uebtdctx.html