tensorflow中的conv1d和conv2d

  • 网上搜的一篇资料,还没看:tensorflow中一维卷积conv1d处理语言序列的一点记录
  • tensorflow中的conv1d和conv2d的区别:conv1d是单通道的,conv2d是多通道,所以conv1d适合处理文本序列,conv2d适合处理图像。
  • conv1d
  • import tensorflow as tf
    input = tf.Variable(tf.random_normal([1, 5, 20]))
    params1 = {"inputs": input, "filters": 2048, "kernel_size": 2,"strides":1,"activation": tf.nn.relu, "use_bias": True,"padding":'SAME'}
    op01 = tf.layers.conv1d(**params1)
    init = tf.initialize_all_variables()
    with tf.Session() as sess:
    sess.run(init)
    print(sess.run(tf.shape(op01)))
    >>>[1,5,2048]

输入input第一维为batch_size,此处为1,即只有一个样本,第二维和第三维分别表示输入的长和宽,在文本中就是word_embedding矩阵,句子长度为5,embedding维度为20。
在文本中,卷积的某一维大小往往为embedding长度,即在宽度上不需要窗口移动,宽度就是整个窗口。所以conv1d默认卷积的宽度就为embedding维度,长度是通过kernel_size来指定的,此处为2,即卷积核的大小为2*embedding_size。strides为步长,此处为1,即卷积核每隔一个单词移动一次。filters是卷积核的个数,即输出的维度。padding有valid和same两种选择,valid在长度方向(宽度方向不padding)不进行padding,而same则在长度方向进行padding,保证输入句子长度和卷积后输出的句子长度一致,此处为5。

  • conv2d
    #case 1
    #input输入是1张 3*3 大小的图片,图像通道数是5(batch,长,宽,输入通道数)
    #filter卷积核是 1*1 大小,数量是1(长,宽,输入通道数,输出通道数(卷积核个数))
    #strides步长是[1,1,1,1],第一维和最后一维保持1不变,第二维和第三维分别为长度方向和宽度方向的步长。
    #1张图最后输出的op1就是一个 shape为[1,3,3,1] 的张量,即得到一个3*3的feature map(batch,长,宽,输出通道数)
    input = tf.Variable(tf.random_normal([1, 3, 3, 5]))
    filter = tf.Variable(tf.random_normal([1, 1, 5, 1]))
    op1 = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='SAME')
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值