gpt4 book ai didi

python - Tensorflow、py_func 或自定义函数

转载 作者:太空狗 更新时间:2023-10-30 02:28:44 30 4
gpt4 key购买 nike

我目前正在使用 Tensorflow 开发四元数神经网络(我想使用 GPU)。 TensorFlow 不支持四元数,但是您可以将 than 表示为 4x4 实矩阵,因此可以在 TensorFlow 中构建这样的神经网络。

是否有一种简单的方法来添加自定义操作或对张量执行自定义操作?

例如,我可以这样写:

output_activation = tf.nn.softmax(tf.matmul(hidden_activation, Weight_to_ouput))

...这很酷!你所要做的就是添加一个损失函数,然后进行反向传播。但是,我想用四元数做同样的事情,例如:

output_activation = mySigmoid(myFunction(hidden_activation, Weight_to_output))

但是,我需要将四元数与张量相互转换以优化 GPU 计算。所以我需要创建一个函数,它获取一些张量作为参数并返回转换后的张量。我查看了 py_func,但似乎无法返回张量。

我尝试了以下方法,但失败了:

def layerActivation(inputTensor,WeightTensor):
newTensor = tf.matmul(inputTensor,WeightTensor)
return newTensor

...在 main() 中:

x = placeholder ...
W_to_hidden = tf.Variable
test = tf.py_func(layerActivation, [x,_W_to_hidden], [tf.float32])

with tf.Session() as sess:
tf.initialize_all_variables().run()
king_return = sess.run(test, feed_dict={x: qtrain})

错误:未实现:不支持的对象类型张量

理想情况下,我可以在 TensorFlow 的标准反向传播算法中使用此 output_activation,但我不知道这是否可能。

最佳答案

根据所需的功能,您可以将您的操作实现为现有 TensorFlow 操作的组合,而无需使用 tf.py_func()

例如,以下工作并将在 GPU 上运行:

def layer_activation(input_tensor, weight_tensor):
return tf.matmul(input_tensor, weight_tensor)

# ...
x = tf.placeholder(...)
W_to_hidden = tf.Variable(...)
test = layer_activation(input_tensor, weight_tensor)
# ...

使用tf.py_func()的主要原因如果您的操作无法使用 TensorFlow 操作来实现,并且您想注入(inject)一些适用于张量实际值的 Python 代码(例如使用 NumPy)。

但是,如果您的 mySigmoid()myFunction() 操作无法根据现有的 TensorFlow 操作来实现,并且您想在 GPU 上实现它们,那么—— as keveman says —您将需要添加一个新操作。

关于python - Tensorflow、py_func 或自定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35550451/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com