跟着刘二大人学pytorch,补全一下我的基础缺失
1.numpy基础
import numpy as np
from PIL import Image
a=np.array([1,2,3]) #生成一维数组
print(a)
b=np.arange(1,4)#创建等差数组,默认等差是1,数组为1,2,3,取头不取尾
print(b)
c=np.arange(1,5,2)#创建等差数组,等差是2,数组为1,3
print(c)
d=np.sin(a)#三角函数sin
print(d)
e=np.zeros((3,2))#创建全0数组3行两列
print(e)
f=np.ones((1,2))#创建全1数组,1行2列
print(f)
g=np.random.rand(3,4)#生成三行四列的随机数
print(g)
h=np.linspace(5,10,2)#前两个参数是区间的范围,第三个参数是输出样本的总数
print(h)
i=np.dot(a,b)#两个向量点乘
print(i)
j=c*h
print(j)
输出
[1 2 3]
[1 2 3]
[1 3]
[0.84147098 0.90929743 0.14112001]
[[0. 0.][0. 0.][0. 0.]]
[[1. 1.]]
[[0.63021331 0.97544754 0.33707492 0.0178626 ][0.12280448 0.10036752 0.7717687 0.07250648][0.13538487 0.99980146 0.19301595 0.54427721]]
[ 5. 10.]
14
[ 5. 30.]
(512, 768, 3)
numpy还可用来裁剪图片
im=Image.open('dataset/train/ants_image/0013035.jpg')
im.show()#显示图片
im=np.array(im)#将图片转为numpy数组
print(im.shape)
im_cropped=im[50:400,200:600,:] #裁剪出图片的某个部分
Image.fromarray(im_cropped).show()#先将其转为图片,然后展示图片
2.Python zip() 函数
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
测试代码:
a=[1,2,3]
b=[4,5,6]
c=zip(a,b)
c=list(c)
print(c)
[(1, 4), (2, 5), (3, 6)]
在线性模式中会用到
: for x_val,y_val in zip(X,Y):
3.pyplot绘图
最基础的线性图
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,1,11)# 从0到1,个数为11的等差数列
print(x)
y = 2*x
plt.plot(x,y)
plt.show()
画两条线设置图例
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,1,11)# 从0到1,个数为11的等差数列
y1 = 2*x
y2 = 3*x
plt.figure()
plt.plot(x,y1,label='y1')
plt.plot(x,y2,label='y2')
plt.legend()
plt.show()
4.mplot3d绘图
曲面图
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
#生成3d曲面图
def f(x,y):return x**5+y**5fig=plt.figure() #生成画框ax=Axes3D(fig)X=np.arange(0,2,0.1)
Y=np.arange(0,2,0.1)X,Y=np.meshgrid(X,Y) #网格化ax.plot_surface(X,Y,f(X,Y),rstride=1,cstride=1)plt.title('mplot3d',fontsize=20)
plt.show()
散点图
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as npxs=np.random.randint(30,40,100)
ys=np.random.randint(20,30,100)
zs=np.random.randint(10,20,100)xs2=np.random.randint(50,60,100)
ys2=np.random.randint(30,40,100)
zs2=np.random.randint(50,70,100)xs3=np.random.randint(10,30,100)
ys3=np.random.randint(40,50,100)
zs3=np.random.randint(40,50,100)fig=plt.figure()
ax=Axes3D(fig)
ax.scatter(xs,ys,zs)
ax.scatter(xs2,ys2,zs2,c='r',marker='^')
ax.scatter(xs3,ys3,zs3,c='g',marker='*')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_ylabel('z')
plt.title('mplot3d')
plt.show()
5.只有w一个参数的线性回归
import matplotlib.pyplot as plt
import numpy as np
X=[1.0,2.0,3.0]
Y=[2.0,4.0,6.0]def forward(x):return x*wdef loss(x,y):y_pred=forward(x)return (y-y_pred)*(y-y_pred)w_list=[]
mse_list=[]#穷举法
for w in np.arange(0.0,4.1,0.1):print('w=',w)l_sum=0for x_val,y_val in zip(X,Y):y_pred_val=forward(x_val)loss_val=loss(x_val,y_val)l_sum=loss(x_val,y_val)+l_sumprint('\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)plt.plot(w_list,mse_list,label='线性模型',color='r',linestyle='--')
plt.ylabel('loss')
plt.xlabel('w')
plt.show()