zoukankan      html  css  js  c++  java
  • Tensorflow张量的形状表示方法

    对输入或输出而言:

    一个张量的形状为a x b x c x d,实际写出这个张量时:

    最外层括号[…]表示这个是一个张量,无别的意义!

    次外层括号有a个,表示这个张量里有a个样本

    再往内的括号有b个,表示每个样本的长

    再往内的括号有c个,表示每个样本的宽

    再往内没有括号,也就是最内层的括号里的数有d个,表示每个样本的深度为d

    tf.nn.conv2d(), tf.reshape()等都是这样表示

    给一个具体的张量,求这个张量的a,b,c,d值时,首先忽略最外层的括号,再数次外层括号个数(a),再往内(b),再往内(c),最后看最里层的括号内有几个数(d)(各数代表各深度层的值)。

    如:

    Tensor = tf.constant([[[[1],[2],[ 3]],[[4],[5],[6 ]],[[ 7],[8],[9]]]])  # 也可以不写逗号
    # Tensor.shape = (1, 3, 3, 1)

    形状为(1, 3, 3, 1)

    (看着容易眼花,所以一般竖着写)

    Tensor2 = tf.constant([[[[1],[2],[ 3]],[[4],[5],[6 ]],[[ 7],[8],[9]]], [[[1],[2],[ 3]],[[4],[5],[6 ]],[[ 7],[8],[9]]]])
    # Tensor2.shape = (2, 3, 3, 1)

    形状为(2, 3, 3, 1)   

    类似的还有tf.ones(), tf.zeros()

    注意!!!

    对卷积核来说,a,b,c,d对应的括号形式虽然相同,但a,b,c,d代表的含义和输入不一样!!分别代表长,宽,深,个数!!所以书写时要注意括号的形式!!比如我要写一个长宽分别为2,2,深度为1,个数为1的kernel张量,则它的形状应为(2,2,1,1),而不是(1,2,2,1),用类似tf.random.normal的方法来初始化kernel或weights时也是(长,宽,深,个数)

    比如:

    filter = tf.constant([[[[1]],
                      [[2]]],
                     [[[ 3]],
                      [[4]]]])

     我想可能是和矩阵的乘法(左矩阵和右矩阵的位置)有关

    池化层的池化窗口大小ksize形状为[1, height, width, 1]

    使用tensor.reshape(-1, a, b, c)时,-1代表不指定这一维的大小,因为张量里的元素个数是一定的,其他维的大小确定后,这一维的大小也随之确定,但不能在2各维度上使用-1(可以想象为解一元方程组,有一个未知数时方程有特解,有两个未知数时方程的解不定)

  • 相关阅读:
    JS-Array数组对象
    JS-Math对象
    JS-Date对象
    JS-流程控制汇集
    css笔记
    CSS3-box盒布局
    css笔记
    CSS3中的animation动画
    JS-百钱买百鸡案例-for循环制作
    JS-用js的for循环实现九九乘法表以及其他算数题等
  • 原文地址:https://www.cnblogs.com/tan-wm/p/9353576.html
Copyright © 2011-2022 走看看