使用 Tensorflow 的相关系数
Correlation coefficient using Tensorflow
我正在 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 执行我在上面所做的相同操作?我该怎么做?
谢谢。
您会发现这在 tensorflow 中相对简单。大多数 Numpy 操作在 tensorflow 中可用,并且通常采用相同的名称和形式(tensorflow 努力模仿 numpy)。
一些可以帮助您这样做的事情:
请记住,tensorflow 与 numpy 的不同之处在于您需要首先定义所有数学运算(这些是符号),然后要求 tensorflow 使用 [=10= 计算特定值].您应该编写代码,使您有一个 build_graph
函数,其中定义了所有张量流操作。在你创建一个会话后 with tf.Session() as sess:
你应该不需要在那个点之后创建任何 tensorflow 操作(你可以这样做,但这通常意味着你在做一些有问题的事情)。
请注意,您可以像在 numpy 中一样执行 + - * /
等操作,tensorflow 会覆盖这些操作以用 tf.sum
和 [=15= 等 tensorflow 构造替换它们] 视情况而定。
您可以不在tensorflow中使用任何numpy操作。一切都需要是张量流操作。如果你绝对不能没有一些 python 代码,你必须明确地用 tf.py_func
包装它,但如果你觉得有必要这样做 post 关于 SO 验证为什么它是必要的问题,它不应该是你的情况。
您的 build_graph
函数看起来应该与您提供的代码非常相似,只是用许多 tf.
函数代替了 numpy 等效函数。
一旦你在 tensorflow 中得到这个 运行ning,你将能够 运行 在 GPU 上进行这些操作,只要你有一个支持 CUDA 的 GPU 并且安装了 tensorflow-gpu
,使用 GPU 没有什么特别需要,tensorflow 会假设这是你的意图。
我正在 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 执行我在上面所做的相同操作?我该怎么做?
谢谢。
您会发现这在 tensorflow 中相对简单。大多数 Numpy 操作在 tensorflow 中可用,并且通常采用相同的名称和形式(tensorflow 努力模仿 numpy)。
一些可以帮助您这样做的事情:
请记住,tensorflow 与 numpy 的不同之处在于您需要首先定义所有数学运算(这些是符号),然后要求 tensorflow 使用 [=10= 计算特定值].您应该编写代码,使您有一个
build_graph
函数,其中定义了所有张量流操作。在你创建一个会话后with tf.Session() as sess:
你应该不需要在那个点之后创建任何 tensorflow 操作(你可以这样做,但这通常意味着你在做一些有问题的事情)。请注意,您可以像在 numpy 中一样执行
+ - * /
等操作,tensorflow 会覆盖这些操作以用tf.sum
和 [=15= 等 tensorflow 构造替换它们] 视情况而定。您可以不在tensorflow中使用任何numpy操作。一切都需要是张量流操作。如果你绝对不能没有一些 python 代码,你必须明确地用
tf.py_func
包装它,但如果你觉得有必要这样做 post 关于 SO 验证为什么它是必要的问题,它不应该是你的情况。
您的 build_graph
函数看起来应该与您提供的代码非常相似,只是用许多 tf.
函数代替了 numpy 等效函数。
一旦你在 tensorflow 中得到这个 运行ning,你将能够 运行 在 GPU 上进行这些操作,只要你有一个支持 CUDA 的 GPU 并且安装了 tensorflow-gpu
,使用 GPU 没有什么特别需要,tensorflow 会假设这是你的意图。