keras tensorflow 中的Tensor

bttbmeg0  于 2022-11-30  发布在  其他
关注(0)|答案(3)|浏览(254)

在Tensorflow 2中,在Tensor和数组之间执行元素级乘法的最快方法是什么?
例如,如果TensorT(类型为tf.Tensor)为:

[[0, 1],  
[2, 3]]

我们有一个数组a(类型为np.array):

[0, 1, 2]

我向曾魔杖道:

[[[0, 0],  
  [0, 0]],  
  
 [[0, 1],  
  [2, 3]],  
 
 [[0, 2],  
  [4, 6]]]

作为输出。

pobjuy32

pobjuy321#

利用Tensorflow的broadcasting规则可以很容易地计算出这一点:

import numpy as np
import tensorflow as tf

t = tf.constant([[0, 1],[2, 3]]) 
a = np.array([0, 1, 2])

# (2,2) x (3,1,1) produces the desired shape of (3,2,2)
result = t * a.reshape((-1, 1, 1))
# Alternatively: result = t * a[:, np.newaxis, np.newaxis]

print(result)

导致

<tf.Tensor: shape=(3, 2, 2), dtype=int32, numpy=
array([[[0, 0],
        [0, 0]],

       [[0, 1],
        [2, 3]],

       [[0, 2],
        [4, 6]]], dtype=int32)>
brvekthn

brvekthn2#

tensorflow中,我们有tf.tensordot,可以像下面这样使用它:

>>> a = tf.reshape(tf.range(4), (2,2))
>>> b = tf.range(3)
>>> tf.tensordot(b,a, axes=0)
<tf.Tensor: shape=(3, 2, 2), dtype=int32, numpy=
array([[[0, 0],
        [0, 0]],

       [[0, 1],
        [2, 3]],

       [[0, 2],
        [4, 6]]], dtype=int32)>
jdg4fx2g

jdg4fx2g3#

您可以遍历数组并使用Tensor值执行标量乘法:

import tensorflow as tf

t = tf.constant([[0, 1],[2, 3]])
a = [0, 1, 2]

u = []
for i in a:
    u.append(t.numpy()*i)
u = tf.constant(u)
print(u)

输出:

tf.Tensor(
[[[0 0]
  [0 0]]

 [[0 1]
  [2 3]]

 [[0 2]
  [4 6]]], shape=(3, 2, 2), dtype=int32)

同样,你可以使用列表解析,如下所示,得到一个更多的 readable 代码:

import tensorflow as tf

t = tf.constant([[0, 1],[2, 3]])
a = [0, 1, 2]

u = tf.constant([t.numpy()*i for i in a])
print(u)

相关问题