当前位置: 首页 > news >正文

营销型外贸网站定制网站界面诊断

营销型外贸网站定制,网站界面诊断,edm营销,红花岗区建设局网站目录 pytorch简介 1.线性回归 2.数据类型 2.1数据类型检验 2.2Dimension0/Rank0 2.3 Dim1/Rank1 2.4 Dim2/Rank2 3.一些方法 4.Pytorch完成分类任务 4.1模型参数 4.2 前向传播 4.3训练以及验证 4.4 三行搞定#xff01; 4.5 准确率 5、Pytorch完成回归任务 5.…目录 pytorch简介 1.线性回归 2.数据类型 2.1数据类型检验 2.2Dimension0/Rank0 2.3 Dim1/Rank1 2.4 Dim2/Rank2 3.一些方法 4.Pytorch完成分类任务 4.1模型参数 4.2 前向传播 4.3训练以及验证 4.4 三行搞定 4.5 准确率 5、Pytorch完成回归任务 5.1 One-hot编码 5.2 保存一些量 5.3 标准化操作 5.4 构建网络模型 5.5 简单方法构建网络模型 6、Pytorch实现卷积神经网络 6.1导入数据集 6.2 卷积网络模块构建 6.3前向传播 6.4准确率 6.5训练网络模型 7、图像识别常用模块解读 7.1数据读取与图像预处理 7.2加载models中提供的模型并直接用训练好的权重当作初始化参数 7.3设置哪些层需要训练  7.4参数更新 7.5 训练模块 8、Dataloader文件标注 8.1任务1读取txt文件中的路径和标签 8.2任务2分别把标签和数据存放在list中 8.3任务3数据路径得完整 8.4任务4将上述三步写在一起 8.5任务5数据预处理transform 8.6任务6根据写好的class类实例化自己的dataloader  8.7任务7用前试试整个数据和标签对应下看看对不对 9、LSTM文本任务 9.1 文本任务数据预处理 pytorch简介 通常PyTorch 的用途如下 替代 NumPy 以利用 GPU 的强大功能。提供最大灵活性和速度的深度学习研究平台。 PyTorch 是一个由以下组件组成的库 Component描述torch类似 NumPy 的 Tensor 库具有强大的 GPU 支持torch.autograd基于 Tape 的自动微分库支持 Torch 中所有可微分的张量操作torch.jit编译堆栈 (TorchScript)用于从 PyTorch 代码创建可序列化和可优化的模型torch.nn与 autograd 深度集成的神经网络库旨在实现最大的灵活性torch.multiprocessingPython 多处理但具有跨进程的神奇 torch Tensors 内存共享功能。适用于数据加载和 Hogwild 训练torch.ultisDataLoader 和其他实用函数以方便使用 总的来说是支持 GPU 的张量库如果您使用 NumPy那么您就使用了 Tensors又名 ndarray。 本文需要python语言的基础。对于pytorch学习方法是边用边学Torch只是个框架查的过程才是学习的过程。 1.线性回归 求loss的最小值得出y与WiXbi最接近的Wi和bi这里y是(-∞∞)的这就称为Linear Regression线性回归拟合。在Linear Regression添加激活函数使得y是0的这就是Logistic Regression 2.数据类型 之前Numpy一般是在CPU上运行数据类型是ndarray而在Pytorch上数据类型是Tensor张量且一般是在GPU上运行的。 对于string类型pytorch没有提供但是可以①利用one-hot方法即将字母改为一个1维向量。 对于输入的数据一般是array类型需要将其转换为Tensor类型方法如下x_in_transmap(torch.tensor,(x_in))其中map是一个映射函数将x_in转换为x_in_trans格式由array转换为tensor。 Data Tpye dytpe CPU Tensor GPU Tensor 32bit floating point torch.float32/torch.float torch.FloatTensor Torch.cuda.FloatTensor 64bit floating point torch.float64/torch.double torch.DoubleTensor Torch.cuda.DoubleTensor 8bit integer(unsigned) torch.uint8 torch.ByteTensor Torch.cuda.ByteTensor 8bit integer(signed) torch.int8 torch.CharTensor torch.cuda.CharTensor 16bit integer(signed) torch.int16/torch.short torch.ShortTensor Torch.cuda.ShortTensor 32bit integer(signed) torch.int32/torch.int torch.IntTensor Torch.cuda.IntTensor 64bit integer(signed) torch.int64/torch.long torch.LongTensor torch.cuda.LongTensor 2.1数据类型检验 可以用a.type()显示数据类型也可以用isinstance(a,torch.FloatTensor)进行检验利用这个datadata.cuda()可以将数据转换在cuda上 2.2Dimension0/Rank0 Dim0的数据标量用于loss值的计算。 2.3 Dim1/Rank1 可以是1*n的向量在torch统称为张量常用于Bias偏置量也用于Linear Input线性层的输出。 2.4 Dim2/Rank2 注意Dim指的是维度如a是2行3列的矩阵则它的维度dim2是2维的size是它的形状是size([23])表示它的形状是2行3列的也就是shape。即a.shape输出torch.size([23])size是列表。a.size(0)表示的是size的第一个数据即为2。同样的a.shape[0]输出也是2。Dim2的张量常用于LinearInput batch 3.一些方法 x.shape即可获取x的格式。torch.size返回一个元组tuple包含了 PyTorch 张量 x 的各个维度的尺寸信息。注意x.shape也返回一个元组tuple包含了 PyTorch 张量 x 的各个维度的尺寸信息。 torch.nn.functional内置了一些常用的损失函数和激活函数。如cross_entropy交叉熵损失函数。import torch.nn.functional as F;然后loss_funcF.cross_entropy即可指定loss_func是交叉熵损失函数。 x.mm(weights)bias即实现wxb操作mm指的是矩阵乘法。对于w它最开始是随机初始化weightstorch.randn([a,b],dtypetorch.float,requires_gradTrue)即可完成对weights的随机初始化为a行b列的矩阵randn是随机初始化方法dtypetorch.float指的是元素为float类型requires_gradTrue表示是否需要更新。 4.Pytorch完成分类任务 4.1模型参数 class Model_Name (nn.Module):def __init__(self):super().__init__()self.hidden1nn.Linear(784a,128b) self.hidden2nn.Linear(128a,256b) self.outnn.Linear(256a,10b) self.dropoutnn.Dropout(0.5)Model_Name 是要定义的类名它必须继承nn.Module父类。def __init__(self)是构造函数这是接下来构建模型时必备的一些属性、一些参数。self.hidden1nn.Linear(a,b)是利用了Linear函数实现“全连接”wxb其中a表示输入b表示输出即输入784输出128需要几层就构建几层对于分类任务最后输出也是全连接就是self.outnn.Linear(256a,10b)即输出10个分类. self.dropoutnn.Dropout(0.5)表示Dropout0.5表示按照50%杀死部分“神经元”。以上就是模型所需的参数、属性。 在torch中前向传播需要自行定义反向传播是自动的。 4.2 前向传播 def forward(self,x):xF.relu(self.hidden1(x))xself.dropout(x)xF.relu(self.hidden2(x)) xself.dropout(x) xself.out(x) return x输入是x这个x是数据中的batch数据的特征如x是64*784表示 batch是64特征是784个64个样本每个样本784个特征。这个前向传播利用到了模型参数中的东西。 以上过程貌似没有定义权重参数但是实则是pytorch自动定义了。利用以下方法获取哥哥权重参数 net Model_Name() for name,parameter in net.named_parameter():print(name,parameter,parameter.size())利用net实例化再利用net调用named_parameter()即可获取这些参数的名字及参数。 4.3训练以及验证 def fit(steps,model,loss_func,opt,train_dl,valid_dl):for step in range(steps):model.train()for xb,yb in train_dl:loss.batch(model,loss_func,xb,yb,opt)model.valid()with torch.no_grad():losses,numszip( *[loss_batch(model,loss_func,xb,yb) for xb,yb in valid_dl] )Val_lossnp.sum(np.multiply(losses,nums))/np.sum(nums)print(‘当前step’str(step),’验证集损失’str(val_loss)) steps指的是迭代次数model是模型loss_func是损失函数opt是优化器train_dl,valid_dl是训练集和验证集。这里的steps相当于epoch而下面的for循环指的是batch假如一共有1000个数据每次训练100个则batch就是100每次训练100个数据而epoch就是10次迭代。后面的zip就是python的基础了是打包解包的方法。 以下是优化器的定义 def get_model():model Model_Name()return model,optim.SGD(model.parameters(),lr0.001) 其中model定义了模型optim调用SGD优化器表示的是梯度下降model.parameters()表示的是接下来要更新什么参数这里就是全更新lr是学习率。除了SGD还有Adam更为常用。 以下是loss.batch的定义 def loss_batch(model,loss_func,xb,yb,optNone):lossloss_func(model(xb),yb)if opt is not None:loss.backward()opt.step()opt.zero_grad()return loss.item(),len(xb)这个loss_batch函数的目的就是求出损失lossmodel(xb)是预测值,yb是真实值其次是更新权重参数wb如果有优化器就利用backward()进行反向传播step()就是参数更新。原本第一次第二次第n次迭代毫无关系但是torch会进行累计所以利用opt.zero_grad()将梯度置为零。将这三步视为必备必须这样写。 4.4 三行搞定 train_dl,valid_dlget_data(train_ds,valid_ds,bs)model,optget_model()fit(20,l,loss_func,opt,train_dl,valid_dl)获取数据获得模型和优化器训练以及验证 4.5 准确率 correct0 total0 for xb,yb in valid_ld:outputs model(xb)_,predictedtorch.max(outputs.data,1)totalyb.size(0)correct(predictedyb).sum().item() print(‘Aurracy of network :%d,%%’%(100*correct/total))准确率在验证集或者测试集上完成计算. 5、Pytorch完成回归任务 回归任务就是经过一系列神经网络返回一个值 5.1 One-hot编码 利用pandas的get_dummies函数完成 5.2 保存一些量 ①将标签值存下②去掉标签值的那一列存下③保存名字④将features转换为ndarray格式。 5.3 标准化操作 将原本不是以中心对称的数据点拉回来使其中心对称 5.4 构建网络模型 将输入数据转换为tensor格式。requires_grad表示要进行梯度更新。并指定学习率就是更新梯度幅度的大小再乘上学习率就是在已知更新方向的基础上要走多少距离这个距离要小一点在定义losses损失列表。 这是前向传播的部分mm是矩阵乘法hidden经过wxb操作在进行relu非线性激活函数在一层后得到预测结果并计算损失将损失值添加进losses损失列表中转化为ndarray格式是因为matplotlib支持ndarray而不支持tensor 以上代码依然在前向传播的for循环中反向传播直接利用backward()完成更新参数时利用w.grad.data拿到梯度值并乘以学习率负号是因为看似是梯度下降是下山问题但是实际是沿着梯度反方向去更新是想找什么参数让损失最低。由于每次迭代无关所以然后清零。更新参数这个写法比较麻烦实际是可以直接调包的。 5.5 简单方法构建网络模型 batch_size是方便计算损失的原先的是每个数据都进行计算损失但是实际上数据量及其庞大所以每batch_size大小的数据再进行一次损失计算。Sequential就是顺序进行按顺序完成操作先全连接再激活函数sigmoid和relu都行再全连接。损失计算也是调包利用MSELoss损失函数。然后就是优化器之前是w拿到梯度乘上学习率再添负号现在是直接利用Adam优化器并指定优化参数和学习率。Adam思想如下利用惯性方向进行平行四边形法则得到最优方向。 利用batch思想进行。每次只训练一个batch的数据要加上start和end索引以方便取出。 6、Pytorch实现卷积神经网络 6.1导入数据集 导入MNIST数据集trainTrue指定训练集trainFalse指定验证集利用transform包将数据更改为tensor类型. 6.2 卷积网络模块构建 CNN是类名字,__init__()是构造函数Conv2d表示的二维卷积Conv3d就是三位卷积一般用于视频Conv2d里面的元素一是in_channel是通道数1就是灰度图3就是RGB图像out_channel输出特征图个数也是卷积核的个数kernel_size是卷积核大小stride是步长padding是填充操作padding为2就是在图像周围添加两圈的0。然后就是Relu非线性映射。再然后就是MasPool2d最大池化kernelSize2是在2*2进行池化。 然后就是第二个卷积16是in_channel是上个卷积的输出32是out_channel5是卷积核大小1是步长2是填充。再继续进行最终要进行全连接。 6.3前向传播 x是输入是batch×C×H×W的张量。x.view类似于reshape操作将数据变为H为x.size(0)W为自动计算的结果-1表示自动计算。全连接之前先要进行reshape即view操作。 6.4准确率 pred后面的[1]表示max会返回两个值第一个是这个最大值第二个是最大值对于的索引pred拿到的就是索引。然后统计相等的总数。 6.5训练网络模型 nn.CrossEntropyLoss()为常用的交叉熵损失函数的写法损失函数为交叉熵损失函数并定义优化器。 利用enumerate枚举可以得出一batch idx他就是个计数123…….利用该计数可以在后面的batch idx%1000的情况下进行validation即每过100次跑一次验证集。net train就是训练output得到预测值loss计算损失梯度清理反向传播参数更新算准确率正确多少个将多少个正确的保存。 准确率计算是在验证集if语句下的用于计算准确率并打印。 7、图像识别常用模块解读 7.1数据读取与图像预处理 data_transformer中制定了所有图像的预处理操作ImageFolder假设所有的文件按文件夹保存好每个文件夹下面存储同一类图片文件夹名字为分类名字。 Data Augmetation数据增强所有黑体 训练集预处理transformer.Compose指的是按顺序完成下列操作Resize将图像转换为指定长宽的大小这个大小很重要越大效果越好但是时间越慢RandomRoatationa指的是在-a到a之间的角度随机旋转最大45CenterCrop(64)指的是从中心随机裁剪为长宽是64的图像RandomHorizontaFlip(p0.5)是随机垂直翻转 p0.5是翻转概率ColorJitter(brightness0.2,contrast0.1,saturation0.3,hue0.1)依次分别是亮度、对比度、饱和度、色相这个方法用的很少RandomGrayscale(p0.025)指的是概率转换为灰度图用的更少。ToTensor转行为tensor格式Normalize标准化第一个是标准差第二个是均值每个元素指的是RGB三通道这个数据来源是大型数据集的结果 验证集预处理不用数据增强。直接resize成想要的的大小并转化为tensor并且进行归一化数据用的是训练集的均值方差数据。 x是字典的key在datasets调用ImageFolder。这里的方法不重要后续有更为通用的方法。 7.2加载models中提供的模型并直接用训练好的权重当作初始化参数 就是backbone特征提取器常见的有resnetalexnetvgg等等。使用方法有两个一是在别人论文源码中将模型复制过来二是torchvision收录了一些经典网络可以直接调包。 迁移学习利用被人的模型以及权重训练自己的数据集。那么别人的模型如resnet并没有训练过花朵的数据集这些权重能直接用吗答案是可以的因为它本身就是提取特征的权重描述了提取特征好坏的能力而不是针对不同数据集有不同权重。我们要做的只是微调。如何微调调什么参数若你的数据集比较小则大部分不用改只改小部分如只改输出层这个方法称为“冻住”。若数据集不大不小则“冻住”区域小一些只改从输出层向上几层。若数据集很大则每一层都调整权重。最少最少输出层得调整。 model_name指定为resnetfeature extract指定为ture指的是不更新任何权重。 判断训练设备是CPU还是GPU。 指定模型为resnet18即用的是18层的resnet速度较快也可以50层的或者153层的根据条件选择。观察它的网络结构发现每次卷积完会有BatchNorm2d操作是因为开始预处理时已经经过了归一化操作但是在每次卷积之后分布会发生变化所以需要再次归一化使网络学习更好。这个BN层在每次卷积之后都添加。在最后全连接之前resnet18进行的是全局平均池化指定步长为1类似于reshape学习卷积时在全连接之前将数据拉为长条加入现在数据是14*14*512就是将14*14的数据取平均为一个值512分别操作得到512个值。 设置set_parameter_requires_grad函数用于判断是否更新权重参数for循环是遍历所有的模型参数查看是否更新。 通过如下函数将模型更改为自己的。 7.3设置哪些层需要训练  模型保存为pt文件保存的是网络结构图所有的wb权重参数以后可以直接用该pt文件。然后将所有的模型参数保存在param_to_update如果当params.requires_grad为True的时候才将param放进param_to_update。这些参数要在opt优化器进行更新。 7.4参数更新 利用Adam更新参数并定义了衰减策略用的是stepLRstepsize是每10次执行衰减gamma表示学习率变为原来的gamma倍。还定义了交叉熵损失函数。 7.5 训练模块 定义时间、最好的准确率、训练设备、四个list、学习率、最好的模型 8、Dataloader文件标注 标注文件一般是txt文件、json文件、xaml文件等等。 原始数据先进行随机打乱random shuffle得到队列每多少个构成一个batch。 8.1任务1读取txt文件中的路径和标签 定义一个字典数据data infoskey是图片名字v是图片内容然后打开文件以readline每行去读strip是去掉换行符等等、split是字符串切分以空格切分将其存放在samples列表变量中格式是[xxx,lables]xxx是名字一个大list有许多小list。然后遍历samples这个大list再在data infos以xxx为key以lables为v构建字典。 8.2任务2分别把标签和数据存放在list中 需要把所有的keys转换为list所有的values转化为list这是dataloader将来会在这里提数据。 8.3任务3数据路径得完整 因为一会要用这个路径去读取数据所以路径得加上前缀。任务不同数据不同方法不同但是一定要读到图像数据。 把前面的train dir与img路径合并。 8.4任务4将上述三步写在一起 首先导入Dataset和Dataloader包。并且构造函数__init__和__getitem__函数必须存在。完成的是两个list一个是存放所有图像数据路径的list一个是存放所有标签的list。 __init__完成的是两个list一个是存放所有图像数据路径的list一个是存放所有标签的list。__getitem__的两个参数都不要更改idx是随机的索引首先是得到图像数据和标签数据判断要不要数据增强并将标签数据转换为tensor格式。会执行batch次__getitem__函数batch自己指定这batch个数据会进入模型。 load annotation函数是将字典转换成list。 8.5任务5数据预处理transform 同样在__getitem__函数中完成。在transform这里就完成了数据转换为tensor格式。代码和之前一模一样。 8.6任务6根据写好的class类实例化自己的dataloader  实例化两个train dataset和val dataset。 利用Dataloader包完成构建dataloader传入对应的参数即可。 8.7任务7用前试试整个数据和标签对应下看看对不对 利用iter.(train_loader).next()试试是一个batch数据。suqeeze是压缩某个没用的维度可有可无。permute是转换维度的tensor是BGR格式先转为RGB格式再变为numpy格式方便画图。 9、LSTM文本任务 文本数据标签文件。新闻主题分类包含训练集、验证集、测试集。 9.1 文本任务数据预处理 Google认为英文文本适合分词中文文本适合分字我们以分字进行这是第一步。第二部是ID替换有一个大的预料表包含5000个常用字每个字对应一个ID序号将每个字替换为序号这样文本转换为一个数字组成的list。第三步是映射表即就是Embedding词嵌入将这个list转换为一个词向量这个向量是大型企业训练出的如搜狗腾讯。综上所述预料表将文本转换为ID映射表将ID转换为向量。
http://www.w-s-a.com/news/214999/

相关文章:

  • 达人设计网官方网站建筑效果图网站有哪些
  • 网站定制哪家快建筑室内设计网
  • 网站创建方案论文旅游网站的设计与制作html
  • 网站建设的数据导入导出开发小程序需要多少钱费用
  • 局网站建设进入前十名wordpress user role editor
  • 网站托管如何收费搜一下百度
  • 中国建设劳动协会网站wordpress 区块链媒体
  • 网站开源是什么意思西安做网站科技有限公司
  • 自己怎么用h5做网站肇庆seo
  • 长沙网站seo优化公司东莞企业官方网站建设
  • 网站个人备案材料北京网站推广价格
  • 百度做任务的网站电子工程网网站
  • 中介订制网站开发玉溪网站建设设计
  • 免费网站免费无遮挡手机页面设计软件
  • 网站建设需求规格说明书中山模板建站公司
  • wordpress get值网站建设 seo sem
  • 网站建设微信开发工厂代加工平台
  • 厦门 网站建设 公司哪家好asp.net 创建网站
  • 专业北京网站建设凡科网做网站怎么样
  • 金富通青岛建设工程有限公司网站浙江省住建厅四库一平台
  • 有搜索引擎作弊的网站企业建设H5响应式网站的5大好处6
  • 是做网站编辑还是做平面设计seo外包公司接单
  • 做性的网站有哪些苏州专业网站设计制作公司
  • 陵水网站建设友创科技十大优品店排名
  • 想换掉做网站的公司简要说明网站制作的基本步骤
  • 国企公司网站制作wordpress 浮动定位
  • 网站网页直播怎么做的企业网站建设推荐兴田德润
  • 网站建设熊猫建站厦门seo全网营销
  • 扁平网站设计seo是什么岗位的缩写
  • 工商企业网站群晖配置wordpress 80端口