基于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的dict,set,list,tuple应用详解
Jul 24 Python
python更新列表的方法
Jul 28 Python
python算法表示概念扫盲教程
Apr 13 Python
详解Python读取配置文件模块ConfigParser
May 11 Python
Python中支持向量机SVM的使用方法详解
Dec 26 Python
Python装饰器的执行过程实例分析
Jun 04 Python
Django如何防止定时任务并发浅析
May 14 Python
python如何爬取网站数据并进行数据可视化
Jul 08 Python
python PyAutoGUI 模拟鼠标键盘操作和截屏功能
Aug 04 Python
解决Mac下使用python的坑
Aug 13 Python
python能做哪方面的工作
Jun 15 Python
python pygame入门教程
Jun 01 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
is_uploaded_file函数引发的不能上传文件问题
2013/10/29 PHP
PHP解析html类库simple_html_dom的转码bug
2014/05/22 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
PHP单例模式数据库连接类与页面静态化实现方法
2019/03/20 PHP
js中判断数字\字母\中文的正则表达式 (实例)
2012/06/29 Javascript
Javascript实现简单的富文本编辑器附演示
2014/06/16 Javascript
angularjs实现与服务器交互分享
2014/06/24 Javascript
get(0).tagName获得作用标签示例代码
2014/10/08 Javascript
jQuery使用removeClass方法删除元素指定Class的方法
2015/03/26 Javascript
整理JavaScript对DOM中各种类型的元素的常用操作
2016/05/05 Javascript
JavaScript提升性能的常用技巧总结【经典】
2016/06/20 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图和饼图的组合图效果示例【附demo源码下载】
2017/03/09 Javascript
javascript数组拍平方法总结
2018/01/20 Javascript
关于layui toolbar和template的结合使用方法
2019/09/19 Javascript
jQuery HTML获取内容和属性操作实例分析
2020/05/20 jQuery
[02:06]DOTA2英雄基础教程 暗影萨满
2013/12/16 DOTA
python 调用win32pai 操作cmd的方法
2017/05/28 Python
解决Django模板无法使用perms变量问题的方法
2017/09/10 Python
轻松实现TensorFlow微信跳一跳的AI
2018/01/05 Python
Win8下python3.5.1安装教程
2020/07/29 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
2018/10/18 Python
Python对象的属性访问过程详解
2020/03/05 Python
Python调用系统命令os.system()和os.popen()的实现
2020/12/31 Python
使用canvas一步步实现图片打码功能的方法
2019/06/17 HTML / CSS
Debenhams百货英国官方网站:Debenhams UK
2016/07/12 全球购物
中软Java笔试题
2012/11/11 面试题
解释一下ruby中的特殊方法与特殊类
2013/02/26 面试题
大学生的应聘自我评价
2013/12/13 职场文书
八一演出活动方案
2014/02/03 职场文书
2014年校务公开工作总结
2014/12/18 职场文书
2015年南京大屠杀纪念日活动总结
2015/03/24 职场文书
公司员工离职感言
2015/08/03 职场文书
简历自我评价:教师师德表现自我评价
2019/04/24 职场文书
企业内部管理控制:银行存款控制制度范本
2020/01/10 职场文书
nginx部署多前端项目的几种方法
2021/05/25 Servers
详解Python魔法方法之描述符类
2021/05/26 Python