一、零碎知识点
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()