基于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的Cookie.py模块支持冒号做key的方法
Dec 28 Python
python实现的各种排序算法代码
Mar 04 Python
python打开网页和暂停实例
Sep 30 Python
在Python中处理字符串之isdigit()方法的使用
May 18 Python
Python之自动获取公网IP的实例讲解
Oct 01 Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
Feb 24 Python
浅析Python数据处理
May 02 Python
Python从使用线程到使用async/await的深入讲解
Sep 16 Python
python Gunicorn服务器使用方法详解
Jul 22 Python
keras和tensorflow使用fit_generator 批次训练操作
Jul 03 Python
如何快速理解python的垃圾回收机制
Sep 01 Python
详解matplotlib中pyplot和面向对象两种绘图模式之间的关系
Jan 22 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变量范围介绍
2012/10/15 PHP
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
2013/04/28 PHP
php设置session值和cookies的学习示例
2014/03/21 PHP
php使用百度天气接口示例
2014/04/22 PHP
PHP关于htmlspecialchars、strip_tags、addslashes的解释
2014/07/04 PHP
php字符集转换
2017/01/23 PHP
laravel 实现根据字段不同值做不同查询
2019/10/23 PHP
js函数般调用正则
2008/04/08 Javascript
如何在父窗口中得知window.open()出的子窗口关闭事件
2013/10/15 Javascript
js实现的map方法示例代码
2014/01/13 Javascript
JavaScript返回网页中锚点数目的方法
2015/04/03 Javascript
jquery实现先淡出再折叠收起的动画效果
2015/08/07 Javascript
jQuery qrcode生成二维码的方法
2016/04/03 Javascript
Vue.js动态组件解析
2016/09/09 Javascript
纯js实现悬浮按钮组件
2016/12/17 Javascript
nodejs入门教程二:创建一个简单应用示例
2017/04/24 NodeJs
JS中的数组转变成JSON格式字符串的方法
2017/05/09 Javascript
浅谈Vuejs中nextTick()异步更新队列源码解析
2017/12/31 Javascript
vue中各种通信传值方式总结
2019/02/14 Javascript
vue项目中使用多选框的实例代码
2020/07/22 Javascript
Python中map,reduce,filter和sorted函数的使用方法
2015/08/17 Python
python Opencv将图片转为字符画
2021/02/19 Python
tensorflow实现图像的裁剪和填充方法
2018/07/27 Python
前后端结合实现amazeUI分页效果
2020/08/21 HTML / CSS
女士时装鞋:Chinese Laundry
2018/08/29 全球购物
高级销售员求职信
2013/10/25 职场文书
英语系本科生求职信范文
2013/12/18 职场文书
高二英语教学反思
2014/01/19 职场文书
2014大学生全国两会学习心得体会
2014/03/13 职场文书
关于颐和园的导游词
2015/01/30 职场文书
暑期辅导班宣传单
2015/07/14 职场文书
2015年教师个人业务工作总结
2015/10/23 职场文书
团支部书记竞选稿
2015/11/21 职场文书
详解Python小数据池和代码块缓存机制
2021/04/07 Python
利用Python判断整数是否是回文数的3种方法总结
2021/07/07 Python
Golang 1.18 多模块Multi-Module工作区模式的新特性
2022/04/11 Golang