首页 > 其他分享 >(神经网络和卷积入门)Pytorch小土堆跟练代码(第7天)

(神经网络和卷积入门)Pytorch小土堆跟练代码(第7天)

时间:2024-10-24 23:21:38浏览次数:3  
标签:kernel nn 卷积 torch Pytorch input output 跟练

本系列为跟练小土堆每集代码,然后进入李宏毅机器学习教程。

在系列中会敲完所有视频中代码,并且在注释详细写出感悟和易错点。

欢迎大家一起交流!

最前面的软件安装和环境配置部分,可以移步我的另一个帖子

一、神经网络

'主要在torch.nn里'
'首先学的是骨架container'
'Module,所有neural network的一个类。都是继承的父类nn.Module'

import torch
import torch.nn as nn
import torch.nn.functional as F
import torchvision
from torch.nn import Conv2d
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter

#第一节课:Module
#region
class Model(nn.Module):
    def __init__(self):
        super().__init__()

    def forward(self,input):
        #中间的函数就是前向传播forward。conv1是卷积,F.relu是非线性处理
        output = input + 1
        return output


tudui = Model()
x = torch.tensor(1.0)
output = tudui(x)
print(output)
#endregion




二、卷积



#第二节课:卷积
#region
'卷积基本形式'
'Convolution   conv1d一维 conv2d二维'
'torch.nn.functional是齿轮,torch.nn是集成好的方向盘'
'''
weight bias 
stride步长,每次卷积核(自己设置)走几步 或者是tuple元组(横和竖都写)
'''
input = torch.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]])  #这个是输入图像,即输入数据

kernel = torch.tensor([[1,2,1],
                       [0,1,0],
                       [2,1,0]])    #卷积核

# print(input.shape)
# print(kernel.shape)                 #size不行,就需要改一下

input = torch.reshape(input,(1,1,5,5))
kernel = torch.reshape(kernel,(1,1,3,3))    #把两维的数据变成了四维,数据的数量、层数、长、宽(就是上面设的)

output = F.conv2d(input, kernel, stride=1)
print(output)                               #这里输出的是一个3x3的矩阵,也就是卷积的结果


output = F.conv2d(input, kernel, stride=2)  #这里就是2个步进,也就是变成2x2的矩阵(张量)
print(output)


'conv1d参数padding,填充,在外围填充一圈0'
output = F.conv2d(input,kernel,stride=1,padding=1)  #指的是填充一行
print(output)

#神经网络中的卷积使用
'图片是二维的,是conv2d'
'padding_model是常年zero,bias偏置常年设置为true,group常年为1,后面的基本上都不用变,都是默认。就前面5个需要自己设置'
'彩色通道in_chanels是3,out_channels,kernel可以设置一个tuple。'
'out_channel=2的时候,大多都是在增加卷积的通道数,就是很多个卷积核,然后生成好几个'
dataset = torchvision.datasets.CIFAR10("../data",train=False,transform=torchvision.transforms.ToTensor(),download=True)
dataloader = DataLoader(dataset,batch_size=64)

class Tudui(nn.Module):
    def __init__(self):
        super(Tudui,self).__init__()
        self.conv1 = Conv2d(3,6,3,stride=1,padding=0)

    def forward(self,x):                #这个模型没有训练,只有向前传播,所有的参数都是随机的
        x = self.conv1(x)
        return x

tudui = Tudui()
# print(tudui)            #这样就能看到里面的卷积参数,kernel_size是3x3,stride是1x1

writer = SummaryWriter("../logs")           #这里对应都是后面tensorboard也是tensorboard --logdir=../logs才对!如果只是logs就不对,还是前几届课的图像
step = 0
for data in dataloader:
    imgs,targets = data
    output =tudui(imgs)
    print(imgs.shape)      #打印的是张量的大小torch.size,batch size是一批次有多少,通道数是颜色的,高和宽
    print(output.shape)    #这里是为了对比每张图片的之前与之后的对比
    writer.add_images("input",imgs,step)         #卷积核的个数是out channel的个数
    output = torch.reshape(output, (-1,3,30,30))#第一个是个占位符,根据后面像素计算出来batch size
    writer.add_images("output",output,step)     #这里用images函数而不是image!

    step = step + 1

writer.close()

#padding和stride参数要自己算。尺寸前后没变就是指填充了

#endregion

标签:kernel,nn,卷积,torch,Pytorch,input,output,跟练
From: https://blog.csdn.net/2301_80060871/article/details/143066850

相关文章

  • pytorch中的permute()函数的原理
    permute的中文含义是:置换这个就已经解释了一半了。他的功能就是把一个多维张量的维度进行调换。对于一个2维张量来说,例如:a=torch.rand(2,3).那么代码a.permute(1,0)就相当于a.T对于一个三维张量来说,例如:a=torch.rand(2,3,4)代码a.permute(2,0,1)把最初的2,3,4维度,给调整成了......
  • 基于卷积神经网络的瓶盖状态识别系统,resnet50,mobilenet模型【pytorch框架+python源码
    更多目标检测和图像分类识别项目可看我主页其他文章功能演示:卷积神经网络,瓶盖状态识别系统,resnet50,mobilenet【pytorch框架,python】_哔哩哔哩_bilibili(一)简介基于卷积神经网络的瓶盖状态识别系统是在pytorch框架下实现的,这是一个完整的项目,包括代码,数据集,训练好的模型权重,......
  • YOLO11改进:卷积变体系列篇 | DCNv3可形变卷积基于DCNv2优化 | CVPR2023
     ......
  • 计算机毕业设计Python+大模型知识图谱中华古诗词可视化 古诗词智能问答系统 古诗词数
    温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!开发技术:前端:vue.jsechartsD3.js后端:Flask/Django机器学习/深度学习:LSTM情感分析模型、PyTorch、T......
  • YOLOv8模型改进 第十三讲 添加卷积和注意力融合模块(CAFM) 提升小目标和遮挡检测
             本文旨在介绍一种全新的改进机制——卷积和注意力融合模块(CAFM),并详细阐述其在YOLOv8中的应用,以显著提升模型性能。首先,CAFM的设计目的是融合卷积神经网络(CNNs)和Transformer的优势,从而能够对全局和局部特征进行有效建模。随后,我们将深入探讨该模块的模......
  • 十三、PyTorch基础:Tensor和Autograd
    1、Tensor  Tensor,又名张量,是Theano、TensorFlow、Torch和MxNet中重要的数据结构。从工程角度来讲,可简单地认为它就是一个数组,且支持高效的科学计算。它可以是一个数(标量)、一维数组(向量)、二维数组(矩阵)和更高维的数组(高阶数据)。Tensor和Numpy的ndarrays类似,但PyTorch的tensor支......
  • 第一课pytorch
    背景0.1版本THNN后端1.0版本CAFFE2后端torch基础上开发同类框架Google:tensorflow()facebook:pytorth(静态库)静态图:公式固定动态图:公式可变PyTorch生态自然语言处理包AllenNLPPyTorthNLP视觉包TorchVision图卷积包PyTorchgeometricFast.ai部署库的协议Py......
  • 全网最详细深度学习环境配置(Pycharm+anaconda+pytorch+TensorFlow+cuda+cudnn+改变虚
    目录1.版本说明2.安装Pycharm3.安装anaconda1.安装2.配置路径3.修改镜像源4.修改默认虚拟环境安装位置1.查看conda信息2.修改对应文件的权限3.再次查看信息5.配置Pycharm环境4.安装torch5.安装TensorFlow+cuda+cudnn1.打开对应的文件CUDA2.打开CUDNN3.安装T......
  • 霹雳吧啦wz2(转置卷积)
    二:转置卷积(TransposedConvolution)转置卷积不是卷积的逆运算,它也是卷积的一种形式,用于将特征图的大小恢复到输入图像的大小。特征图的上采样:在生成模型(如生成对抗网络GANs)或者语义分割任务中,我们需要将低分辨率的特征图转换成高分辨率的特征图。卷积层的反向传播:在神经网络中......
  • YOLOv8性能提升:基于SPD-Conv的高效空间深度转换卷积技术解析【YOLOv8】
    本专栏专为AI视觉领域的爱好者和从业者打造。涵盖分类、检测、分割、追踪等多项技术,带你从入门到精通!后续更有实战项目,助你轻松应对面试挑战!立即订阅,开启你的YOLOv8之旅!专栏订阅地址:https://blog.csdn.net/mrdeam/category_12804295.html文章目录YOLOv8性能提升:基于SPD......