如何进行网页设计和网站制作,wordpress 后台无法登录,合肥小程序建设,vps转移网站文章目录TensorBoard的使用1、TensorBoard启动#xff1a;2、使用TensorBoard查看一张图片3、transforms的使用pytorch框架基础知识1 nn.module的使用2 nn.conv2d的使用3、池化(MaxPool2d)4 非线性激活5 线性层6 Sequential的使用7 损失函数与反向传播8 优化器9 对现有网络的使…
文章目录TensorBoard的使用1、TensorBoard启动2、使用TensorBoard查看一张图片3、transforms的使用pytorch框架基础知识1 nn.module的使用2 nn.conv2d的使用3、池化(MaxPool2d)4 非线性激活5 线性层6 Sequential的使用7 损失函数与反向传播8 优化器9 对现有网络的使用和修改10 网络模型的保存与读取TensorBoard的使用
1、TensorBoard启动
在Terminal终端命令中输入
tensorboard --logdirlogs #logs为创建的文件名2、使用TensorBoard查看一张图片
writerSummaryWriter(../logs)
image_pathrF:\image\1.jpg
img_PILImage.open(image_path)
image_arraynp.array(img_PIL)
writer.add_image(test,image_array,1,dataformatsHWC)
writer.close()3、transforms的使用
作用使PIL Image 或者np ——》tensor
imgae_pathrF:\image\1.jpg
imgImage.open(img_path)
tensor_transtranssforms.ToTensor() #相当于创建一个工具
tensor_imgtensor_trans(img) #img转化成tensor模式同理ToPILIMage是为了tensor 或者 ndarray 》Image
pytorch框架基础知识
1 nn.module的使用
目的给所有网络提供基本骨架
from torch import nn
class aiy(nn.Module):def __init__(self):super().__init__()def forward(sel,input):outputinput1return outputaiyaiy()
# xtorch.tensor(1.0)
x1
outputaiy(x)
print(output)22 nn.conv2d的使用
参数代码解释如下 示例输入一个5x5的矩阵和一个3x3的卷积核做卷积操作
import torch
import torch.nn.functional as F
inputtorch.tensor([[1,2,0,3,1],[0,1,2,3,1],[1,2,1,0,0],[5,2,3,1,1],[2,1,0,1,1]])
inputinput.reshape([1,1,5,5])kearstorch.tensor([[1,2,1],[0,1,0],[2,1,0]])
kearskears.reshape([1,1,3,3])outputF.conv2d(input,kears,stride1)print(output)
print(output.shape)tensor([[[[10, 12, 12], [18, 16, 16],[13, 9, 3]]]])
torch.Size([1, 1, 3, 3])若是输入的卷积核的数量有两个则得到的output也是两个 示例借用CIFAR10数据集用自定义的网络模型做一次卷积操作然后用tensorboard查看卷积之后的结果。 这里需要注意的是经过卷积得到的大小是[64,6,30,30]而图片的通道一般都是3通道的6通道的图片不知道怎么显示需要使用reshpae重新改变矩阵的大小。
outputoutput.reshape([-1,3,30,30]) #-1自动计算剩余的值后面[3,30,30]改成指定大小示例代码
import torch
import torchvision
from torch.utils.data import DataLoader
from torch import nn
from torch.nn import Conv2d
from torch.utils.tensorboard import SummaryWriter#数据准备
datasettorchvision.datasets.CIFAR10(./data,trainFalse,transformtorchvision.transforms.ToTensor(),downloadTrue)dataloaderDataLoader(dataset,batch_size64)#自定义网络模型
class aiy(nn.Module):def __init__(self):super(aiy, self).__init__()#卷积运算self.conv1Conv2d(in_channels3,out_channels6,kernel_size3,stride1,padding0)def forward(self,x):xself.conv1(x)return xaiyaiy()
# print(aiy)
step0
writerSummaryWriter(../log)for data in dataloader:img,targetsdataoutputaiy(img)# print(img.shape)#torch.Size([64, 3, 32, 32]# print(output.shape)#torch.Size([64, 6, 30, 30])#因为图片的通道是3需要改变矩阵的大小# outputoutput.reshape([-1,3,30,30])writer.add_images(input,img,step)outputtorch.reshape(output,(-1,3,30,30))writer.add_images(output, output, step)# print(output.shape)stepstep1print(step)
writer.close()3、池化(MaxPool2d)
目的降采样大幅减少网络的参数量同时保留图像数据的特征。 需要注意的是 池化不改变通道数
池化参数 数组演示示例
inputtorch.tensor([[1,2,0,3,1],[0,1,2,3,1],[1,2,1,0,0],[5,2,3,1,1],[2,1,0,1,1]],dtypefloat)
inputtorch.reshape(input,(-1,1,5,5))outputaiy(input)
print(output.shape)ceil_modeTrue:
tensor([[[[2., 3.],[5., 1.]]]], dtypetorch.float64)ceil_modeFalse:
tensor([[[[2.]]]], dtypetorch.float64)示例同样借用CIFAR10数据集用自定义的网络模型做一次池化操作然后用tensorboard查看卷积之后的结果。
# -*- coding: utf-8 -*-
# Auter:我菜就爱学import torch
import torchvision
from torch import nn
from torch.nn import MaxPool2d#带入数组
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriterclass aiy(nn.Module):def __init__(self):super(aiy, self).__init__()self.maxpool1MaxPool2d(kernel_size3,ceil_modeFalse)def forward(self,input):outputself.maxpool1(input)return outputaiyaiy()#将池化层用数据集测试
datasettorchvision.datasets.CIFAR10(./data,trainFalse,transformtorchvision.transforms.ToTensor(),downloadTrue)dataloaderDataLoader(dataset,batch_size64)step0
writerSummaryWriter(../logmaxpool)for data in dataloader:img,targetdatawriter.add_images(input,img,step)outputaiy(img)writer.add_images(output,output,step)stepstep1
有点像打马赛克
4 非线性激活
作用提高泛化能力引入非线性特征
ReLu(input,inplaceTrue)
表示原input替换input
outReLu(input,inplaceFalse)
表示原input被out替换5 线性层 6 Sequential的使用
作用可以简化自己搭建的网络模型 示例参考CIFAR10的网络模型结构创建一个网络。 # -*- coding: utf-8 -*-
# Auter:我菜就爱学import torch
from torch import nn
from torch.nn import Sequential, Conv2d, MaxPool2d, Flatten, Linear
from torch.utils.tensorboard import SummaryWriterclass Aiy(nn.Module):def __init__(self):super(Aiy, self).__init__()self.modelSequential(Conv2d(3,32,5,padding2,stride1),MaxPool2d(kernel_size2),Conv2d(32,32,5,padding2),MaxPool2d(kernel_size2),Conv2d(32,64,5,padding2),MaxPool2d(2),Flatten(),Linear(1024,64),Linear(64,10))def forward(self,input):outputself.model(input)return outputaiyAiy()# print(aiy)inputtorch.ones((64,3,32,32))outputaiy(input)print(output.shape)
使用tensorboard中的命令可以查看网络模型结构
writerSummaryWriter(../logmodel)writer.add_graph(aiy,input)writer.close()7 损失函数与反向传播
作用
计算处实际输出与目标之间的差距更新输出提供一定的依据
通过小土堆举的示例可以很好的理解损失函数 说明假设一张试卷满分是100分其中选择30填空20解答50.第一次我们得到的结果是选择10填空10解答20.第一次损失值是60. 然后通过不断的训练让选择提高到20填空提高20解答提高到40这个时候与满分差距20损失值也就越来越小。 # -*- coding: utf-8 -*-
# Auter:我菜就爱学
import torch
from torch.nn import L1Lossinputtorch.tensor([1,2,3],dtypetorch.float32)
inputtorch.reshape(input,(1,1,1,3))
targettorch.tensor([1,2,5],dtypetorch.float32)
targettorch.reshape(target,(1,1,1,3))#设置一个损失函数
lossL1Loss(reductionsum)
outputloss(input,target)
print(output)tensor(2.)8 优化器
优化器参数解释
for epoch in range (20):sum_loss0.0for data in dataloader:imgs,targetsdataoutputaiy(imgs)result_lossloss(output,targets)optim.zero_grad()result_loss.backward() #反向传播更新对应的梯度optim.step() #调整更新的参数sum_losssum_lossresult_lossprint(sum_loss)下面是对优化器中的交叉熵的解释
9 对现有网络的使用和修改
下载现有网络并使用数据集更新好的参数
vgg16_Truetorchvision models vgg16(pretrainedTrue)一般下载好的模型保存路径C:\user.cache\torch\hub\checkpoints
在已有的网络模型中新添自己需要的层
vgg16_True.classifier.add_module(7,nn.Linear(1000,10))10 网络模型的保存与读取
方法一直接把模型和参数保存下来 注意 有 一个陷阱自定义的模型在下载的时候运行会报错得需要复制下载原模型。只能导入专门经典的模型
#保存
torch.save(vgg16_true,vgg16_method1.pth)#下载
modeltorch.load(vgg16_method1.pth)方法二保存模型的参数一般使用这个。内存比较小节省空间以字典的形式保存。
#保存
torch.save(vgg16_true.state_dict(),vgg16_method1.pth)#下载
vgg16_falsetorchvision.models.vgg16(pretrainedFalse)
vgg16_false.load_state_dict(torch.long(wgg166_method2.pth))