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



