【问题标题】:Implementing a function with tensorflow用 tensorflow 实现一个函数
【发布时间】:2016-10-21 20:39:51
【问题描述】:

我是编程新手,尤其是使用 tensorflow 编程。我正在制作玩具问题以了解使用它。 在那种情况下,我想构建一个类似 softmax 的函数,其中分母不是所有类的总和,而是一些采样类的总和。

在 python 中使用 numpy 会是这样的:

def my_softmax(X,W, num_of_samples):
    K = 4
    S = np.zeros(((np.dot(X,np.transpose(W))).shape))
    for line in range(X.shape[0]):
        XW = np.dot(X[line],np.transpose(W))
        m = np.max(XW)
        samples_sum = 0
        for s in range(num_of_samples):
            r = (randint(0,K-1))
            samples_sum += np.exp(XW[r]- m)

        S[line] = (np.exp(XW-m))/(samples_sum)

    return S

这如何在 tensorflow 中实现? 更一般地说,有没有一种可能的方法来创建新的“自定义”函数?

【问题讨论】:

    标签: python function tensorflow softmax


    【解决方案1】:

    您可以将 Python/numpy 函数包装为 tensorflow 运算符。见 tf.py_func https://www.tensorflow.org/versions/r0.9/api_docs/python/script_ops.html

    但是,最好不要在生产环境中使用它,因为性能会受到(显着)影响。对于大多数 np.* 函数,您会找到可以使用的相应 tf.* 函数。尝试用矩阵/向量而不是 for 循环来表示所有计算。

    另见 https://www.tensorflow.org/versions/r0.11/api_docs/python/constant_op.html

    【讨论】:

    • 感谢您的回复。我认为你是对的,我应该尝试矩阵/向量编码而不是 for 循环,但由于我是编程新手,所以我想不出办法。例如,我如何避免“for line in range(X.shape[0]):”?因为我必须为每一行使用随机样本计算不同的分母。令人困惑!
    • 或许看看:tensorflow.org/versions/r0.11/api_docs/python/… ?文档中该函数旁边的一些候选采样库函数在这里也可能有所帮助。您可以查看源代码以了解它们是如何实现的。
    • @AjayJoshi 您的第一个链接tensorflow.org/versions/r0.9/api_docs/python/script_ops.html 无效。请更新。
    猜你喜欢
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 2017-07-28
    • 2020-10-28
    • 2021-11-21
    • 1970-01-01
    相关资源
    最近更新 更多