首页 > 其他分享 >多输入多输出通道——pytorch版

多输入多输出通道——pytorch版

时间:2023-08-06 14:45:21浏览次数:40  
标签:输出 multi torch corr2d pytorch print 通道 输入 out

import torch
from d2l import torch as d2l
from torch import nn

# 多输入通道互相关运算
def corr2d_multi_in(x,k):
    # zip对每个通道配对,返回一个可迭代对象,其中每个元素是一个(x,k)元组,表示一个输入通道和一个卷积核
    # 再做互相关运算
    return sum(d2l.corr2d(x,k) for x,k in zip(x,k))

X = torch.tensor([
    [[0.0, 1.0, 2.0], [3.0, 4.0, 5.0], [6.0, 7.0, 8.0]],
               [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0]]
])
K = torch.tensor([
    [[0.0, 1.0], [2.0, 3.0]],
    [[1.0, 2.0], [3.0, 4.0]]
])

corr2d_multi_in(X, K)

# 计算多个通道的输出的互相关函数
def corr2d_multi_in_out(x,K):
    # x是3维,K是四维,遍历K得到三维,与x做运算,得到二维的矩阵
    # 新建一个维度0 ,把矩阵堆起来
    return torch.stack([corr2d_multi_in(x,k) for k in K],0)

K = torch.stack((K,K+1,K+2),0)
# 输入通道是3 输入是2 高和宽是2
print(K.shape)
print(K)
# 三个卷积核,每个卷积核有两个通道,每个通道是2*2的矩阵
corr2d_multi_in_out(X,K)
print(X.shape)
# 1x1卷积
def corr2d_multi_in_out_1x1(X,K):
    c_i,h,w = X.shape
    c_o = K.shape[0]
    X=X.reshape((c_i,h*w))
    print('X是',X)
    K=K.reshape((c_o,c_i))
    print('K是',K)
    Y=torch.matmul(K,X)
    return Y.reshape((c_o,h,w))

X = torch.normal(0,1,(3,3,3))
K = torch.normal(0,1,(2,3,1,1))
print('X是',X)
print('K是',K)
# Y1算卷积 Y2算全连接
Y1 = corr2d_multi_in_out_1x1(X,K)
Y2 = corr2d_multi_in_out(X,K)
assert float(torch.abs(Y1-Y2).sum())<1e-6


# 将高度和宽度的步幅设置为2
conv2d = nn.Conv2d(1,1,kernel_size=3,padding=1,stride=2)
def comp_conv2d(conv2d,x):
    # 在维度前面加上通道数和批量大小数1
    x=x.reshape((1,1)+x.shape)
    # 得到4维
    y=conv2d(x)
    # 把前面两维去掉
    return y.reshape(y.shape[2:])

comp_conv2d(conv2d,X).shape
# torch.size([4,4])

 

标签:输出,multi,torch,corr2d,pytorch,print,通道,输入,out
From: https://www.cnblogs.com/jinbb/p/17609395.html

相关文章

  • 池化层——pytorch版
    importtorchfromtorchimportnnfromd2limporttorchasd2l#实现池化层的正向传播defpool2d(x,pool_size,mode='max'):#获取窗口大小p_h,p_w=pool_size#获取偏移量y=torch.zeros((x.shape[0]-p_h+1,x.shape[1]-p_w+1))foriinrange(y.sh......
  • LeNet卷积神经网络——pytorch版
    importtorchfromtorchimportnnfromd2limporttorchasd2lclassReshape(torch.nn.Module):defforward(self,x):#批量大小默认,输出通道为1returnx.view(-1,1,28,28)net=torch.nn.Sequential(#28+4-5+1=28输出通道为6Reshape()......
  • 熊猫B7PRO主板3865U3965U输出HDMI音频及视频解码能力
    之前有人咨询过,最近又有一些人咨询,经常发嘛太麻烦,找了个以前截的图。如图采用的USBHDMI采集卡,名称为HDMITOUSB,如果是普通显示器或者电视机,会显示正常的显示器名称之类的。有一些人连接了之后,并没有这个设备,就是因为没有BIOS启用功能。BIOS的设置https://blog.51cto.com/infrado/......
  • (通俗易懂)可视化详解多通道 & 多通道输入输出卷积代码实现
    以前对多通道和多通道输入输出的卷积操作不理解,今天自己在草稿纸上画图推理了一遍,终于弄懂了。希望能帮助到大家。多通道可视化一通道的2x2矩阵torch.Size([2,2])相当于torch.Size([1,2,2]),是一通道的2x2矩阵二通道的2x2矩阵torch.Size([2,2,2])代表二通道的2x2矩阵,第一个2表......
  • 输入任意整数,直到输入-1,用插入法排序以5行形式打印输出
    intmain(){ inta[100]; inti=0;intj=0;intn=0;intk=0; scanf("%d",&a[n]); n=0; while(a[n]!=-1) { n++; scanf("%d",&a[n]); } printf("BeforeSort:\n"); for(i=0;i<n;i++) { printf("%d",a[i......
  • 【ACM专项练习#02】输入整行字符串、输入值到vector、取输入整数的每一位
    输入整行字符串平均绩点题目描述每门课的成绩分为A、B、C、D、F五个等级,为了计算平均绩点,规定A、B、C、D、F分别代表4分、3分、2分、1分、0分。输入有多组测试样例。每组输入数据占一行,由一个或多个大写字母组成,字母之间由空格分隔。输出每组输出结果占一行。如果输入的大......
  • vscode 运行Rust cargo test时显示log输出
    使用以下tasks.json对于log库的输出(info,debug,warn...)需要在test方法上一行加#[test_log::test](来自test-loghttps://crates.io/crates/test-log){"version":"2.0.0","tasks":[{"type":"shell&quo......
  • 输入字符串查找字符串中都有什么组成 java代码如下
    importjava.util.Scanner;publicclassDemo02{publicstaticvoidmain(String[]args){System.out.println("请输入一个字符串:");Stringcc=newScanner(System.in).nextLine();char[]arr=cc.toCharArray();intcoun......
  • echo命令、read命令不换行用户输入
    一、echo输出提示#!/bin/bashecho"请输入要选择的数字(1-9):"readnum效果:我们的想法是,光标停在:号后,等待用户输入,结果光标跑下一行了。解决方法:在:后加入\c去掉回车#!/bin/bashecho"请输入要选择的数字(1-9):\c"readnum效果:二、直接用read的参数设置......
  • linux mint (ubuntu)下安装Rime输入法
    linuxmint(ubuntu)下安装Rime输入法清理fctix输入法框架的其他依赖rm-rf$HOME/.config/fcitx安装Rime输入法sudoaptinstallfcitx-rimelibrime-*修改配置文件,将输入法设置为小鹤双拼mkdir-p$HOME/.config/fcitx/rime&&cd$HOME/.config/fcitx/rimeecho......