目录
https://www.bilibili.com/video/BV1aS4y1v7ij?p=2&vd_source=a402747bd6c153bdb2defee02a9cb617
一、分类和回归
分类(离散值):预测10类别就是十维的向量,哪一个向量对应的最大就是该类,概率加起来就是1
预测(连续值)
二、 pytorch的基本概念
Tensor: 张量(一个个数字)可以描述任意维度的物体,例如0阶的标量(0,1,2),1阶的向量【1,2,3】,2阶的矩阵
Variable:变量,用变量来表示参数
nn.Module:封装网络结构
样本:数据,使用tensor来对数据进行描述
模型:y=wx+b
三、Tensor的基本概念
类型
创建
属性
内存中如何排布:
torch.dtype:类型
torch.device:设备
torch.layout: 内存布局对象,稠密的张量(内存中一块集中的区域),稀疏的张量(记录非零响亮的坐标)
稀疏的张量:可以减少在内存中的占用
运算
加减乘除:
加法
sub减法
mul乘法:点乘
div除法
矩阵运算等
矩阵
高维
幂运算
对数运算等
开方运算
pytorch中的in-place操作
就地操作,就是不允许使用临时变量,也称为原位操作
x=x+y
add_ sub_ mul_等
pytorch中的广播机制
tensor的取正取余运算
tensor的比较运算
Tensor三角函数
其他函数
统计
torch.distributions
随机抽样函数
定义随机种子(通过随机种子,随机数一样)
定义随机数满足的分布
范数运算
矩阵分解
特征向量和特征值
SVD奇异值分解
Tensor 裁剪运算
对Tensor中的元素进行范围过滤
常用于梯度裁剪(gradient clipping),即在发啥呢个梯度离散或者梯度爆炸时对梯度的处理
a.clamp(2,10) 2-10之间
Tensor 索引和数据筛选
Tensor 组合拼接
autograd
导数
每个tensor通过requires_grad来设置是否计算梯度,来冻结某些层的参数
autograd的几个概念
叶子张量:leaf
backward函数:自动计算梯度
torch.nn
是专门为神经网络设计的模块化接口
nn.parameter定义可训练参数
nn.Sequential
模型加载和保存
visdom可视化
安装
tensorboardx 数据可视化工具
trochvision
神经网络的基本概念
前向运算(参数已知)
过拟合和欠拟合
如何防止过拟合和欠拟合
正则化问题
pytorch搭建神经网络基本组成模块
案例一:解决波士顿房价预测模型搭建,506个数据点,14种特征信息
http://t.cn/RFHTAgY
损失函数:MSE-LOSS
案例二、
模型的幸能评价——交叉验证
#data 拿数据
import numpy as np
import re #通过正则表达式来将空格进行压缩成一个
ff=optn("housing.data").readlines()
for item in ff:
out=re.sub(r"\s{1,}"," ",item).strip()
print(out)
out.split(" ")#以空格来进行分割
data.append(out.split(" "))
data=np.array(data).astype(np.float)
y=data[:,-1]
x=data[:,0:-1]
y_train=data[0:496,...]
x_train=data[0:496,...]
y_test=data[496:,...]
x_test=data[496:,...]
#net 搭建网络
class Net(torch.nn.Module):
def __init__(self,n_feature,n_output):
super(Net,self).__init__()
self.hidden=torch.nn.Linear(n_feature,100)
self.predict=torch.nn.Linear(100,n_output)
def forward(self,x):
out=self.hidden(x)
out=torch.relu(out)
out=self.predict(x)
return out
net=Net(13,1)
#loss 损失函数
loss_func=torch.nn.MSELoss()
#optimiter 优化器
optimizer=torch.optim.SGD(net.parameters(),lr=0.0001)
#training 训练
for i in range(1000):
x_data=torch.tensor(x_train,dtype=torch.float32)
y_data=torch.tensor(y_train,dtype=torch.float32)
pred=net.forward(x_data)
pred=torch.squeeze(pred)
loss=loss_func(pred,y_data)*0.001
optimizer.zero_grad(0)
loss.backward()
optimizer.step()
print("ite:{},loss:{}".format(i,loss))
print(pred[0:10])
print(y_data[0:10])
#test
x_data=torch.tensor(x_test,dtype=torch.float32)
y_data=torch.tensor(y_test,dtype=torch.float32)
pred=net.forward(x_data)
pred=torch.squeeze(pred)
loss_test=loss_func(pred,y_data)*0.001
print("ite:{},loss_test:{}".format(i,loss_test))
训练字体
data层
batchsize使用的是进行每次提取一部分数据
net层
class CNN(torch.nn.Module):
def __init__(self):
super(CNN,self).__init__()
self.conv=torch.nn.Sequential(
torch.nn.Conv2d(1,32,kernel_size=5,padding=2),
torch.nn.BatchNorm2d(32),
torch.nn.ReLu(),
torch.nn.MaxPool2d(2)
)
self.fc=torch.nn.Linear(14*14*32,10)
def forward(self,x):
out=self.conv(x)
out=out.view(out.size()[0],-1)
out=self.fc(out)
return out
# 初始化类
cnn=CNN()
cnn=cnn.cuda()
损失函数
loss_func=torch.nn.CrossEntropyLoss()#交叉熵函数
优化器
optimizer=torch.optim.Adam(cnn.parameters(),lr=0.01)
训练
epoch每次将所有样本训练一次叫一个epoch,需要多次拿出来训练训练几遍
for epoch in range(10):
for i,(images,labels) in enumerate(train_loader):
images=images.cuda()
labels=labels.cuda()
outputs=cnn(images)
loss=loss_func(outputs,labels)
optimizer.zero_grad()
loss.backward()
optimizer.step()
print()"epoch is {},ite is" "{}/{},loss is{}".format(epoch+1,i,len(train_data)//64,loss.item)
计算一下在测试集上的精度
eval/test
loss_test=0
accuracy=0
for i,(images,labels) in enumerate(test_loader):
images=images.cuda()
labels=labels.cuda()
outputs=cnn(images)
loss+=loss_func(outputs,labels)
#算出概率分布最大的值
_,pred=outputs.max(1)
accuracy+=(pred==labels).sum().item()
accuracy=accuracy/len(test_data)
loss_test= loss_test/(len(test_data)//64)
print()"epoch is {},ite is" "{}/{},loss is{}".format(epoch+1,i,len(test_data)//64,loss.item)
(1)batchsize:批大小。在深度学习中,一般采用SGD训练,即每次训练在训练集中取batchsize个样本训练;
(2)iteration:1个iteration等于使用batchsize个样本训练一次;
(3)epoch:1个epoch等于使用训练集中的全部样本训练一次;
举个例子,训练集有1000个样本,batchsize=10,那么:
训练一个epoch是100个batch,也就是这1个epoch中iteration是100。
计算机视觉基础知识
hwc c指的是通道,有可能是RGB,但是有时候有很多通道
HSV色彩模型
平滑与锐化
计算机中的特征工程
人为去设置输入变量X
卷积运算来进行特征提取(从图片中进行提取)
卷积神经网络的基本概念
卷积层:中间有一个空洞卷积,不经过pooling层就可以增大感受野,groups是分组卷积,一个channal一个分组,bisa指的是b
激活层(非线性)
BN层
池化层(压缩)
return_indices:返回最大值对应的索引值
ceil_mode:false向下取整
FC层
dropout
损失层
经典卷积神经网络结构
多分支网络结构
解决相似性,多任务
attention的网络结构
学习率
指数、固定值等方式调节学习率
优化器
卷积神经网络添加正则化
模型复杂度比较高的时候,为增加稳定性,防止过拟合
结构最小化,风险最小化