如何分析pytorch的一维卷积nn.Conv1d
如何分析pytorch的一维卷积nn.Conv1d,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
“专业、务实、高效、创新、把客户的事当成自己的事”是我们每一个人一直以来坚持追求的企业文化。 成都创新互联是您可以信赖的网站建设服务商、专业的互联网服务提供商! 专注于做网站、成都做网站、软件开发、设计服务业务。我们始终坚持以客户需求为导向,结合用户体验与视觉传达,提供有针对性的项目解决方案,提供专业性的建议,创新互联建站将不断地超越自我,追逐市场,引领市场!
torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
in_channels(
int
) – 输入信号的通道。在文本分类中,即为词向量的维度out_channels(
int
) – 卷积产生的通道。有多少个out_channels,就需要多少个1维卷积kernel_size(
int
ortuple
) - 卷积核的尺寸,卷积核的大小为(k,),第二个维度是由in_channels来决定的,所以实际上卷积大小为kernel_size*in_channelsstride(
int
ortuple
,optional
) - 卷积步长,默认为1padding (
int
ortuple
,optional
)- 输入的每一条边补充0的层数,默认为0dilation(
int
ortuple
, `optional``) – 卷积核元素之间的间距,默认为1groups(
int
,optional
) – 从输入通道到输出通道的阻塞连接数bias(
bool
,optional
) - 如果bias=True
,添加偏置
在一维卷积里,输入维度是这样的[batch_size,seq_len,input_size],其中第一维seq_len充当n_channels的角色,但在进行一维卷积之前必须交换seq_len和input_size的顺序,所以会是[batch_size,input_size,seq_len],所以第一维input_size充当n_channels的角色。而卷积发生在最后一维上,所以实际上input_size应该等于卷积中的in_channels,而seq_len则实际参与计算,计算后的结果根据以下公式:
seq_len = ((seq_len + 2 * m.padding[0] - m.dilation[0] * (m.kernel_size[0] - 1) - 1) / m.stride[0] + 1)
举个例子:
conv1 = nn.Conv1d(in_channels=256,out_channels=100,kernel_size=2) input = torch.randn(32,35,256) # batch_size x text_len x embedding_size -> batch_size x embedding_size x text_len input = input.permute(0,2,1) out = conv1(input) print(out.size())
这里32为batch_size,35为句子最大长度,256为词向量。
再输入一维卷积的时候,需要将32*35*256变换为32*256*35,因为一维卷积是在最后维度上扫的,最后out的大小即为:32*100*(35-2+1)=32*100*34
关于如何分析pytorch的一维卷积nn.Conv1d问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。
网站栏目:如何分析pytorch的一维卷积nn.Conv1d
URL地址:http://cdiso.cn/article/ieogeo.html