1

私はプログラミング、特にテンソルフローを使ったプログラミングが初めてです。使ってわかるおもちゃ問題を作っています。その場合、分母がすべてのクラスの合計ではなく、サンプリングされたいくつかのクラスの合計であるソフトマックスのような関数を構築したいと考えています。

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

これをテンソルフローでどのように実装できますか? より一般的には、そのような新しい「カスタム」関数を作成する方法はありますか?

4

1 に答える 1

0

Python/numpy 関数をテンソルフロー演算子としてラップできます。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も参照して ください

于 2016-10-22T02:36:28.840 に答える