tensorflow中是否有一个函数用于进行索引函数的转换?

时间:2018-01-07 13:44:11

标签: python tensorflow differential-equations

我正在寻找(但已完全无法找到)tensorflow中的一个函数,这将允许我做一个地图'在张量上。

地图

首先,我甚至不确定是否有地图'功能?通过这个意思,我可以将给定的f(x)应用于张量中的偶数。例如我想要这样的东西

def f(x):
  return x**2

Y = tf.Variable(np.array([[1.0, 2.0],
                          [3.0, 4.0]])

Y = tf.map_function(X, f)

产生(在会话中适当地运行之后,显然)具有值

的张量
Y = [[1.0, 4.0],
     [9.0, 16.0]]

这是否存在(对于一般f - 我意识到tf.nn.relutf.nn.sigmoid? On one hand, it seems like it should, since map`是一个非常基本的操作。另一方面,它将涉及获取提供的python函数并以某种方式将其转换为在GPU上执行,这听起来像是可能无法实现的。

我在这里要求用棍子上的月亮吗?

** MAPI *

如果存在这样的功能,是否有允许我使用索引感知f的版本? e.g。

def f(x, i):
  if (i != [0, 0]):
    k2 = np.sum([x**2 for x in i])
  else:
    k2 = 1.0 # To avoid division by zero
  return (x / k2)

Y = tf.Variable(np.ones(shape=(2,3)))

Y = tf.mapi_function(X, f)
制造

Y = [[1.0, 1.0, 0.25],
     [1.0, 0.5, 0.2]]

如果这样的功能不存在,我是否可以(对于固定的f)通过构建来自(略微修改的)源的张量流来添加它们?

为什么我需要这样的功能

我之所以这么说是因为我试图使用tensorflow来数字化整合PDE。作为其中的一部分,我需要计算拉普拉斯(d ^ 2 / dx ^ 2 + d ^ 2 / dy ^ 2 + d ^ 2 / dz ^ 2)u(x,y,z)。在字段u(k_X,k_y,k_z)的傅里叶变换表示中,这涉及除以k_x ^ 2 + k_y ^ 2 + k_z ^ 2.

可以预先计算一个反平方波数值的张量,并逐个元素乘法。但这会占用大量内存。我怀疑从内存加载这些值也会更慢。

1 个答案:

答案 0 :(得分:1)

在您希望单独映射到每个x,y,z坐标的具体示例中,您可以使用tf.split()tf.stack()轻松完成此操作。也就是说,我假设你有一个大小为K的输入张量(称之为[n,m,...,3]);也就是说,最后一个维度索引x,y,z坐标。如果是,请使用tf.split()K分解为Kx,Ky,Kz。然后应用你的地图操作(我通常使用tf.map_fn()),然后最后与tf.stack()一起堆叠。

如果我理解正确的设置应该这样做。如果没有,请提供一个最小的工作示例,使问题具体化;否则我们最多猜测一个解决方案。