Pytorch深度学习实践1—线性规划

以下是跟着b站刘二大人的课程写的课程代码,以及课后作业

线性规划

课堂代码复现:

import numpy as np#引入numpy,数组运算更为方便
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):
    y_pred=forward(x)
    return (y_pred-y)**2
#初始化存放w和mse(均方误差)的列表,为后续结果展示和画图做准备
w_list=[]
mse_list=[]
#相当于主函数部分
for w in np.arange(0.0,4.1,0.1):
    print('w=',w)
    l_sum=0
    #将每个w的值带进去,得到每个w所对应的均方误差也就是所谓的损失值
    for x_val,y_val in zip(x_data,y_data):
        y_pred_val=forward(x_val)
        loss_val=loss(x_val,y_val)
        l_sum+=loss_val
        print('\t',x_val,y_val,y_pred_val,loss_val)
    print('MSE=',l_sum/3)
    w_list.append(w)
    mse_list.append(l_sum/3)
#画图,通过图像直观得出cost函数的最低点,找到最优的w的值
plt.plot(w_list,mse_list)
plt.ylabel('LOSS')
plt.xlabel('w')
plt.show()

运行结果:

课后作业代码:

课后作业中用了np.meshgrid可以将坐标向量生成坐标矩阵

sp:

x=np.arange(3)

#x=[0,1,2]

y=np.array([7,8])

res=np.meshgord(x,y)

返回结果: [array([ [1,2,3] [1,2,3] ]), array([ [7,7,7] [8,8,8] ])]

import numpy as np
import matplotlib.pyplot as plt
#画3维立体图
from mpl_toolkits.mplot3d import Axes3D
#训练集
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)**2
#生成w,b的二维数组,后续不用再将w,b遍历,因为python中的数组有广播机制,会自动将每个数都参与计算
w_list=np.arange(0.0,4.1,0.1)
b_list=np.arange(0.0,4.1,0.1)
[w,b]=np.meshgrid(w_list,b_list)
mse_list=[]
l_sum=0
#得到每一组w,b对应的损失值
for x_val,y_val in zip(x_data,y_data):
    y_pred_val=forward(x_val)
    loss_val=loss(x_val,y_val)
    l_sum=l_sum+loss_val
    print('\t',x_val,y_val,y_pred_val,loss_val)
print('MSE=',l_sum/3)
#画出三位立体图
mse_list.append(l_sum/3)
fig=plt.figure()
ax1= Axes3D(fig)
ax1.plot_surface(w, b, l_sum/3,cmap='rainbow')#画曲面图
plt.show()

生成结果如下图:

送大家一个画玫瑰花的代码:

from mpl_toolkits.mplot3d import Axes3D

from matplotlib import cm

from matplotlib.ticker import LinearLocator

import matplotlib.pyplot as plt

import numpy as np

fig=plt.figure()


ax = Axes3D(fig)

[x,t]=np.meshgrid(np.array(range(25))/24.0,np.arange(0,575.5,0.5)/575*17*np.pi-2*np.pi)

p=(np.pi/2)*np.exp(-t/(8*np.pi))

u=1-(1-np.mod(3.6*t,2*np.pi)/np.pi)**4/2

y=2*(x**2-x)**2*np.sin(p)

r=u*(x*np.sin(p)+y*np.cos(p))

surf=ax.plot_surface(r*np.cos(t),r*np.sin(t),u*(x*np.cos(p)-y*np.sin(p)),rstride=1,cstride=1,cmap='rainbow',

                  linewidth=0,antialiased=True)

plt.show()

结果:

谢谢观看,后面持续更新,欢迎大家监督哦~

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值