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

本文介绍了NumPy中的np.arange、zip函数,以及如何使用np.meshgrid生成网格坐标。还通过Matplotlib实现3D绘图,并展示了Python中计算损失函数和进行深度学习模型训练的基本示例。
摘要由CSDN通过智能技术生成

一、零碎知识点

1.np.arange

np.arange是NumPy中的一个函数,用于创建一个等差数列的一维数组。
格式为np.arange(start, stop, step, dtype=None)

import numpy as np

arr1 = np.arange(10)
print(arr1)  
#output [0 1 2 3 4 5 6 7 8 9]

arr2 = np.arange(1, 11, 2)
print(arr2)
#output [1 3 5 7 9]

arr3 = np.arange(3, -3, -1.5)
print(arr3) 
#output [3. 1.5 0. -1.5]

2.zip(x,y)

zip(x, y)是一个内置函数,其中每个元素由x和对应位置的y组成元组。

x = [1, 2, 3]
y = ['a', 'b', 'c']
zip_obj = zip(x, y)
# 若要查看zip对象中的元素,需要将其转换为列表或遍历它

result = list(zip_obj)
print(result)
#output [(1,'a'),(2,'b'),(3,'c')]

3.np.meshgrid

np.meshgrid是一个用于生成网格坐标的函数,它接受多个一维数组作为输入,并生成一个多维数组(y的列数*x的列数的多维数组)。

import numpy as np

x = np.array([1, 2, 3])  # 第一个一维数组 1*3
y = np.array([4, 5, 6, 7])  # 第二个一维数组 1*4
X, Y = np.meshgrid(x, y)
print(X)
#output 4*3的数组
#[[1,2,3]
# [1,2,3]
# [1,2,3]
# [1,2,3]]

print(Y)
#output 4*3的数组
#[[4,4,4]
# [5,5,5]
# [6,6,6]
# [7,7,7]]

其中X的每一行都是x的复制,Y的每一列都是y的复制。

4.3D画图语法

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

fig = plt.figure()
ax = Axes3D(fig)
ax.plot_surface(w, b, sum / 3)
plt.show()

fig=plt.figure() 创建一个matplotlib对象
ax=Axes3D(fig)创建三维坐标轴
ax.plot_surface(w,b,sum/3)w,b是一维数组,分别为x轴和y轴上面的坐标点,sum/3是z轴上面的值

二、视频代码

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):
    y_pred = forward(x)
    return (y_pred - y) * (y_pred - y)

w_list = []
mse_list = []
for w in np.arange(0.0,4.1,0.1):
    print('w=',w)
    sum = 0
    for x_val,y_val in zip(x_data,y_data):
        y_pred_val = forward(x_val)
        loss_val = loss(x_val,y_val)
        sum += loss_val
        print('\t',x_val,y_val,y_pred_val,loss_val)
    print('MSE=',sum/3)
    w_list.append(w)
    mse_list.append(sum/3)

plt.plot(w_list,mse_list)
plt.ylabel('loss')
plt.xlabel('x')
plt.show()

在这里插入图片描述

在这里插入图片描述
由运行结果和图像可知,当权重ω=2时,均方误差为0,损失值最小。
在这里插入图片描述

三、作业代码

参考代码链接: 陈同学爱吃方便面 PyTorch 深度学习实践 第2讲

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

# 设置函数为y=2x+3
x_data = [1.0, 2.0, 3.0]
y_data = [5.0, 7.0, 9.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_list = np.arange(0.0, 4.0, 0.1)
b_list = np.arange(0.0, 4.0, 0.1)
[w, b] = np.meshgrid(w_list, b_list)

sum = 0
for x_val, y_val in zip(x_data, y_data):
    y_pred_val = forward(x_val)
    loss_val = loss(x_val, y_val)
    sum += loss_val
    print(loss)

fig = plt.figure()
ax = Axes3D(fig)
ax.plot_surface(w, b, sum / 3)
plt.show()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

失舵之舟-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值