生成随机复数值张量

时间:2021-05-11 08:43:13

标签: python numpy tensorflow

我需要按如下方式生成一个随机向量:

Y = (np.random.randn(tf.size(signal)) + 1j * np.random.randn(tf.size(signal)))

其中变量 signal 是表示神经网络输出的向量,但出现如下错误:

  File "mtrand.pyx", line 1422, in mtrand.RandomState.randn
  File "mtrand.pyx", line 1552, in mtrand.RandomState.standard_normal
  File "mtrand.pyx", line 167, in mtrand.cont0_array
TypeError: 'Tensor' object cannot be interpreted as an integer

我也试过 signal.shape ,但也出现了同样的错误。

1 个答案:

答案 0 :(得分:1)

TF1.x 和 TF2.x:在 TensorFlow 中进行操作

在使用 tensorflow 的张量时,您应该主要使用 tf API。在您的情况下,您可以简单地使用:

Y = tf.complex(tf.random.normal((tf.size(signal),)), tf.random.normal((tf.size(signal),)))

这将返回一个随机的 complex64 张量,其实部和虚部遵循正态分布。

TF2.x:急切执行

如果您需要直接使用 numpy,您可以在 eager execution 中使用 numpy 方法来评估您的张量:

Y = (np.random.randn(tf.size(signal).numpy()) + 1j * np.random.randn(tf.size(signal).numpy()))

TF1.x:使用 tf.Session

评估您的张量

您实际上需要通过调用 tf.Session.run 来评估 tf.Session 中的张量,以将输出作为 numpy 数组:

get_size_op = tf.size(signal)

with tf.Session() as sess:
    # you might need to provide a dictionary containing 
    # the values for your placeholders (feed_dict keyword argument)
    size_signal = sess.run(get_size_op)

# size_signal is an integer you can use in the numpy function
Y = (np.random.randn(size_signal) + 1j * np.random.randn(size_signal))

注意:最好在会话中评估 signal 并使用 numpy 继续计算的其余部分(使用 signal.size 而不是 tf.size(signal))< /p>


注意tensor.shape 的等价物是 tf.shape。我使用 tf.size 是因为它是您在问题中使用的。