私はプログラミングには新しく、特にtensorflowでプログラミングします。私はそれを使用して理解するおもちゃの問題を作り出しています。 その場合、分母はすべてのクラスの合計ではなく、サンプリングされたいくつかのクラスの合計であるsoftmaxのような関数を作りたいと思います。tensorflowで関数を実装する
これはtensorflowで実施することができる方法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
:numpyのを使用してPythonで
は次のようになるでしょうか? もっと一般的には、そのような新しい「カスタム」関数を作成する方法がありますか?
感謝を参照してください。私はあなたが正しいと思うし、forループの代わりに行列/ベクトルコーディングを試してみるべきですが、私はプログラミングを初めて経験しているので、そうする方法を考えることができません。どうすれば "for line in range(X.shape [0]):"のような行を避けることができますか?私はすべての行についてランダムサンプルで異なる分母を計算しなければならないからです。混乱している! –
おそらく見てみましょう:https://www.tensorflow.org/versions/r0.11/api_docs/python/nn.html#sampled_softmax_loss?ドキュメント内のその関数のすぐ隣にある候補サンプリングライブラリ関数のいくつかが、ここでも役立ちます。ソースがどのように実装されているかを見ることができます。 –