刘二大人《PyTorch深度学习实践》线性模型

zip函数:略

meshgrid  (画三维图形常用函数)

meshgrid中的结果X是以第一参数x在垂直方向上的复制和堆叠。
meshgrid中的结果Y是以第二参数y的转置(变为列向量)在水平方向上的复制和堆叠。

 课中讲的用y=wx拟合数据

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]

####实现线性模型y=wx拟合上述数据并画图


def loss(x, y,y_pred):
    return (y_pred - y) ** 2   #某点的loss是差值的平方

def main():
    # 穷举法
    w_list = []
    mse_list = []
    for w in np.arange(0.0, 4.1, 0.1):   #w从0.0到4.0步长0.1
        print("w=", w)
        loss_sum = 0
        for x_val, y_val in zip(x_data, y_data):   #zip函数
            y_pred_val = x_val*w  #在当前权值下计算预测值
            loss_val = loss(x_val, y_val,y_pred_val) #计算当前点的loss值
            loss_sum += loss_val
            print('\t', x_val, y_val, y_pred_val, loss_val)
        print('MSE=', loss_sum / 3)   #计算平均loss值

        w_list.append(w)
        mse_list.append(loss_sum / 3)

    plt.plot(w_list, mse_list)
    plt.ylabel('Loss')
    plt.xlabel('w')
    plt.show()

 课后作业:用y=wx+b拟合数据并画3维图

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D


#这里设函数为y=wx+b
x_data = [1.0,2.0,3.0]
y_data = [2.0,4.0,6.0]

def forward(x):
    return x * w + b

def loss(x,y):
    y_pred = forward(x)
    return (y_pred-y)*(y_pred-y)

mse_list = []
W=np.arange(0.0,4.1,0.1)
B=np.arange(0.0,4.1,0.1)
[w,b]=np.meshgrid(W,B)    #w和b都是41*41的矩阵,不过w是从W的角度,b是从B的角度

l_sum = 0
for x_val, y_val in zip(x_data, y_data):     #用了meshgrid只需要循环3次
    y_pred_val = forward(x_val)    #这样可以一次计算41*41个
    print(y_pred_val)
    loss_val = loss(x_val, y_val)    #一次计算41*41个loss
    l_sum += loss_val               #总共加3次,3个点的loss矩阵加起来

fig = plt.figure()   #创建画板
ax = Axes3D(fig)   #3d图形
ax.plot_surface(w, b, l_sum/3)
ax.set_xlabel('w')
ax.set_ylabel('b')
ax.set_zlabel('mse')

plt.show()

绘制3d曲面

 

 使用

ax.plot_wireframe

效果如图,仅使用线框进行绘制

 

使用

ax.scatter

效果如图,散点图

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值