深度框架 4D数据格式


感谢:

实验室的涛哥

https://blog.csdn.net/thl789/article/details/109037433

0. 前言

对于 Caser竖直卷积 的操作 嗯嗯嗯

在阅读论文的时候 看的不是特别明白

咱就想着 看看代码

于是乎 代码也看得不是怎么明白

最简单最简单 的就是 自己讲想要用的代码给co下来

自己跑一边 于是乎 于是乎 我发现了一个自己的一个很基础的错误

吐槽一下 可能本人功底不行 咱实在没看懂 论文这一段是啥

1. 基本概念

深度学习框架,数据为4D 用NCHW或NHWC表示

  • N - Batch
  • C - Channel
  • H - Height
  • W - Width

在pytorch 为 NCHW

在tensorflow 缺省NHWC GPU支持NCHW

2. 逻辑表达

假定N = 2,C = 16,H = 5,W = 4,那么这个4D数据,看起来是这样的:

3. 举例子 本人的竖直卷积

1
2
3
# 请出冤大头
import torch
import torch.nn as nn
1
2
3
4
5
6
# 深度学习框架 一般为 NCHW 格式 
# N batch size
# C channel
# H height
# W weight
input_embed = torch.randn(1,1,4,3)
1
2
3
4
5
6
7
8
9
10
11
12
13
# 定义模型
# 定义测试网络 竖直的
class demo(nn.Module):
def __init__(self):
super(demo, self).__init__()
# 参数 (1,3,(4,1))
self.conv_v = nn.Conv2d(1, 3, (4, 1))

def forward(self, x):
out_v = self.conv_v(x)
# 试一试
out_v = out_v.view(-1, 9)
return out_v
1
2
3
4
net = demo()
a = net(input_embed)
print(a)
print(a.size())

tensor([[-0.5610, -0.0843, 0.8302, 0.0297, 0.3825, 0.6435, 0.2758, 0.3105, -0.1820]], grad_fn=)

torch.Size([1, 9])

9 = 输出通道数 * 要卷积的次数 3*3