《动手学深度学习》用PyCharm实现 学习笔记(2)3.2线性回归的从零开始实现
2020-02-29 17:51
330 查看
第一个问题:matplotlib代码没办法照抄 画图的东西一直报错
查阅matplotlib文档,直接画散点图
惊奇之下 发现把关于画图的代码全删了就好
emmmm
虽然学新东西也蛮重要的
但是先学一下深度学习的东西
代码
from matplotlib import pyplot as plt from mxnet import autograd, nd import random 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 labels += nd.random.normal(scale=0.01, shape=labels.shape) plt.scatter(features[:, 1].asnumpy(), labels.asnumpy(), 1) 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函数根据索引返回对应元素 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() def linreg(X, w, b): # 本函数已保存在d2lzh包中方便以后使用 return nd.dot(X, w) + b def squared_loss(y_hat, y): # 本函数已保存在d2lzh包中方便以后使用 return (y_hat - y.reshape(y_hat.shape)) ** 2 / 2 def sgd(params, lr, batch_size): # 本函数已保存在d2lzh包中方便以后使用 for param in params: param[:] = param - lr * param.grad / batch_size lr = 0.03 num_epochs = 3 net = linreg loss = squared_loss for epoch in range(num_epochs): # 训练模型一共需要num_epochs个迭代周期 # 在每一个迭代周期中,会使用训练数据集中所有样本一次(假设样本数能够被批量大小整除)。X # 和y分别是小批量样本的特征和标签 for X, y in data_iter(batch_size, features, labels): with autograd.record(): l = loss(net(X, w, b), y) # l是有关小批量X和y的损失 l.backward() # 小批量的损失对模型参数求梯度 sgd([w, b], lr, batch_size) # 使用小批量随机梯度下降迭代模型参数 train_l = loss(net(features, w, b), labels) print('epoch %d, loss %f' % (epoch + 1, train_l.mean().asnumpy())) print(true_w, w) print(true_b, b)
输出结果
[[-0.5489446 0.9783404 ] [-0.8288413 0.9591693 ] [-0.57819754 0.22655894] [ 1.5509241 0.63531184] [ 1.0059307 -0.41143978] [-0.23816615 -0.33349228] [ 0.1924875 -0.34041473] [-0.55021375 -1.5918757 ] [-2.513012 1.205448 ] [-0.71230924 -0.45548564]] <NDArray 10x2 @cpu(0)> [-0.22527038 -0.7172271 2.2729282 5.141447 7.6126523 4.874075 5.746613 8.525719 -4.9235134 4.3303328 ] <NDArray 10 @cpu(0)> epoch 1, loss 0.034922 epoch 2, loss 0.000127 epoch 3, loss 0.000049 [2, -3.4] [[ 1.9996107] [-3.399508 ]] <NDArray 2x1 @cpu(0)> 4.2 [4.199965] <NDArray 1 @cpu(0)>
课后练习 更改学习率 观察损失函数下降快慢
学习率0.01
epoch 1, loss 2.185575 epoch 2, loss 0.287532 epoch 3, loss 0.038025
学习率 0.05
epoch 1, loss 0.000542 epoch 2, loss 0.000049 epoch 3, loss 0.000049
学习率 0.10
epoch 1, loss 0.000049 epoch 2, loss 0.000048 epoch 3, loss 0.000048
应该是 学习率越高,损失函数下降速度越快
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 机器学习实战笔记(Python实现)-08-线性回归
- 机器学习入门学习笔记:(2.2)线性回归python程序实现
- 从零开始用Python学习MachineLearning(1)-单变量线性回归用python实现
- 网易公开课“机器学习”学习笔记(一)线性回归
- Ng深度学习笔记 1-线性回归、监督学习、成本函数、梯度下降
- 机器学习笔记_回归_3: 广义线性模型
- 2.7 线性回归算法学习——多元线性回归的实现
- 线性回归学习笔记
- 机器学习实战笔记(3.2)-朴素贝叶斯算法(贝努力模型代码实现)
- 学习笔记:线性回归
- torch学习笔记3.2:实现自定义模块(cpu)
- 学习笔记TF008:机器学习基础 线性回归
- 机器学习入门学习笔记:(3.2)ID3决策树程序实现
- 线性回归学习笔记
- 机器学习十大经典算法之线性回归(学习笔记整理)
- 人工智能算法学习笔记(三)——线性模型之逻辑回归
- Khan公开课 - 统计学学习笔记:(九)线性回归公式,决定系数和协方差
- 斯坦福CS231n 课程学习笔记--线性分类器(Assignment1代码实现)
- java学习笔记4>顺序线性表的实现及其内存分配
- 学习笔记TF024:TensorFlow实现Softmax Regression(回归)识别手写数字