【问题标题】:4D Tensor multiplication in Tensorflow 2.0Tensorflow 2.0 中的 4D 张量乘法
【发布时间】:2021-03-17 22:45:51
【问题描述】:

我有 2 个张量:

  1. 一个形状:[128,24,24,256]
  2. B 的形状:[128,24,24,64]

我想将它们加在一起,但维度不同,因此通过类比二维矩阵,我想将张量 B 与其他一些张量 C 相乘,这样张量积 B * C 将具有维度 [128,24,24,256]。

我怎样才能在张量流中做到这一点? 哪个维度应该是C Tensor?

【问题讨论】:

  • 那么,您的问题是,C 的维数应该是多少?以及如何在 tensorflow 中实现它?
  • @thushv89 两者都有!哪个维度应该是 C 以及如何在 tensorflow 中对其进行编码。感谢您的评论,我已经更新了我的问题

标签: tensorflow tensorflow2.0 tensor


【解决方案1】:

这真的取决于你想要做什么。我能想到的方法有两种,

选项 1

除了最后两个之外,您保持所有其他维度与ab 完全相同。您可以将 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 的大小实际上取决于您的用例。没有正确的通用答案。

【讨论】:

  • 感谢您的回答!我的目标是从头开始构建 Resnet。这就是需要矩阵的原因。
猜你喜欢
  • 2017-08-21
  • 2017-05-21
  • 2021-05-21
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2017-09-12
  • 1970-01-01
  • 2020-06-12
相关资源
最近更新 更多