基于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实现高效求解素数代码实例
Jun 30 Python
Python的shutil模块中文件的复制操作函数详解
Jul 05 Python
Python抓取框架 Scrapy的架构
Aug 12 Python
Python3导入CSV文件的实例(跟Python2有些许的不同)
Jun 22 Python
python开发游戏的前期准备
May 05 Python
python异常触发及自定义异常类解析
Aug 06 Python
利用Pytorch实现简单的线性回归算法
Jan 15 Python
使用Python+selenium实现第一个自动化测试脚本
Mar 17 Python
Python爬虫设置ip代理过程解析
Jul 20 Python
利用django创建一个简易的博客网站的示例
Sep 29 Python
python中用ggplot绘制画图实例讲解
Jan 26 Python
python实现高效的遗传算法
Apr 07 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 download.php实现代码 跳转到下载文件(response.redirect)
2009/08/26 PHP
php_screw 1.5:php加密: 安装与使用详解
2013/06/20 PHP
PHP和C#可共用的可逆加密算法详解
2015/10/26 PHP
php实现微信扫码支付
2017/03/26 PHP
Laravel中unique和exists验证规则的优化详解
2018/01/28 PHP
PHP http请求超时问题解决方案
2020/11/13 PHP
ExtJS Store的数据访问与更新问题
2010/04/28 Javascript
关于vue.js过渡css类名的理解(推荐)
2017/04/10 Javascript
JS实现异步上传压缩图片
2017/04/22 Javascript
js匿名函数使用&传参(实例)
2017/09/08 Javascript
JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
2018/04/19 Javascript
如何通过setTimeout理解JS运行机制详解
2019/03/23 Javascript
Node.js 获取微信JS-SDK CONFIG的方法示例
2019/05/21 Javascript
Vue使用JSEncrypt实现rsa加密及挂载方法
2020/02/07 Javascript
JavaScript前端实现压缩图片功能
2020/03/06 Javascript
vue 导出文件,携带请求头token操作
2020/09/10 Javascript
[03:55]2014DOTA2国际邀请赛 Fnatic经理采访赢DK在情理之中
2014/07/10 DOTA
Django中实现一个高性能计数器(Counter)实例
2014/07/09 Python
Python实现简单状态框架的方法
2015/03/19 Python
基于python脚本实现软件的注册功能(机器码+注册码机制)
2016/10/09 Python
使用Django Form解决表单数据无法动态刷新的两种方法
2017/07/14 Python
Python实现小数转化为百分数的格式化输出方法示例
2017/09/20 Python
Python实现的计算马氏距离算法示例
2018/04/03 Python
python-tkinter之按钮的使用,开关方法
2019/06/11 Python
Python pip替换为阿里源的方法步骤
2019/07/02 Python
python django下载大的csv文件实现方法分析
2019/07/19 Python
python对文件的操作方法汇总
2020/02/28 Python
法务专员岗位职责
2014/01/02 职场文书
夏季奶茶店创业计划书
2014/01/16 职场文书
2015年护理工作总结范文
2015/04/03 职场文书
为什么说餐饮很难做,是因为你不了解这些新规则
2019/08/20 职场文书
创业计划书之游泳馆
2019/09/16 职场文书
详解MySQL InnoDB存储引擎的内存管理
2021/04/08 MySQL
PHP面试题 wakeup魔法 Ezpop pop序列化与反序列化
2022/04/11 PHP
SQL Server 忘记密码以及重新添加新账号
2022/04/26 SQL Server
JS实现简单的九宫格抽奖
2022/06/28 Javascript