基于Tensorflow一维卷积用法详解


Posted in Python onMay 22, 2020

我就废话不多说了,大家还是直接看代码吧!

import tensorflow as tf
import numpy as np
input = tf.constant(1,shape=(64,10,1),dtype=tf.float32,name='input')#shape=(batch,in_width,in_channels)
w = tf.constant(3,shape=(3,1,32),dtype=tf.float32,name='w')#shape=(filter_width,in_channels,out_channels)
conv1 = tf.nn.conv1d(input,w,2,'VALID') #2为步长
print(conv1.shape)#宽度计算(width-kernel_size+1)/strides ,(10-3+1)/2=4 (64,4,32)
conv2 = tf.nn.conv1d(input,w,2,'SAME') #步长为2
print(conv2.shape)#宽度计算width/strides 10/2=5 (64,5,32)
conv3 = tf.nn.conv1d(input,w,1,'SAME') #步长为1
print(conv3.shape) # (64,10,32)
with tf.Session() as sess:
 print(sess.run(conv1))
 print(sess.run(conv2))
 print(sess.run(conv3))

基于Tensorflow一维卷积用法详解

以下是input_shape=(1,10,1), w = (3,1,1)时,conv1的shape

基于Tensorflow一维卷积用法详解

以下是input_shape=(1,10,1), w = (3,1,3)时,conv1的shape

基于Tensorflow一维卷积用法详解

补充知识:tensorflow中一维卷积conv1d处理语言序列举例

tf.nn.conv1d:

函数形式: tf.nn.conv1d(value, filters, stride, padding, use_cudnn_on_gpu=None, data_format=None, name=None):

程序举例:

import tensorflow as tf
import numpy as np
sess = tf.InteractiveSession()
 
# --------------- tf.nn.conv1d -------------------
inputs=tf.ones((64,10,3)) # [batch, n_sqs, embedsize]
w=tf.constant(1,tf.float32,(5,3,32)) # [w_high, embedsize, n_filers]
conv1 = tf.nn.conv1d(inputs,w,stride=2 ,padding='SAME') # conv1=[batch, round(n_sqs/stride), n_filers],stride是步长。
 
tf.global_variables_initializer().run()
out = sess.run(conv1)
print(out)

注:一维卷积中padding='SAME'只在输入的末尾填充0

tf.layters.conv1d:

函数形式:tf.layters.conv1d(inputs, filters, kernel_size, strides=1, padding='valid', data_format='channels_last', dilation_rate=1, activation=None, use_bias=True,...)

程序举例:

import tensorflow as tf
import numpy as np
sess = tf.InteractiveSession()
 
# --------------- tf.layters.conv1d -------------------
inputs=tf.ones((64,10,3)) # [batch, n_sqs, embedsize]
num_filters=32
kernel_size =5
conv2 = tf.layers.conv1d(inputs, num_filters, kernel_size,strides=2, padding='valid',name='conv2') # shape = (batchsize, round(n_sqs/strides),num_filters)
tf.global_variables_initializer().run()
out = sess.run(conv2)
print(out)

二维卷积实现一维卷积:

import tensorflow as tf
sess = tf.InteractiveSession()
def conv2d(x, W):
 return tf.nn.conv2d(x, W, strides=[1,1,1,1], padding='SAME')
def max_pool_1x2(x):
 return tf.nn.avg_pool(x, ksize=[1,1,2,1], strides=[1,1,2,1], padding='SAME')
'''
ksize = [x, pool_height, pool_width, x]
strides = [x, pool_height, pool_width, x]
'''
 
x = tf.Variable([[1,2,3,4]], dtype=tf.float32)
x = tf.reshape(x, [1,1,4,1]) #这一步必不可少,否则会报错说维度不一致;
'''
[batch, in_height, in_width, in_channels] = [1,1,4,1]
'''
 
W_conv1 = tf.Variable([1,1,1],dtype=tf.float32) # 权重值
W_conv1 = tf.reshape(W_conv1, [1,3,1,1]) # 这一步同样必不可少
'''
[filter_height, filter_width, in_channels, out_channels]
'''
h_conv1 = conv2d(x, W_conv1) # 结果:[4,8,12,11]
h_pool1 = max_pool_1x2(h_conv1)
tf.global_variables_initializer().run()
print(sess.run(h_conv1)) # 结果array([6,11.5])x

两种池化操作:

# 1:stride max pooling
convs = tf.expand_dims(conv, axis=-1) # shape=[?,596,256,1]
smp = tf.nn.max_pool(value=convs, ksize=[1, 3, self.config.num_filters, 1], strides=[1, 3, 1, 1],
     padding='SAME') # shape=[?,299,256,1]
smp = tf.squeeze(smp, -1) # shape=[?,299,256]
smp = tf.reshape(smp, shape=(-1, 199 * self.config.num_filters))
 
# 2: global max pooling layer
gmp = tf.reduce_max(conv, reduction_indices=[1], name='gmp')

不同核尺寸卷积操作:

kernel_sizes = [3,4,5] # 分别用窗口大小为3/4/5的卷积核
with tf.name_scope("mul_cnn"):
 pooled_outputs = []
 for kernel_size in kernel_sizes:
  # CNN layer
  conv = tf.layers.conv1d(embedding_inputs, self.config.num_filters, kernel_size, name='conv-%s' % kernel_size)
  # global max pooling layer
  gmp = tf.reduce_max(conv, reduction_indices=[1], name='gmp')
  pooled_outputs.append(gmp)
 self.h_pool = tf.concat(pooled_outputs, 1) #池化后进行拼接

以上这篇基于Tensorflow一维卷积用法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python比较两个图片相似度的方法
Mar 13 Python
python中字典dict常用操作方法实例总结
Apr 04 Python
Python 遍历子文件和所有子文件夹的代码实例
Dec 21 Python
python访问抓取网页常用命令总结
Apr 11 Python
djano一对一、多对多、分页实例代码
Aug 16 Python
ubuntu上安装python的实例方法
Sep 30 Python
Flask之pipenv虚拟环境的实现
Nov 26 Python
使用 Supervisor 监控 Python3 进程方式
Dec 05 Python
Python对wav文件的重采样实例
Feb 25 Python
Python中读取文件名中的数字的实例详解
Dec 25 Python
Scrapy实现模拟登录的示例代码
Feb 21 Python
python实现手机推送 代码也就10行左右
Apr 12 Python
Python参数传递机制传值和传引用原理详解
May 22 #Python
python filecmp.dircmp实现递归比对两个目录的方法
May 22 #Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
May 22 #Python
Python参数传递对象的引用原理解析
May 22 #Python
Python configparser模块常用方法解析
May 22 #Python
keras中的卷积层&池化层的用法
May 22 #Python
Keras Convolution1D与Convolution2D区别说明
May 22 #Python
You might like
PHP调用wsdl文件类型的接口代码分享
2014/11/19 PHP
PHP静态文件生成类实例
2014/11/29 PHP
调试WordPress中定时任务的相关PHP脚本示例
2015/12/10 PHP
thinkPHP删除前弹出确认框的简单实现方法
2016/05/16 PHP
深入浅析Yii admin的权限控制
2016/08/31 PHP
PHP实现的贪婪算法实例
2017/10/17 PHP
PHP常用函数之格式化时间操作示例
2019/10/21 PHP
如何用js 实现依赖注入的思想,后端框架思想搬到前端来
2015/08/03 Javascript
JS实现仿雅虎首页快捷登录入口及导航模块效果
2015/09/19 Javascript
Javascript的表单验证-提交表单
2016/03/18 Javascript
webpack中引用jquery的简单实现
2016/06/08 Javascript
浅谈window.onbeforeunload() 事件调用ajax
2016/06/29 Javascript
jQuery控制元素隐藏和显示
2017/03/03 Javascript
jQuery遍历节点方法汇总(推荐)
2017/05/13 jQuery
Vue.js tab实现选项卡切换
2017/05/16 Javascript
Vue2.5学习笔记之如何在项目中使用和配置Vue
2018/09/26 Javascript
node实现socket链接与GPRS进行通信的方法
2019/05/20 Javascript
解决Vue打包上线之后部分CSS不生效的问题
2019/11/12 Javascript
js实现小星星游戏
2020/03/23 Javascript
详解React 条件渲染
2020/07/08 Javascript
Vue实现一种简单的无限循环滚动动画的示例
2021/01/10 Vue.js
python记录程序运行时间的三种方法
2017/07/14 Python
python 寻找list中最大元素对应的索引方法
2018/06/28 Python
Python wxPython库Core组件BoxSizer用法示例
2018/09/03 Python
Python中如何引入第三方模块
2020/05/27 Python
python能做哪方面的工作
2020/06/15 Python
CSS3 background-image颜色渐变的实现代码
2018/09/13 HTML / CSS
html5拖拽应用记录及注意点
2020/05/27 HTML / CSS
塔吉特百货公司官网:Target
2017/04/27 全球购物
毕业研究生的自我鉴定
2013/11/30 职场文书
幼儿园教师国培感言
2014/02/02 职场文书
六一儿童节演讲稿
2014/05/23 职场文书
某某同志考察材料
2014/05/28 职场文书
合作与交流自我评价
2015/03/09 职场文书
使用redis生成唯一编号及原理示例详解
2021/09/15 Redis
利用nginx搭建RTMP视频点播、直播、HLS服务器
2022/05/25 Servers