栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

我的第一周pytorch学习笔记

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

我的第一周pytorch学习笔记

1.torch.randn(3,4)是随机生成 ,三行四列的矩阵

2.x.ge(0.5)是找出比0.5还大的数字

3.torch.masked_select(x,mask)是将大于0.5的数字列出来

4. .shape就是将所有的那些形状打出来

1、a.shape 指的是各个维度的模型数字,比如三行六列这样

2、torch.Size[(4,3,28,28)],从右到左,维度依次增大

3、a[...].shape是将所有维度打出

4、a[0,...].shape是将所后面三个的维度打出来,以此类推

1、a.index_select(0,[0,2])第一个参数指的是维度,也就是最靠左边的那个,这个[0,2]指的是tensor,指的是第0行和第二行,固然它的shape是2

2、a.index_selext(2,torch.arange(28)).shape,torch.arange(28)只能0-27不包括28,但其中shape个数为28个

1、a[:,:,0:28:2,0:28:2].shape指的是,行与列按照2的步长进行切片,而其他维度不变

2、下面的例子只是省去0:28,其实默认为0-28的切片

1、a[:2]默认0索引的位置切片

2、a[:2,:1,:,:] 1索引的位置切片到1停下,固然其shape为1

3、a[:2,1:,:,:] 1索引的位置从1开始切片,1开始取到2结束,和数组的思想是一样的,shape为2

4、a[:2,-1:,:,:]1索引的位置,-1开始取也就是最后一位,没得取了,就是shape为1


1、torch.randperm(10)是值将十以内的数字随机打乱

2、有不同行交换的功能
 

 

1、torch.eye(3)是对角矩阵,但局限于行与列 ,不能维度过高
2、torch.zeros(3,3)是0矩阵
3、torch.ones_like是矩阵都为1
 

1、torch.linspace(0,10,steps=4)其实指的是10/3

2、torch.logspace(0,-1,steps=10)其实指的是10的0次方到10的-1次方,10的话就是/9

   1、torch.arange(0,10)指的是0到10的遍历,但不取10

   2、torch.arange(0,10,2)值的是0到10的遍历,以2为步长取值

1、torch.full([2,3],7) 指的是在第二行第三行进行赋值为7

 

1、torch.normal(mean,std) 该函数返回从单独的正态分布中提取的随机数的张量,该正态分布的均值是mean,标准差是std。

 

如果这里会有程序错误的出现,其实就是将0改为0.0即可,老师的出现了错误

 

 

1、numpy是python中的类库,这里指的是numpy转为torch的方法 ,dtpye=torch.float

1、torch.empty(1)用来初始化的

2、torch.Tensor 是python类库里面

 

1、将tensor的类型打印出来

 1、torch.rand_like:返回与输入相同大小的张量,该张量由区间[0,1)上均匀分布的随机数填充。

 2、randint(1,10)随机分布在1到10的范围内

1、a.view(4,28*28)是将矩阵torch.Size([4,1,28,28])铺平为4行28*28列 

 1、a.unsqueeze(0)是在第0位置前添加维度

 2、a.unsqueeze(-1)是在最后一位后面添加维度

1、a.t()表示矩阵的倒置

 

1、a.transpose是维度的转置 

2、contiguous是数据的储存

 

线性回归方程

import numpy as np

#y=wx+b


#计算loss损失值
def compute_error_for_line_given_points(b,w,points):
    totalError=0
    for i in range(0,len(points)):
        x=points[i,0]#搞不懂这里为啥取0,以及下面为啥取1
        y=points[i,1]
        totalError+=(y-(w*x+b))**2
    return totalError/float(len(points))


#loss对w的偏导=2(wx+b-y)*x
#loss对b的偏导=2(wx+b-y)*1
#w'=w-lr*loss对w的偏导
#b'=b-lr*loss对b的偏导
#计算b和w b和w不断求偏导取得使loss最小的值
# 其中loss对b和w的偏导,会对每个样本的偏导求和再求均值
#一轮的loss对w和b的偏导,
def step_gradient(b_current,w_current,points,learningRate):
    b_gradient=0
    w_gradient=0
    #N指的是总共在csv文件导入的数据量
    N=float(len(points))
    for i in range(0,len(points)):
        x=points[i,0]
        y=points[i,1]
        
        b_gradient+=-(2/N)*(y-((w_current*x)+b_current))
        w_gradient+=-(2/N)*x*(y-((w_current*x)+b_current))
    new_b=b_current-(learningRate*b_gradient)
    new_w=w_current-(learningRate*w_gradient)
    return [new_b,new_w]

#迭代循环梯度
def gradient_descent_runner(points,starting_b,starting_w,learning_rate,num_iterations):
    b=starting_b
    w=starting_w
    for i in range(num_iterations):
        b,w=step_gradient(b,w,np.array(points),learning_rate)
    return [b,w]

def run():
    #导入csv数据
    points=np.genfromtxt("data.csv",delimiter=",")
    #学习率
    learning_rate=0.0001
    initial_b=0
    initial_w=0
    
    num_iterations=1000
    print("Starting gradient descent at b={0},w={1},error={2}"
          .format(initial_b,initial_w,compute_error_for_line_given_points(initial_b,initial_w,points)))
    print("Runing....")
    [b,w]=gradient_descent_runner(points,initial_b, initial_w,learning_rate,num_iterations)
    print("After {0} iterations b={1},w={2},error={3}"
          .format(num_iterations,b,w,compute_error_for_line_given_points(b,w,points)))


if __name__ == '__main__':
    run() 


Starting gradient descent at b=0,w=0,error=5565.107834483211
Runing....
After 1000 iterations b=0.08893651993741346,w=1.4777440851894448,error=112.61481011613473

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/870439.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号