神经网络-预处理和提取特征(特征工程)
python
torch
tensor
[1,3)左闭右开
广播机制

x=torch.arange(24).reshape(3,4)
tensor([[0.,1.,2.,3.],
		[4.,5.,6.,7.],
		[8.,9.,10.,11.]
		])

1.csv中的数变成pytorch中的tensor
numpy
csv文件:每行是一个数据,每个域,分开
NA:NotNumber
数据预处理:创建人工数据集,存在csv中
pandas:通常用来处理csv
import pandas as pd
data = pd.read_csv(data_file)#读取csv
处理缺失数据:删除,插值(数:均值,字符串:变为数值【有值的1,无值的0】
2.线性代数
A.T#矩阵转置
向量是标量的推广,矩阵是向量的推广
shape:[5,4]
axis:0,1
axis=0,sum:[4] 按行求和
axis=1,sum:[5] 按列求和
梯度指向变化最大的方向
<x,w>內积 label标号
3.自动求导
计算函数在指定值的导数
y.backward()求导
默认pytorch累计梯度
4.线性回归- n维输入的加权,外加偏差
是单层神经网络-最简单的神经网络
y=w1x1+w2x2+w3x3+b
向量版本:y=<w,x>+b
#准备数据#
random.shuffle(indices)打乱indices
for i in range(0,num_examples, batch_size):#从0开始到num,每次跳batch_size的大小
batch_indices = torch.tensor(
indices[i:min(i+batch_size,num_examples)]) #每次索引去betch_size个样本,最后一个可能不够,直接用剩下的
yield features[batch_indices],labels[batch_indices]

yield#返回一个值,并且记住这个返回的位置,下次迭代就从这个位置后开始
一维二维切片切片
#初始化模型参数#
w=torch.normal(0,0.01,size=(),requires_grad=True)
b=torch.seros(1,requires_grad=True)
def linreg(X,w,b)
“”“线性回归模型”“”
return torch.matmul(X,w)+b
#定义损失函数#
def aaa(y_hat,y)
“”“均方误差”“”
return
#定义优化算法#
#训练过程#

torch.normal(A, B ,size(C, D), requires_grad=True)
A表示均值,B表示标准差 ,C代表生成的数据行数,D表示列数,requires_grad=True表示对导数(梯度)开始记录,可以忽略。
1 import torch
2 w = torch.normal(1, 0.02, size=(3, 1), requires_grad=True)
3 print(w)
得到的结果为:
tensor([[0.9850],
        [0.9749],
        [1.0409]], requires_grad=True)
torch.zeros()函数
返回一个形状为为size,类型为torch.dtype,里面的每一个值都是0的tensor
>>> x=torch.zeros([2,5],dtype=torch.float)
>>> x
tensor([[0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.]])
torch.ones()与zeros同,就是将0换作1
torch.size()各维度数
torch.matmul是tensor的乘法,输入可以是高维的。
当输入是都是二维时,就是普通的矩阵乘法,和tensor.mm函数用法相同。
当输入有多维时,把多出的一维作为batch提出来,其他部分做矩阵乘法。
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐