使用Tensorflow

时间:2018-04-21 01:04:23

标签: python tensorflow correlation

我在Python中手工开发相关系数。我已经开发了使用NumPy数组,但我的矩阵很大,NumPy需要很长时间。

这是我已有的代码:

def corrcoef_2(x):
c = np.zeros((x.shape[0],x.shape[0],x.shape[0]))
for k1 in range(0,x.shape[0]):
    for k2 in range(0,x.shape[0]):
       c[k1,k2] = correlation(x[k1,:],x[k2,:])
return c

def correlation(T1, T2):
    numerator = np.mean((T1 - T1.mean()) * (T2 - T2.mean()))
    denominator = T1.std() * T2.std()
    if denominator == 0:
        return 0
    else:
        result = numerator / denominator
        return result

我不能使用Numpy corrcoef或TensorFlow原生方法,因为在我想将我的corrcoef函数推广到三维之后。

我可以做同样的事情,但是使用TensorFlow吗?我该怎么办?

感谢。

1 个答案:

答案 0 :(得分:0)

你会发现这在张量流中相对简单。大多数Numpy操作都可以在tensorflow中使用,并且通常使用相同的名称和形式(tensorflow会尝试模仿numpy)。

有助于您这样做的一些事情:

  • 请记住,张量流不同于numpy,因为您需要首先定义所有数学运算(这些是符号),然后使用sess.run请求tensorflow计算特定值。您应该编写代码,使得您具有build_graph函数,其中定义了所有tensorflow操作。在创建会话with tf.Session() as sess:之后,您不需要在该点之后创建任何张量流操作符(您可以这样做,但这通常意味着您正在做一些错误的操作)。

  • 请注意,您可以像执行numpy一样执行+ - * /之类的操作,tensorflow会覆盖这些操作,以根据需要使用tf.sumtf.multiply等张量流结构替换它们。

  • 您可以 NOT 在tensorflow中使用任何numpy操作。一切都需要成为张量流操作。如果你绝对不能没有一些python代码,你必须用tf.py_func明确地包装它,但是如果你觉得有必要这样做,那就发布一个关于SO的问题,验证为什么它是必要的,它不应该在你的情况下

您的build_graph函数看起来应该与您提供的代码非常相似,只需要使用大量tf.函数代替numpy等效函数。

一旦你在tensorflow中运行,你就可以在GPU上运行这些操作,只要你有一个支持CUDA的GPU并安装tensorflow-gpu,就没有什么特别需要使用GPU,tensorflow会假设这是你的意图。