基于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 相关文章推荐
pygame学习笔记(3):运动速率、时间、事件、文字
Apr 15 Python
使用Python生成随机密码的示例分享
Feb 18 Python
Python中set与frozenset方法和区别详解
May 23 Python
python3中set(集合)的语法总结分享
Mar 24 Python
python requests 使用快速入门
Aug 31 Python
python Pandas如何对数据集随机抽样
Jul 29 Python
python利用tkinter实现屏保
Jul 30 Python
python django 原生sql 获取数据的例子
Aug 14 Python
Python3.7 读取 mp3 音频文件生成波形图效果
Nov 05 Python
基于Python正确读取资源文件
Sep 14 Python
详解Anaconda 的安装教程
Sep 23 Python
Python json解析库jsonpath原理及使用示例
Nov 25 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上传图片、删除图片实现代码
2010/05/12 PHP
基于PHP选项与信息函数的使用详解
2013/05/10 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
2014/06/13 PHP
分享十款最出色的PHP安全开发库中文详细介绍
2015/03/22 PHP
PHP加密解密实例分析
2015/12/25 PHP
CodeIgniter钩子用法实例详解
2016/01/20 PHP
JS 页面自动加载函数(兼容多浏览器)
2009/05/18 Javascript
js history对象简单实现返回和前进
2013/10/30 Javascript
Javascript中string转date示例代码
2013/11/01 Javascript
js实现仿MSN带关闭功能的右下角弹窗代码
2015/09/04 Javascript
JQuery插件Marquee.js实现无缝滚动效果
2016/04/26 Javascript
JS中如何比较两个Json对象是否相等实例代码
2016/07/13 Javascript
Node.js自定义实现文件路由功能
2017/09/22 Javascript
详解让sublime text3支持Vue语法高亮显示的示例
2017/09/29 Javascript
swiper 解决动态加载数据滑动失效的问题
2018/02/26 Javascript
js、jquery实现列表模糊搜索功能过程解析
2020/03/27 jQuery
[01:10:16]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第一局
2016/02/27 DOTA
python线程池threadpool使用篇
2018/04/27 Python
Pycharm导入Python包,模块的图文教程
2018/06/13 Python
python 统计列表中不同元素的数量方法
2018/06/29 Python
Django模型序列化返回自然主键值示例代码
2019/06/12 Python
如何用Anaconda搭建虚拟环境并创建Django项目
2020/08/02 Python
CSS3伪类选择器:nth-child()
2009/04/02 HTML / CSS
美国在线购买和出售礼品卡网站:EJ Gift Cards
2019/06/09 全球购物
奥地利手表、香水、化妆品和珠宝购物网站:Brasty.at
2021/01/17 全球购物
linux面试题参考答案(11)
2016/11/26 面试题
工厂厂长岗位职责
2013/11/08 职场文书
体育教育专业毕业生自荐信
2013/11/15 职场文书
诉讼财产保全担保书
2014/05/20 职场文书
有关环保的标语
2014/06/13 职场文书
文明单位创建材料
2014/12/24 职场文书
公司行政主管岗位职责
2015/04/09 职场文书
出生证明范本
2015/06/15 职场文书
《狼王梦》读后感:可怜天下父母心
2019/11/01 职场文书
python 网络编程要点总结
2021/06/18 Python
JavaScript流程控制(循环)
2021/12/06 Javascript