Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow 2.0中的4D张量乘法_Tensorflow_Tensorflow2.0_Tensor - Fatal编程技术网

Tensorflow 2.0中的4D张量乘法

Tensorflow 2.0中的4D张量乘法,tensorflow,tensorflow2.0,tensor,Tensorflow,Tensorflow2.0,Tensor,我有两个张量: 带形状的A:[128,24,24256] 带形状的B:[128,24,24,64] 我想把它们加在一起,但是维数是不同的,所以通过类比2D矩阵,我想把张量B和其他张量C相乘,这样张量积B*C将有维数[128,24,24256] 如何在tensorflow中实现这一点? 哪个维度应该是C张量?这取决于你想做什么。我可以想出两种方法 选择1 除后两个维度外,所有其他维度都与a和b完全相同。可以将n-d维矩阵乘法视为在最后两个维上进行矩阵乘法,并按原样为其余维添加前缀 a = tf.r

我有两个张量:

  • 带形状的A:[128,24,24256]
  • 带形状的B:[128,24,24,64]
  • 我想把它们加在一起,但是维数是不同的,所以通过类比2D矩阵,我想把张量B和其他张量C相乘,这样张量积B*C将有维数[128,24,24256]

    如何在tensorflow中实现这一点?
    哪个维度应该是C张量?

    这取决于你想做什么。我可以想出两种方法

    选择1 除后两个维度外,所有其他维度都与
    a
    b
    完全相同。可以将n-d维矩阵乘法视为在最后两个维上进行矩阵乘法,并按原样为其余维添加前缀

    a = tf.random.normal(shape=[128,24,24,256])
    b = tf.random.normal(shape=[128,24,24,64])
    c = tf.random.normal(shape=[128,24,64,256])
    
    # Essentially performing a [24, 64] . [64, 256]
    # This is dot product
    bc = tf.matmul(b,c)
    
    # Res would be of size `128,24,24,256`
    # This is element-wise
    res = a * bc
    
    选择2 您还可以通过将除最后两个维度之外的其他维度保持为1来利用广播功能。前两个维度中的任何一个(或全部)都可以是1,其余的由TensorFlow负责

    a = tf.random.normal(shape=[128,24,24,256])
    b = tf.random.normal(shape=[128,24,24,64])
    # Note how the beginning dimensions are 1
    c = tf.random.normal(shape=[1,1,64,256])
    
    bc = tf.matmul(b,c)
    
    res = a * bc
    

    但是正如我前面所说的,
    c
    的大小实际上取决于您的用例。没有正确的普遍答案。

    那么,你的问题是,C的维数应该是多少?那么如何在tensorflow中实现呢?@thushv89两者都有!哪个维度应该是C,以及如何在tensorflow中对其进行编码。谢谢你的评论,我已经更新了我的问题谢谢你的回答!我的目标是从头开始构建Resnet。这就是为什么需要矩阵。