多通道CNN
在读Convolutional Neural Networks for Sentence Classification 这个文章的时候,它在论文中提出一种模型变种就是
CNN-multichannel,也就是多通道CNN。
和最普通的textcnn相比,这个东西最重要的一个区别就是输入为两个通道,一个通道词向量更新,一个通道词向量不更新。
对这个模型的理解我觉得这里解释的比较好。
具体在pytorch实现的这个模型的时候,需要注意的就是维度的变化情况。
在思考维度变化的过程中,我主要是参考了文君在文本分类模型代码中的注释和这里以及这里的注解。
通过对上面的理解,我觉得核心的一点在于pytorch中的RGB的CNN输入是四个维度的,
在多通道CNN应用到文本分类的情况中,维度变化是这样的
首先,我们进行了一个embedding层的变化,变化之后维度是这样的 (batch_size x vocabulary_len x embedding_dim)
这里我们使用两个通道,另一个通道变化之后维度也是 (batch_size x vocabulary_len x embedding_dim)
接着我们使用了torch.stack([x_static, x_no_static], 1)
让维度变化成了 (batch_size x 2 x vocabulary_len x embedding_dim)
因为在cnn中,我们的输入就是需要四个维度,(batch_size, in_channels, num_seq, embedding_length),这里时候用stack函数把两个通道联合起来了。
这个时候再次理解这个双通道cnn就好理解了,每一个卷积核对应两个feature权重矩阵,每个权重矩阵和各自的通道卷积之后相加得到feature map
最新文章
- UVA 11624 BFS的妙用
- MVC及WebAPI添加Jsonp支持
- 市面上常见的javaEE WEB服务软件
- NSString的内存管理问题 (转载)
- [redis] redis 存取键值对常用的三种使用方式 - Jedis、JedisPool、Jedis分布式
- 重点关注之OData with List
- EL 表达式 取值将 <; 转成 &;1t 问题
- web-ylbtech-数据库备份-数据库设计
- Hibernate 一对多自身双向关联关系 用于类别表的实现
- 【Chromium中文文档】多进程资源加载
- Spring AOP高级——源码实现(3)AopProxy代理对象之JDK动态代理的创建过程
- deeplearing4j学习以及踩过的坑
- KNN与K-Means的区别
- springboot+mybatis环境的坑和sql语句简化技巧
- element-ui <;el-select>; + <;el-option>; 回显格式为中文 传值格式为对应value
- Ubuntu忘记超级用户root密码,重新设置密码
- django中使用memcache的一些注意事项
- Java虚拟机垃圾收集器与内存分配策略
- Linux运维学习笔记-iptables知识总结
- Func的介绍——c#封装的代理