学DCGAN对抗网络之前--转置卷积(附代码解读)

devtools/2024/10/22 14:35:37/

了解DCGAN需要学习一下转置卷积

转置卷积和之前学的卷积的区别是转置卷积是上采样,普通的卷积是下采样 

上采样和下采样:

下采样:池化操作就是经典的下采样,将一张图片缩小,采用不同的方法将像素点合并从而获得更小分辨率的照片就叫做下采样。

上采样:也叫做图像插值上采样就和下采样反过来,将一张照片放大,在像素点之间根据放大倍数,以插值的形式插入像素值从而达到放大图像的目的。

关于卷积可以查看#深度学习到卷积-CSDN博客

1.卷积的操作

下面是卷积的过程:

将输入的4*4大小的矩阵经过一个卷积核计算之后得到一个2*2的矩阵

下图左边是卷积的操作 右边是转置卷积的操作 左边是降维操作 右边是升维操作

卷积中卷积核的操作:

排列成一个卷积矩阵 用0作为补充 

把输入的图像转化成一维的向量:

卷积核转换的卷积矩阵与图像转成一维的向量进行矩阵相乘得到一个2*2的矩阵

2.转置矩阵的操作

转置矩阵是把卷积核排列的卷积矩阵转置一下 再与输入的图片转换成的一维向量进行矩阵相乘

将相乘后的结果拉成二维的 如图所示 就是一个4*4的矩阵 是由原来输入的2*2大小的图像得到的 是一个升维的操作

3.相关计算

卷积:

i:输入图像的尺寸

k:卷积核的尺寸

p:边界填充

s:步长

转置卷积(在卷积公式的基础上进行换算,转置卷积和卷积正好是一个相反的操作):

4.相关代码

1.卷积

import torch
import torch.nn as nn
input = torch.tensor([[4.0,5.0,8.0,7.0],[1.0,8.0,8.0,8.0],[3.0,6.0,6.0,4.0],[6.0,8.0,7.0,8.0]])
print("输入值的大小:",input.shape)input = input.view(-1,1,4,4)downsample = nn.Conv2d(1,1,3,stride = 1,padding = 0)o = downsample(input)print("输出值:",o)
print("输出值的大小:",o.shape)
print()
  1. input = torch.tensor([[4.0,5.0,8.0,7.0],[1.0,8.0,8.0,8.0],[3.0,6.0,6.0,4.0],[6.0,8.0,7.0,8.0]])
    • 这行代码创建了一个形状为[4, 4]的二维张量,代表一个4x4的矩阵。
  2. print("输入值的大小:",input.shape)
    • 打印输入张量的形状,输出为torch.Size([4, 4])
  3. input = input.view(-1,1,4,4)
    • 将输入张量重新调整为形状[1, 1, 4, 4],以匹配卷积层期望的输入形状(批次大小,通道数,高度,宽度)。-1在这里让PyTorch自动计算批次大小(因为只有一个样本,所以为1)。(批次大小决定了在每次梯度更新时,有多少数据样本被用来计算梯度)
  4. downsample = nn.Conv2d(1,1,3,stride = 1,padding = 0)
    • 创建一个卷积层,输入通道数为1,输出通道数也为1,卷积核大小为3x3,步长为1,填充为0。
  5. o = downsample(input)
    • 将调整后的输入张量传递给卷积层,得到输出张量o
  6. print("输出值:",o)
    • 打印输出张量的值。由于卷积核、步长和填充的设置,输出张量的形状和输入相同(但值会根据卷积运算改变)。
  7. print("输出值的大小:",o.shape)
    • 打印输出张量的形状,输出为torch.Size([1, 1, 4, 4])

结果图:

2.转置卷积

import torch
import torch.nn as nn
input = torch.tensor([[2.0,1.0],[4.0,4.0]])
input = input.view(-1,1,2,2)
print("输入值的大小:",input.shape)upsample = nn.ConvTranspose2d(1,1,3,stride=1,padding=0)
o = upsample(input)print("输出值:",o)
print("输出值的大小:",o.shape)
  1. input = torch.tensor([[2.0,1.0],[4.0,4.0]])
    • 这行代码创建了一个2x2的张量(Tensor),它是PyTorch中用于存储数据的基本数据结构。张量类似于NumPy的ndarray,但可以在GPU上运行以加速计算。这个张量包含四个元素:[2.0, 1.0, 4.0, 4.0]。
  2. input = input.view(-1,1,2,2)
    • 这行代码改变了input张量的形状。view方法用于返回具有相同数据但不同形状的新张量。这里的-1让PyTorch自动计算该维度的大小,以确保总元素数量不变。1,2,2指定了新的形状,即1个样本,1个通道,2x2的空间维度。因此,这个操作将原始的2x2张量重塑为一个四维张量,用于后续的卷积转置操作。
  3. print("输入值的大小:",input.shape)
    • 打印出input张量的形状,预期输出是输入值的大小: torch.Size([1, 1, 2, 2]),表示这是一个四维张量,其中包含一个样本,一个通道,以及2x2的空间维度。
  4. upsample = nn.ConvTranspose2d(1,1,3,stride=1,padding=0)
    • 这行代码创建了一个二维卷积转置(也称为转置卷积或反卷积)层。参数1,1,3分别指定输入通道数、输出通道数和卷积核大小。stride=1表示卷积核移动的步长为1,padding=0表示在输入张量周围不添加额外的零填充。卷积转置层通常用于上采样或学习输入数据的稀疏表示。
  5. o = upsample(input)
    • 使用前面定义的卷积转置层对input张量进行上采样操作。由于卷积核大小为3且步长为1,同时没有填充,输出张量的空间维度会比输入张量的大(具体大小取决于卷积核大小和步长,以及输入张量的边界处理方式)。
  6. print("输出值:",o)
    • 打印出卷积转置操作后的输出张量o的值。由于这是一个上采样操作,输出张量将包含根据输入张量和卷积转置层参数计算得到的值。
  7. print("输出值的大小:",o.shape)
    • 打印出输出张量o的形状。由于使用了3x3的卷积核和步长为1的卷积转置操作,且没有填充,输出张量的空间维度会比输入张量的2x2大

结果图:


http://www.ppmy.cn/devtools/127860.html

相关文章

研发运营一体化(DevOps)能力成熟度模型

目录 应用设计 安全风险管理 技术运 持续交付 敏捷开发管理 基于微服务的端到端持续交付流水线案例 应用设计 安全风险管理 技术运 持续交付

鸿蒙开发案例:围住神经猫

一个基于网格的游戏环境,其中包含了一个名为“猫咪”的角色。游戏中使用了一个9x9的网格,每个单元格可以是空闲的(值为0)或者被设置为墙壁(值为1)。游戏的目标是让“猫咪”在一个充满墙壁的迷宫中移动&…

R语言机器学习算法实战系列(九)决策树分类算法 (Decision Trees Classifier)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍教程下载数据加载R包导入数据数据预处理数据描述数据切割调节参数构建模型模型的决策树预测测试数据评估模型模型准确性混淆矩阵模型评估指标ROC CurvePRC Curve特征的重要性保存模…

爬虫逆向学习(十一):实战分享反爬机制快速定位与破解

此分享只用于学习用途,不作商业用途,若有冒犯,请联系处理 反爬前置信息 站点:aHR0cHM6Ly9jenFqZC5qc3p3ZncuZ292LmNuL2tkY3B1YXBvcnRhbC8jLw 接口:/kong/InnerGateway/kdcpua/lib/project/publicity 反爬机制定位 …

Mybatis--简略2

mybatis常用功能设置 开启日志 在<settings>标签下加入命令 <setting name"logImpl" value"STDOUT_LOGGING"/> 开启java属性驼峰格式与数据库下划线连接格式封装自动转换设置 <setting name"mapUnderscoreToCamelCase" value&…

vue与u3d互调

vue与u3d互调 u3d配置 给前端发送数据的方法中使用下面的方法给Window注册个事件 // eventname 方法名: 随意取, 前端用这个名判断是获取哪个事件的数据 // data 给vue 传递的参数 window.ReportReady(UTF8ToString(eventname), UTF8ToString(data));vue配置 将u3d导出好…

微信小程序实现计数器,微信小程序震动,微信小程序提示音

一、效果 通过微信小程序实现简单的计数器功能&#xff0c;点一下1的同时震动及发出提示音。 预览效果&#xff1a; 扫码进入小程序体验&#xff0c;或者微信搜索“即享工具箱”进入到“计数器”模块体验。 二、编码 wxml: <!--pages/camcelToUnderlane/count.wxml--&g…

前端学习---(1)HTML

一个后端狗, 在公司悄摸得学习前端技术 在公司上班时间看视频影响不太好 按照这个来吧: https://gitee.com/chinese-gitee/Web 前端基础要学: HTML, CSS,JS 浏览器 浏览器中最重要的是渲染引擎(浏览器内核),JS引擎(常见的V8引擎) 渲染引擎: 用来解析 HTML与CSS。渲染引擎决定了…