深度学习面试题23:批次张量和卷积核的简易定义方式

Posted mfryf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习面试题23:批次张量和卷积核的简易定义方式相关的知识,希望对你有一定的参考价值。

目录

  直接定义的缺点

  简易定义的方式

  参考资料


 

直接定义的缺点

在tensorflow中假设有一批输入为:

技术图片

其定义如下:

技术图片
tf.constant([
    [
        [
            [3, 1, -3],
            [1, -1, 7]
        ],
        [
            [-2, 2, -5],
            [2, 7, 3]
        ]
    ],
    [
        [
            [-1, 3, 1],
            [-3, -8, 6]
        ],
        [
            [4, 6, 8],
            [5, 9, -5]
        ]
    ]
], tf.float32)
View Code

这是一个4维张量,中括号的层次比较多,因此定义起来很容易写错;另外一批卷积核的定义方式和他不同,这也增加了定义的难度。

批次输入的张量的定义方式为:[batch, in_height, in_width, in_channels]

多个卷积核的定义方式为:[filter_height, filter_width, in_channels, out_channels]

 返回目录

 

简易定义的方式

 技术图片

对一批输入:

按照图中蓝色的顺序声明一个一维张量,然后按照[batch, in_height, in_width, in_channels],对一维张量reshape。

对一批卷积核:

按照图中红色的顺序声明一个一维张量,然后按照[filter_height, filter_width, in_channels, out_channels],对一维张量reshape。

这样的话不需要写很多行并且包含复杂中括号关系的代码,看着张量能快速写出对应声明,提高写代码的效率,另外出错的概率会降低

技术图片
import tensorflow as tf

# [batch, in_height, in_width, in_channels]
input = tf.constant([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16], tf.float32)
input = tf.reshape(input,[2,2,2,2])
print(input.shape)

# [filter_height, filter_width, in_channels, out_channels]
kernel = tf.constant([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16], tf.float32)
kernel = tf.reshape(kernel,[2,2,2,2])
print(kernel.shape)

print(tf.Session().run(tf.nn.conv2d(input,kernel,[1,1,1,1],"VALID")))
View Code

 返回目录

 

参考资料

《图解深度学习与神经网络:从张量到TensorFlow实现》_张平

 

 返回目录

 

以上是关于深度学习面试题23:批次张量和卷积核的简易定义方式的主要内容,如果未能解决你的问题,请参考以下文章

深度学习面试题19:1*1卷积核的作用

深度学习面试题19:1*1卷积核的作用

深度学习面试题09:一维卷积(Full卷积Same卷积Valid卷积带深度的一维卷积)

深度学习面试题25:分离卷积(separable卷积)

深度学习面试题25:分离卷积(separable卷积)

深度学习面试题24:在每个深度上分别卷积(depthwise卷积)