我需要按如下方式生成一个随机向量:
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
,但也出现了同样的错误。
答案 0 :(得分:1)
在使用 tensorflow 的张量时,您应该主要使用 tf
API。在您的情况下,您可以简单地使用:
Y = tf.complex(tf.random.normal((tf.size(signal),)), tf.random.normal((tf.size(signal),)))
这将返回一个随机的 complex64
张量,其实部和虚部遵循正态分布。
如果您需要直接使用 numpy,您可以在 eager execution 中使用 numpy
方法来评估您的张量:
Y = (np.random.randn(tf.size(signal).numpy()) + 1j * np.random.randn(tf.size(signal).numpy()))
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
是因为它是您在问题中使用的。