しかし、私はnumpy演算を使用して合計を実装することに問題があります。
私はthis existing implementationをフォローしていますが、単純化しようとしていますが、実行されているすべての配列操作が達成していることは完全にはわかりません。私の解釈は、CがRの各列に掛けられて合計されるということです。しかし、私のeinsumの実装np.einsum('ijk,km->ij', C, R)
は、必要な結果を生成していないようです。
この実装を簡素化するためのいくつかの指摘をお待ちしております。私の現在の試みはnp.einsum
を使用することでしたが、それはこれまでのところ私を得ていません。
簡素化するコード(画像/最初のリンクで説明):
小さなwords
を作成
batchsize = X.shape[0]
R = self.R
C = self.C
bw = self.bw
# Obtain word features
tmp = R.as_numpy_array()[:,X.flatten()].flatten(order='F')
tmp = tmp.reshape((batchsize, self.K * self.context))
words = np.zeros((batchsize, self.K, self.context))
for i in range(batchsize):
words[i,:,:] = tmp[i,:].reshape((self.K, self.context), order='F')
words = gpu.garray(words)
# Compute the hidden layer (predicted next word representation)
acts = gpu.zeros((batchsize, self.K))
for i in range(self.context):
acts = acts + gpu.dot(words[:,:,i], C[i,:,:])
あなたが特定の質問/エラーを持っていない限り、これは[コードレビュー]に適しています。 – Julien
@JulienBernu申し訳ありません、ここは新しいです。私は編集しました。 –
「必要な結果」が何であるかを説明する必要もあります。人々はあなたが望むものを理解するために紙全体を掘り起こすことはまずありません。 [mcve]を入力してください。 – Julien