学习笔记 TF013:卷积、跨度、边界填充、卷积核 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cralison
V2EX    TensorFlow

学习笔记 TF013:卷积、跨度、边界填充、卷积核

  •  1
     
  •   cralison 2017-05-23 07:29:09 +08:00 2683 次点击
    这是一个创建于 3062 天前的主题,其中的信息可能已经有所发展或是发生改变。

    卷积运算,两个输入张量(输入数据和卷积核)进行卷积,输出代表来自每个输入的信息张量。tf.nn.conv2d 完成卷积运算。卷积核(kernel),权值、滤波器、卷积矩阵或模版,filter。权值训练习得。卷积核(filter 参数)权值数量决定需要学习卷积核数量。通道,计算机器视觉,描述输出向量。RGB 图像,3 个代表秩 1 张量[red,green,blue]通道。输出与 input_batch 同秩张量,与卷积核维数相同。两个张量卷积生成特征图(feature map)。特征图为输出添加新层代表张量卷积。访问输入批数据和特征图元素用相同索引,可了解输入与 kernel 卷积运算值变化。层,输出新维度。

    计算机视觉卷积价值,修改卷积核 strides(跨度)参数实现输入降维。strides 参数使卷积核无需遍历每个输入元素,跳过部分图像像素。kernel 在 input_batch 滑动,跨过部分元素,每次移动以 input_batch 一个元素为中心。位置重叠值相乘,乘积相加,得卷积结果。逐点相乘,整合两个输入。设置跨度,调整输入张量维数。降维减少运算量,避免重叠感受域。strides 参数格式与输入向量相同(image_batch_size_stride、image_height_stride、image_width_stride、image_channels_stride)。

    边界填充,卷积核与图像尺寸不匹配,填充图像缺失区域。TensorFlow 用 0 填充。padding 参数控制 conv2d 零填充数或错误状态。SAME:卷积输出输入尺寸相同,不考虑滤波器尺寸,缺失像素填充 0,卷积核扫像素数大于图像实际像素数。VALID:考虑滤波器尺寸。尽量不越过图像边界,也可能边界被填充。

    data_format 修改数据格式。NHWC 指定输入输出数据格式,[batch_size(批数据张量数)、in_height(批数据张量高度)、in_width(批数据张量宽度)、in_channels(批数据张量通道数)]。NCHW 指定输入输出数据格式,[batch_size、in_channels、in_height、in_width]。

    TensorFlow 滤波器参数指定输入卷积运算卷积核。滤波器使用特定模式突出图像中感兴趣特征。图像与边缘检测卷积核的卷积输出是所有检测边缘区域。tf.minimum 和 tf.nn.relu 使卷积值保持在 RGB 颜色值合法范围[0,255]内。卷积核初值随机设定,训练迭代,值由 CNN 学习层自动调整,训练一迭代,接收图像,与卷积核卷积,预测结果与图像真实标签是否一致,调整卷积核。

    import tensorflow as tf input_batch = tf.constant([ [#第 1 个输入 [[0.0],[1.0]], [[2.0],[3.0]] ], [#第 2 个输入 [[2.0],[4.0]], [[6.0],[8.0]] ] ]) print input_batch kernel = tf.constant([ [ [[1.0, 2.0]] ] ]) print kernel conv2d = tf.nn.conv2d(input_batch, kernel, strides=[1, 1, 1, 1], padding='SAME')#conv2d 卷积运算 print conv2d sess = tf.Session() print sess.run(conv2d) lower_right_image_pixel = sess.run(input_batch)[0][1][1] lower_right_kernel_pixel = sess.run(conv2d)[0][1][1] print lower_right_image_pixel, lower_right_kernel_pixel input_batch2 = tf.constant([ [#第 1 个输入(6x6x1) [[0.0],[1.0],[2.0],[3.0],[4.0],[5.0]], [[0.1],[1.1],[2.1],[3.1],[4.1],[5.1]], [[0.2],[1.2],[2.2],[3.2],[4.2],[5.2]], [[0.3],[1.3],[2.3],[3.3],[4.3],[5.3]], [[0.4],[1.4],[2.4],[3.4],[4.4],[5.4]], [[0.5],[1.5],[2.5],[3.5],[4.5],[5.5]] ] ]) print input_batch2 kernel2 = tf.constant([#卷积核(3x3x1) [[[0.0]], [[0.5]], [[0.0]]], [[[0.0]], [[1.0]], [[0.0]]], [[[0.0]], [[0.5]], [[0.0]]] ]) print kernel2 conv2d2 = tf.nn.conv2d(input_batch2, kernel2, strides=[1, 3, 3, 1], padding='SAME') print conv2d2 print sess.run(conv2d2) lower_right_image_pixel2 = sess.run(input_batch2)[0][1][1] lower_right_kernel_pixel2 = sess.run(conv2d2)[0][1][1] print lower_right_image_pixel2, lower_right_kernel_pixel2 input_batch3 = tf.constant([ [#第 1 个输入(6x6x1) [[0.0,1.0,2.0],[1.0,2.0,3.0]], [[0.1,1.1,2.1],[1.1,2.1,3.1]], [[0.2,1.2,2.2],[1.2,2.2,3.2]], [[0.3,1.3,2.3],[1.3,2.3,3.3]], [[0.4,1.4,2.4],[1.4,2.4,3.4]], [[0.5,1.5,2.5],[1.5,2.5,3.5]] ] ]) print input_batch3 kernel3 = tf.constant([ [ [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]], [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]], [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]] ], [ [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]], [[8., 0., 0.],[0., 8., 0.],[0., 0., 8.]], [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]] ], [ [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]], [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]], [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]] ] ]) print kernel3 conv2d3 = tf.nn.conv2d(input_batch3, kernel3, strides=[1, 1, 1, 1], padding='SAME') print conv2d3 activation_map3 = sess.run(tf.minimum(tf.nn.relu(conv2d3), 255)) print activation_map3 lower_right_image_pixel3 = sess.run(input_batch3)[0][1][1] lower_right_kernel_pixel3 = sess.run(conv2d3)[0][1][1] print lower_right_image_pixel3, lower_right_kernel_pixel3 kernel4 = tf.constant([ [ [[0., 0., 0.],[0., 0., 0.],[0., 0., 0.]], [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]], [[0., 0., 0.],[0., 0., 0.],[0., 0., 0.]] ], [ [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]], [[5., 0., 0.],[0., 5., 0.],[0., 0., 5.]], [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]] ], [ [[0., 0., 0.],[0., 0., 0.],[0., 0., 0.]], [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]], [[0., 0., 0.],[0., 0., 0.],[0., 0., 0.]] ] ]) print kernel4 conv2d4 = tf.nn.conv2d(input_batch3, kernel4, strides=[1, 1, 1, 1], padding='SAME') print conv2d4 activation_map4 = sess.run(tf.minimum(tf.nn.relu(conv2d4), 255)) print activation_map4 lower_right_image_pixel4 = sess.run(input_batch3)[0][1][1] lower_right_kernel_pixel4 = sess.run(conv2d4)[0][1][1] print lower_right_image_pixel4, lower_right_kernel_pixel4 

    参考资料: 《面向机器智能的 TensorFlow 实践》

    欢迎加我微信交流:qingxingfengzi

    我的微信公众号:qingxingfengzigz

    我老婆张幸清的微信公众号:qingqingfeifangz

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     900 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 20:50 PVG 04:50 LAX 13:50 JFK 16:50
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86