今天本来想跟着刘二大人pytorch的视频学习lstm,但是发现很多基础不好,回过头将从刘二大人的第一集视频开始看起,希望能尽快掌握吧,因为每天好多任务啊,补基础只能抽空补了。后面每天晚上回宿舍后至少看一节,争取年前看完看懂吧。
第二讲 线性模型
给出训练数据x_data和其真实标签y_data,观察数据分布可知,该数据符合线性分布,即y=w*x。我们要做的是找出寻找权重w值(这里是很简单的线性模型,事实上在深度学习中w需要通过不断的反向迭代得到)。使用的方法是,穷举给出权重w,计算预测值和真实之间的差距(即损失),取使得损失最小的w。
线性模型:
均方误差损失函数:
1. 代码实现
import numpy as np
import matplotlib.pyplot as plt
x_data = [1.0, 2.0, 3.0] # 数据
y_data = [2.0, 4.0, 6.0] # 标签
def forward(x):
return x*w
def loss(x, y): # x_val, y_val
y_pred = forward(x) # y_val = x_val * w
return (y_pred - y)**2 # (x_val * w - y_val)**2
# 穷举法
w_list = [] # 创建一个空列表,用于存储不同的w值
mse_list = [] # 创建一个空列表,用于存储不同的均方误差值
for w in np.arange(0.0, 4.1, 0.1): # ! 使用np.numpy生成0.0-4.0、步长为0.1的w序列值,并迭代
print("w=", w) # 输出w值
l_sum = 0 # 初始化一个变量l_sum,用于存储每个w下的总损失
for x_val, y_val in zip(x_data, y_data): # 使用zip函数将x_data、y_data一一对应
y_pred_val = forward(x_val) # 计算预测的y值 y=x*w
loss_val = loss(x_val, y_val) # 计算损失,loss 返回的是 (预测标签-真实标签)**2
l_sum += loss_val # 计算总损失值
print('\t', x_val, y_val, y_pred_val, loss_val) # 输出
print('MSE=', l_sum/3) # 输出均方误差值
w_list.append(w) # 存储w
mse_list.append(l_sum/3) # 均方误差 存入列表
plt.plot(w_list,mse_list)
plt.ylabel('Loss')
plt.xlabel('w')
plt.show()
知识点补充:
- np.arange(0.0, 4.1, 0.1):
numpy.arange([start, ]stop, [step, ]dtype=None)
参数说明
-start: 可选参数,表示起始值
-stop:必选参数,表示终止值
-step:可选参数,表示步长,默认为1
-dtype:可选参数,指定数组的数据类型。
因此:
np.arange(0.0, 4.1, 0.1) 表示生成从0.0-4.0,步长为0.1的序列数,用于迭代。
-
zip()函数用法
功能:可以将多个可迭代对象的元素打包成元组,然后返回一个迭代器,其中每个元组包含来自可迭代对象中相同位置的元素。
zip(*iterables)
-iterables:一个或多个可迭代对象,如列表、元组、字符串、迭代器等。
如:
import numpy as np
a = [1,2,3]
b = [4,5,6]
z = zip(a,b)
print(z)
输出:
[(1,4), (2,5), (3,6)]